# Ubuntu/Debian
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4%2Bubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
apt update
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
# 配置数据库
mysql -uroot -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
安装SNMP工具:
apt install snmp snmpd snmp-mibs-downloader snmp-browser
! 启用SNMP v2c
snmp-server community public RO # 只读团体名
snmp-server community private RW # 读写团体名(可选)
! 或使用SNMP v3(更安全)
snmp-server group SNMPGroup v3 priv
snmp-server user admin SNMPGroup v3 auth sha password123 priv aes 256 password456
! 配置设备信息
snmp-server location "Data Center Rack 1"
snmp-server contact "Network Team"
snmp-agent community read publicsnmp-agent community read publicset snmp community public authorization read-only接口类型:SNMP
IP地址:192.168.1.1
端口:161
SNMP版本:SNMPv2
团体字:public
# 接口入流量(bytes)
1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX} # ifInOctets
# 接口出流量(bytes)
1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX} # ifOutOctets
# 接口速率(bps)
1.3.6.1.2.1.2.2.1.5.{#SNMPINDEX} # ifSpeed
# 接口状态
1.3.6.1.2.1.2.2.1.8.{#SNMPINDEX} # ifOperStatus
1=up, 2=down, 3=testing
{
"名称": "Network Interfaces Discovery",
"类型": "SNMP agent",
"键值": "net.if.discovery",
"SNMP OID": "1.3.6.1.2.1.2.2.1.2",
"更新间隔": "1h",
"主机接口": "选择SNMP接口"
}
名称:Interface {#IFNAME}:Incoming traffic
键值:net.if.in[ifInOctets.{#SNMPINDEX}]
单位:bps
更新时间:30s
预处理器:Change per second
乘数:8(bytes转bits)
SNMP OID:1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}
名称:Interface {#IFNAME}:Outgoing traffic
键值:net.if.out[ifOutOctets.{#SNMPINDEX}]
单位:bps
更新时间:30s
预处理器:Change per second
乘数:8
SNMP OID:1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX}
名称:Interface {#IFNAME}:Bandwidth usage
键值:net.if.util[ifInOctets.{#SNMPINDEX},ifOutOctets.{#SNMPINDEX},ifSpeed.{#SNMPINDEX}]
类型:可计算的
公式:(last("net.if.in[ifInOctets.{#SNMPINDEX}]") + last("net.if.out[ifOutOctets.{#SNMPINDEX}]")) * 100 / last("net.if.speed[ifSpeed.{#SNMPINDEX}]")
单位:%
# 接口流量超过90%
{Template SNMP Network Device:net.if.util[ifInOctets.{#SNMPINDEX},ifOutOctets.{#SNMPINDEX},ifSpeed.{#SNMPINDEX}].avg(5m)}>90
# 突发流量告警(超过接口速率80%持续5分钟)
{Template SNMP Network Device:net.if.in[ifInOctets.{#SNMPINDEX}].avg(5m)} > last(/Template SNMP Network Device/net.if.speed[ifSpeed.{#SNMPINDEX}]) * 0.8
# 接口宕机
{Template SNMP Network Device:net.if.status[ifOperStatus.{#SNMPINDEX}].last()}<>1
# 接口错误率过高
{Template SNMP Network Device:net.if.in.errors[ifInErrors.{#SNMPINDEX}].avg(5m)}>10
名称:Interface {#IFNAME} Traffic
图形类型:Normal
监控项:
- Interface {#IFNAME}:Incoming traffic
- Interface {#IFNAME}:Outgoing traffic
# 显示多个接口的流量
名称:Network Traffic Overview
添加小部件:
1. Graph - 显示核心链路流量
2. Plain text - 显示接口状态汇总
3. Top triggers - 显示网络相关告警
创建自动发现规则模板:
<!-- 保存为network_discovery.xml -->
<template>
<discovery_rules>
<discovery_rule>
<name>Network Interfaces Discovery</name>
<type>SNMP_AGENT</type>
<snmp_oid>1.3.6.1.2.1.2.2.1.2</snmp_oid>
<key>net.if.discovery</key>
<delay>1h</delay>
</discovery_rule>
</discovery_rule>
</template>
#!/bin/bash
# snmp_test.sh
DEVICE_IP=$1
COMMUNITY=$2
echo "Testing SNMP connectivity to $DEVICE_IP"
echo "======================================"
# 测试系统信息
snmpwalk -v2c -c $COMMUNITY $DEVICE_IP 1.3.6.1.2.1.1.1.0
# 测试接口数量
IF_COUNT=$(snmpwalk -v2c -c $COMMUNITY $DEVICE_IP 1.3.6.1.2.1.2.2.1.2 | wc -l)
echo "Number of interfaces: $IF_COUNT"
# 测试流量OID
snmpget -v2c -c $COMMUNITY $DEVICE_IP 1.3.6.1.2.1.2.2.1.10.1
# import_devices.py
import json
import requests
from zabbix_api import ZabbixAPI
zabbix_url = "http://zabbix-server/api_jsonrpc.php"
zabbix_user = "Admin"
zabbix_password = "zabbix"
zapi = ZabbixAPI(zabbix_url)
zapi.login(zabbix_user, zabbix_password)
devices = [
{"name": "switch-core-01", "ip": "192.168.1.1"},
{"name": "router-edge-01", "ip": "192.168.1.254"},
{"name": "firewall-01", "ip": "192.168.1.2"}
]
for device in devices:
host = zapi.host.create({
"host": device["name"],
"interfaces": [{
"type": 2, # SNMP
"main": 1,
"useip": 1,
"ip": device["ip"],
"dns": "",
"port": "161"
}],
"groups": [{"groupid": "15"}], # Network Devices group ID
"templates": [{"templateid": "10001"}] # Template ID
})
print(f"Added {device['name']}: {host}")
# 分层告警
1. 信息级:流量超过70%
2. 警告级:流量超过85%持续5分钟
3. 严重级:流量超过95%持续2分钟或接口宕机
# 告警依赖
配置核心链路故障触发下级设备告警抑制
# 调整Zabbix Server配置
StartPollers=200
StartSNMPPollers=50
CacheSize=512M
HistoryCacheSize=256M
TrendCacheSize=128M
# 使用Proxy分担压力
在远程网络部署Zabbix Proxy
# 测试SNMP连通性
snmpwalk -v2c -c public 192.168.1.1 1.3.6.1.2.1.1.1.0
# 查看SNMP错误
tail -f /var/log/zabbix/zabbix_server.log | grep SNMP
# 检查防火墙
iptables -L -n | grep 161
这个方案可以全面监控网络设备流量,建议先从核心设备开始实施,逐步扩展到全网设备。