聊城市文章资讯

使用zabbix进行监控网络设备流量

2026-04-28 09:50:02 浏览次数:2
详细信息

一、基础环境准备

1. 安装Zabbix Server

# 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;

2. 配置SNMP监控

安装SNMP工具:

apt install snmp snmpd snmp-mibs-downloader snmp-browser

二、网络设备SNMP配置

1. 配置网络设备(以Cisco为例)

! 启用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"

2. 常见设备配置参考

三、Zabbix配置监控项

1. 添加主机

Zabbix控制台 → 配置 → 主机 → 创建主机 填写主机信息:

2. 配置SNMP接口

接口类型:SNMP
IP地址:192.168.1.1
端口:161
SNMP版本:SNMPv2
团体字:public

四、流量监控关键OID

1. 接口流量OID(IF-MIB)

# 接口入流量(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

2. 创建发现规则

{
    "名称": "Network Interfaces Discovery",
    "类型": "SNMP agent",
    "键值": "net.if.discovery",
    "SNMP OID": "1.3.6.1.2.1.2.2.1.2",
    "更新间隔": "1h",
    "主机接口": "选择SNMP接口"
}

五、创建监控项模板

1. 入流量监控项

名称: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}

2. 出流量监控项

名称: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}

3. 流量使用率监控项

名称: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}]")
单位:%

六、触发器配置示例

1. 高流量告警

# 接口流量超过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

2. 接口状态告警

# 接口宕机
{Template SNMP Network Device:net.if.status[ifOperStatus.{#SNMPINDEX}].last()}<>1

# 接口错误率过高
{Template SNMP Network Device:net.if.in.errors[ifInErrors.{#SNMPINDEX}].avg(5m)}>10

七、图形和聚合视图

1. 创建流量图形

名称:Interface {#IFNAME} Traffic
图形类型:Normal
监控项:
- Interface {#IFNAME}:Incoming traffic
- Interface {#IFNAME}:Outgoing traffic

2. 创建聚合图形(Dashboard)

# 显示多个接口的流量
名称: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>

九、批量监控脚本

1. SNMP测试脚本

#!/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

2. 自动导入设备脚本

# 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. 监控策略

2. 告警优化

# 分层告警
1. 信息级:流量超过70%
2. 警告级:流量超过85%持续5分钟
3. 严重级:流量超过95%持续2分钟或接口宕机

# 告警依赖
配置核心链路故障触发下级设备告警抑制

3. 性能优化

# 调整Zabbix Server配置
StartPollers=200
StartSNMPPollers=50
CacheSize=512M
HistoryCacheSize=256M
TrendCacheSize=128M

# 使用Proxy分担压力
在远程网络部署Zabbix Proxy

十一、常见问题排查

1. SNMP连接失败

# 测试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

2. 流量数据为0

3. 性能问题

这个方案可以全面监控网络设备流量,建议先从核心设备开始实施,逐步扩展到全网设备。

相关推荐