ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Zabbix实战:从零监控交换机路由器防火墙的完整指南

2026/10/4 7:48:19 拓冰建站 浏览量
Zabbix实战:从零监控交换机路由器防火墙的完整指南 做网络运维这些年被领导半夜打电话问“交换机是不是挂了”的次数太多了。早期我都是登录每一台设备去看CPU、看端口流量设备多了根本不现实后来上了Zabbix之后才算把网络设备的监控真正串起来了。这篇文章就用我实际部署和维护的经验把从零开始用Zabbix监控交换机、路由器、防火墙的思路、步骤和坑都捋一遍给正打算做这块或者刚入坑的朋友一个可以直接照着抄的参考。Zabbix这东西不是只能监控Linux和Windows服务器它对网络设备的支持其实相当成熟。通过SNMP协议你可以在同一套平台里把服务器、虚拟机、网络设备、存储、UPS全部纳入监控范围统一告警、统一出图。尤其在你需要做IT运维标准化、应付审计或者建设运维大屏的时候一套完整的网络设备监控数据会省掉非常多麻烦。下面我按照实际部署的流程来写从安装部署讲到设备接入再讲告警联动和排障全程基于我用的Zabbix 7.0 LTS版本操作系统是Rocky Linux 9.8。这个组合是目前比较稳的搭配社区资料也多照着弄不会太偏。1. 监控网络设备的整体思路与方案选型1.1 为什么监控网络设备首选Zabbix而不是其他工具提到监控网络设备有人第一反应是Cacti有人想用Prometheus加snmp_exporter也有人用商业的SolarWinds。这些工具都能做但我个人在多数场景下还是推荐Zabbix原因很直接Zabbix把服务器监控和网络设备监控放在同一个平台里不用维护两套系统告警策略、权限、图表都能复用。对于一个几十台交换机路由器再加几十台服务器的中小型机房这就是最省成本的方案。Prometheus的prometheus_snmp_exporter确实也能采集网络设备数据但配置门槛高SNMP采集器和告警规则的维护成本不低。Cacti只擅长画流量图告警和资产管理的功能太弱。Zabbix自带丰富的网络设备监控模板装上之后只要填IP和SNMP团体字就能出数据对运维老哥来说非常友好。再加上Zabbix 7.0的Web界面做了大改版画拓扑、做聚合视图比旧版顺手很多。选择Zabbix还有一层考量是人力成本。不少公司的运维团队本身已经用Zabbix盯服务器如果再引入一套新监控系统不光要买服务器资源还要有人持续维护。Zabbix天然支持SNMP、ICMP、IPMI、JMX、Agent等多种协议在它内部加一个网络设备分组几十分钟就能跑起来这种融合能力是我始终推荐它的核心原因。1.2 监控服务器和监控网络设备的本质差异很多刚接触这块的朋友会用监控服务器的思路去监控网络设备结果发现根本走不通。服务器上可以装Zabbix Agent由Agent直接把CPU使用率、内存、磁盘这些指标主动上报给Server但交换机、路由器上装不了Agent几乎所有数据都依赖SNMP协议去“问”设备设备被动地把数据吐出来。网络设备能提供的监控数据分为几大类系统信息名称、位置、运行时间、CPU和内存利用率、接口状态和流量、电源和温度传感器状态、ARP表和MAC表变化等。这些数据虽然都能通过SNMP拿到但不同厂商的MIB库并不一样你会发现思科的CPU监控OID和华为的完全不同所以Zabbix对不同厂商的设备提供了不同模板比如“Cisco IOS by SNMP”、“Huawei VRP by SNMP”、“H3C by SNMP”等等。还有一个关键点是监控方式要尽量“只读”。网络设备不像服务器你不能在上面装一个折腾的Agent也不能随便写Community权限。给交换机配置SNMP时务必使用只读的团体字或者SNMP v3只读用户防止外部通过SNMP篡改设备配置。安全是第一位的这条习惯我从一开始就坚持。2. Rocky Linux 9.8环境准备与Zabbix 7.0安装部署2.1 环境规划和数据库选型安装Zabbix之前先想清楚监控规模。如果监控的主机和设备总数在一两百台以内单台物理机或虚拟机跑Zabbix Server PostgreSQL/MySQL完全够用如果到了几百上千台再考虑引入Zabbix Proxy做分布式采集。我这次做的是中小型网络设备监控单节点部署数据库用的是MySQL 8.0理由很简单Zabbix官方仓库提供的包对MySQL支持最好网上踩坑资料也最多。操作系统用的Rocky Linux 9.8本质上就是RHEL 9系的下游发行版软件仓库和EPEL包都比较齐全。准备一台2核4G的虚拟机就行磁盘建议50G以上因为Zabbix的历史数据会随着监控时间推移不断膨胀网络流量图一天就能产生不少记录。安装前先把系统更新一下关闭SELinux或者放行相关服务端口否则后面会出现很多莫名其妙的问题。我习惯先把主机名、时区、防火墙都配好再装Zabbix避免装到一半再回头折腾环境。主机名直接设置为zabbix时区设置为Asia/Shanghai端口方面提前放行80、443、10051。注意10051是Zabbix Server接收Agent数据的端口前端页面走80或443SNMP的数据是Server主动去请求设备走的是UDP 161端口不需要在Server上额外放行。2.2 Zabbix Server端安装步骤先安装Zabbix官方仓库。Rocky Linux 9.8对应的是RHEL 9系的仓库我用的是阿里云镜像源速度快且稳定。安装命令大概是rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-1.el9.noarch.rpm dnf clean all dnf makecache然后安装Server、前端、Agent和数据库组件dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2这里的zabbix-selinux-policy非常关键因为Rocky Linux默认开启了SELinux如果不装这个包后面Server启动时经常会遇到Permission denied之类的问题。装完后初始化数据库mysql -uroot -p create database zabbix character set utf8mb4 collate utf8mb4_bin; create user zabbixlocalhost identified by YourPassword; grant all privileges on zabbix.* to zabbixlocalhost; quit导入Zabbix自带的数据表结构这是最耗时的一步zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-setutf8mb4 -uzabbix -p zabbix接着修改/etc/zabbix/zabbix_server.conf填写数据库密码最重要的是这行DBPasswordYourPassword然后编辑Nginx配置文件设置监听端口和server_name。改完配置后启动服务并设置开机自启systemctl restart zabbix-server zabbix-agent2 nginx php-fpm systemctl enable zabbix-server zabbix-agent2 nginx php-fpm安装完Web前端后浏览器访问http://你的IP按向导填数据库信息即可。注意Zabbix 7.0的Web安装向导对PHP时区有严格要求如果后续页面提示时区错误需要在/etc/php-fpm.d/zabbix.conf里修改php_value[date.timezone]为Asia/Shanghai然后重启php-fpm。2.3 安装时容易踩的几个基础坑第一个常见坑是数据库字符集。老教程里经常用utf8但Zabbix 7.0默认建库建议用utf8mb4否则中文注释和触发器标题可能乱码。我习惯在CREATE DATABASE时直接指定utf8mb4导入SQL时也加上--default-character-setutf8mb4参数避免后续排查半天都是字符集问题。第二个坑是Nginx和php-fpm启动失败。如果你之前装过其他Web服务80端口可能被占用。建议先执行ss -lntp看看端口确认没有其他进程占用再启动Nginx。有时候php-fpm启动失败是因为内存不够我遇到过2G内存跑Zabbix 7.0前端特别卡的情况后来给虚拟机加到4G才流畅。第三个坑是关于firewalld的。如果你开了系统防火墙需要放行80端口、10051端口和161端口。很多人在本机访问前端页面打不开第一反应是Zabbix配置错了其实都是防火墙拦截。Rocky Linux默认firewalld是开启的执行下面命令放行firewall-cmd --permanent --add-port{80/tcp,10051/tcp} firewall-cmd --permanent --add-port161/udp firewall-cmd --reload3. 添加网络设备以交换机为例做完整接入3.1 交换机端SNMP配置实操交换机必须先开启SNMP服务Zabbix才有机会采集。不同厂商命令差别很大这里我以最常见的华为和思科举例。华为交换机开启只读SNMP v2csnmp-agent snmp-agent community read cipher public_ro snmp-agent sys-info version v2c思科交换机的写法是snmp-server community public_ro RO snmp-server location Beijing snmp-server contact itexample.com关键点在于团体字名称建议单独设置不要用默认的public更不要用读写权限。我给客户的网络设备做监控时一般会在交换机上配置一个ACL只允许Zabbix Server的IP来访问SNMP服务这样可以尽量避免恶意扫描。华为设备可以这样限制acl number 2001 rule 5 permit source 192.168.10.50 0 rule 10 deny snmp-agent community read cipher public_ro acl 2001这样配置之后就算别人知道团体字只要不是从Zabbix Server的IP发起SNMP请求也会被交换机的ACL拒绝。设备数量少的时候逐台登录配置设备多了建议配合自动化工具批量下发但要给不同业务区域的设备区分好团体字和管理网段别图省事全机房一个团体字。3.2 Zabbix前端添加SNMP设备主机设备端SNMP就绪后登录Zabbix Web界面进入“数据采集 → 主机”点击“创建主机”。主机名称填交换机名所属群组建议单独建一个“Network Devices”组后续做权限隔离和视图分组都方便。可见名称可以直接填IP但更推荐填实际设备名称比如“CORE-SW01”这样大屏和告警信息看起来舒服得多。接口类型选择SNMPIP地址填交换机的管理IP端口默认161。配置SNMP版本这里关键一步是选择“SNMPv2”然后填写团体字。Zabbix 7.0的新版界面中团体字的值建议通过宏来设置系统默认宏是{$SNMP_COMMUNITY}你把它的默认值改成交换机上配置的团体字就行。好处是以后模板和触发器都能引用这个宏不会散落得到处都是明文。接下来选择模板。Zabbix自带的“Network device by SNMP”是一个非常通用的模板能够发现接口、监控流量、状态和丢包并且自带常见主机的CPU和内存监控项。如果你用的是思科设备可以额外选择“Cisco IOS by SNMP”华为设备可以选“Huawei VRP by SNMP”。这些模板在采集到数据后会通过LLD规则自动发现接口不需要为每个物理口手动创建监控项非常省事。3.3 从添加完成到数据可见的完整验证流程主机创建完别急着看图表先看“可用性”这一列。正常情况下几秒钟内它会从灰色变成绿色表示SNMP连通正常。如果一直是灰色鼠标悬停会显示“SNMP error”或者“Timeout while connecting to ...”之类的具体原因。接着点进“监控 → 最新数据”输入刚才创建的交换机名称进行筛选看看sysName、sysUptime这些监控项有没有收到数据。接口自动发现需要一点时间通常一两个轮询周期后就能在“数据采集 → 发现规则”里看到新发现的端口。Zabbix 7.0默认每1小时执行一次网络接口的LLD发现规则如果你不想等可以手动执行一次发现规则或者把间隔改短。我个人习惯把“Network interface discovery”规则间隔改成15分钟既不会太频繁也不会让新加的接口迟迟显示不出。确认数据进来后最重要的是看一眼流量单位。Zabbix模板里的接口流量监控项默认使用bps或者Bps在“最新数据”里能看到具体的数值。如果发现某端口显示的数字比交换机端口速率大很多往往是单位理解错了。网上搜Zabbix网络设备监控的时候经常看到有人问“为什么端口流量显示几Gbps”其实就是ifHCInOctets和ifInOctets选择错了模板默认用的是HC计数器64位如果你的交换机是10G或40G接口一定要确保走HC的监控项否则32位计数器在流量高的时候会翻转。实操心得我首次部署时习惯把每台核心交换机的“运行时间”和“CPU使用率”单独加到一个“设备健康检查仪表板”上配合触发器做到CPU连续5分钟超过90%就告警。这个“运行时间”数据对于判断设备是否悄悄重启过特别有用。4. 网络设备监控的扩展其他主机接入、大屏与钉钉告警联动4.1 在Zabbix中接入其他非网络设备主机Zabbix服务器和网络设备都跑起来之后很快就会有人问“能不能把某个Windows服务器、某台Linux数据库也加进来一起监控”。答案是当然可以而且这是Zabbix的核心用法。在“数据采集 → 主机”里创建主机时选择Agent接口对于Linux服务器在服务器上安装zabbix-agent2包然后在配置文件里填上Zabbix Server的IP地址启动服务后数据就能被主动拉取。对于Windows服务器在官网下载Windows版agent2的zip包解压后运行install脚本修改配置里的Server地址然后启动服务。比Linux略繁琐但不难关键是别忘了在防火墙里放行10050端口。接入主机之后模板直接选“Linux by Zabbix agent”或“Windows by Zabbix agent”它们覆盖了CPU、内存、磁盘、网络、进程等常见监控项基本开箱即用。你可能在看资料时见过“其他主机怎么添加zabbix监控”这类问题其实就是指添加Agent主机这个流程。很多新手会在模板和宏那里卡住实际上只要IP和端口对用的模板匹配系统类型剩下的大部分数据都会自动出来。有个前提Agent配置的Server参数要填Zabbix Server的IP且Agent监听的10050端口要能从Server侧访问到否则会一直显示“Host unreachable”。4.2 基于Zabbix数据实现监控大屏监控大屏是我做网络设备监控时最喜欢展示给领导和同事看的东西。Zabbix 7.0自带的Dashboard已经支持自定义布局但要说最适合做监控大屏的还是Grafana。Grafana可以通过Zabbix插件直接拉取Zabbix里的历史数据然后做成漂亮的流量趋势图、设备健康状态面板支持自动轮播挂在电视上看非常直观。配置方式不复杂在Grafana里安装Zabbix插件数据源类型选择Zabbix填Zabbix Server的API地址、用户名和密码再导入官方或社区做好的仪表盘JSON模板。关键是理解Grafana里的“Group”和“Host”筛选器把网络设备归到一个单独的组里大屏上就能只展示交换机、路由器这些设备。Zabbix自身的原生Dashboard也能做但视觉效果和拖拽自由度不如Grafana所以我推荐重点用Grafana做展示类大屏。别忘了一件重要的事情让大屏“动”起来。单纯把图表放上去不算大屏你得配置好时间范围刷新和整体页面自动刷新。Grafana支持自动刷新间隔我通常设置成30秒屏幕上的流量曲线和设备存活状态就会像实时监控一样在跳动实际演示效果比静态截图强太多了。4.3 Zabbix 7.0联动钉钉群机器人告警上一段聊到告警这是我被问得最多的板块之一尤其是“Zabbix 7.0怎么联动钉钉”。以前在Zabbix 5.x时代要在脚本目录放一个Python或Shell脚本再通过告警媒介类型去调用脚本配置略显繁琐。到Zabbix 7.0之后官方Webhook方式已经成熟了很多可以让告警通知直接发送到钉钉群配置路径在“告警 → 媒介类型 → 创建媒介类型”。首先在钉钉群里添加一个自定义机器人获取Webhook地址和安全设置关键字或加签。然后在Zabbix中创建媒介类型类型选择“Webhook”脚本参数里设置钉钉机器人的Webhook URL脚本内容用简单的Python或者直接使用Zabbix内置的Webhook脚本模板来发送JSON消息。网上可以找到不少现成的Zabbix 7.0钉钉Webhook模板下载后导入即可里面会自动填充规定的JSON格式和脚本变量。配置好媒介类型后还要给用户设置告警媒介指定接收告警的钉钉机器人Webhook地址。再创建动作(Action)条件设置为“触发器严重性 警告”操作里选择“发送消息给用户”内容模板里写入主机名、告警名称、当前值、告警时间、恢复时间等变量。这样一旦交换机CPU飙升、端口状态变为down或者设备离线钉钉群会立刻收到一条带主机信息和当前状态的消息运维人员无需登录平台就能第一时间知道问题。注意钉钉机器人安全设置里如果选择“自定义关键词”那么告警消息内容里必须包含这个关键词否则钉钉会拒绝发送。我在第一次配置时就是因为关键词没填对导致一直测试不成功折腾了半小时才发现是关键词大小写和内容不匹配。建议直接把告警内容模板里写死一个词比如“故障告警”对应的钉钉机器人安全关键词也填“故障告警”基本不会出问题。5. 常见故障排查和面试高频问题实录5.1 前端提示“Zabbix server is not running”的排查过程这个提示恐怕是很多Zabbix新手遇到的第一道坎前端页面总是显示“Zabbix server is not running: the information displayed may not be current.”。遇到这个问题我的经验是按顺序套先查看zabbix_server进程是否存在systemctl status zabbix-server如果进程没起来查看日志/var/log/zabbix/zabbix_server.log这是最核心的突破口。最常见的原因是数据库密码配置错误或者初始化导入的server.sql.gz根本没有成功导致server启动时连库失败。还有一种情况是内存不足Zabbix Server启动时如果OOM被系统kill日志里会有相应记录。再看数据库连接情况直接用命令行验证一下mysql -uzabbix -p -e select 1;如果数据库连接正常但前端还是提示“is not running”还有一个隐蔽原因前端访问的是Zabbix Server内部状态如果之前启用了Zabbix Server的HA模式node配置会变得特别复杂普通单机部署不该开HA。排查时如果一切看起来都正常试试重启整个服务然后清掉浏览器缓存再刷新页面偶尔能解决莫名其妙的显示问题。5.2 “Access denied for user replace_userlocalhost”问题解析热词里出现这个报错说明遇到的人不少。这个报错的典型场景是你给Zabbix数据库创建的用户并不存在或者密码不匹配。因为安装文档里经常用“YourPassword”或“replace_user”这样的占位符有人直接复制粘贴到服务器上执行导致MySQL里根本没有对应的用户名。解决思路很清晰登录MySQL root账户mysql -uroot -p GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost IDENTIFIED BY 你的真实密码; FLUSH PRIVILEGES;也有可能是授权时只授权了localhost但zabbix_server连接数据库时用了127.0.0.1或者主机名导致MySQL认为来源是不同host。建议直接创建用户时同时授权localhost和127.0.0.1或者干脆授权给%再配合防火墙限制简单粗暴也不容易踩坑。改完账号权限后记得重启zabbix-server因为配置文件和数据库连接是启动时建立的。5.3 SNMP采集不到数据的排查思路Zabbix设备列表里网络设备“不可用”这是最常见的现象。根据我的经验大概率不是Zabbix的问题而是设备端SNMP配置没生效或网络不通。先做三层排查第一确认Zabbix Server到设备管理IP能通。用ping命令测试然后用snmpwalk手动请求一次比如snmpwalk -v2c -c public_ro 192.168.10.2 sysDescr如果这个命令没有返回设备信息说明SNMP配置或UDP端口有问题Zabbix这边再折腾也没用。第二检查交换机SNMP配置是否真的生效尤其注意团体字里面有没有多余的空格、ACL有没有配置反了。第三确认设备是不是只允许特定管理网段访问SNMP有时你从办公网测试不通但从监控服务器网段测试是完全正常的。如果snmpwalk能通但Zabbix还是显示不支持看看你在Zabbix主机上选择的SNMP版本和团体字是否一致。Zabbix 7.0宏设置里和主机配置里的团体字我建议只在模板宏或者主机级宏里统一配不要在主机配置框里又填一次因为新旧版本界面的标签位置不一样很多人填错了地方。5.4 面试题视角Zabbix监控网络设备必须掌握的知识点我帮一些朋友准备运维岗位面试时总结过一份Zabbix相关的高频问题很多都和热词里出现的内容重合。比如“Zabbix监控哪些东西”这个问题其实考察的就是你对Zabbix数据采集类型的掌握程度CPU、内存、磁盘、网络流量、文件系统、进程、日志、TCP连接数、SNMP OID、IPMI硬件传感器、JMX Java应用等。再比如“Zabbix的监控项、触发器、模板、主机之间的关系怎么理清楚”。我的回答思路是模板是一组可以复用的监控项、触发器和图形的集合主机选择模板后就会获得模板里的监控规则触发器则是对监控项数据进行条件判断的规则比如CPU使用率大于90%就触发告警。告警的传播顺序是“主机 → 监控项 → 触发器 → 动作 → 媒介 → 用户”这条链路面试时也经常被问。讲一下“Zabbix Proxy”的作用当监控规模变大或者被监控设备和Server不在同一网络时引入Proxy作为中间节点负责采集数据再上报给Server可以减轻Server负载。网络设备监控中最典型的使用场景就是多个分支机构的交换机路由器通过每个分支机构部署一台Proxy采集总部Server汇总展示所有分支状态效果很理想。5.5 网络设备监控的日常维护经验最后分享一点实实在在的维护体会。跑上Zabbix之后真正让我省心的不是一次部署而是日常的迭代。设备新增接口时接口LLD能自动发现设备更换光模块或者端口down掉时触发器能及时告警流量突增时结合历史流量图能快速定位是哪个端口在跑大流量。这些能力不是装好就自动完成的需要你根据设备特点持续调整阈值和模板。备份和升级是永远绕不开的功课。Zabbix Server的配置文件、数据库、模板建议定期备份升级前先在测试环境试一遍。网络设备的配置文件也同样重要日常变更前要确认监控数据正常变更后盯一下Zabbix的最新数据有没有异常波动。遇到升级后告警媒介不可用的时候第一反应应该是看新版本是否调整了Webhook脚本格式或者钉钉接口调用方式。还有一个小技巧分享给你们创建网络设备监控项时如果厂商私有OID和MIB在Zabbix官方模板里找不到现成的不要放弃先装一个MIB浏览器比如MIB Browser在企业设备上手动walk出你关心的OID确认能取到数值后再在Zabbix里创建自定义监控项类型选SNMPv2、OID填完整路径即可。很多深信服设备、H3C老设备都能用这个办法接入模板网上虽然有现成的“深信服模板”但每个环境的版本差异很大自己会walk OID才能真的解决实际问题。