1. 网络可达性监控:为什么要从一条ping命令开始
1.1 一次深夜故障给我的教训
干运维这些年,我印象最深的一次事故,不是数据库宕机,也不是磁盘写满,而是一个很小的问题——核心交换机的一个接口松动,导致整整一个网段的办公终端和设备全部失联。最尴尬的是,这个故障持续了将近两个小时,才被业务同事的电话捅到我这里来。
为什么没有被第一时间发现?因为那套环境里跑着CPU、内存、磁盘、服务进程的各种监控,唯独没有人想到去做网络可达性探测。服务器本身没宕,CPU也不高,磁盘也正常,zabbix上的所有监控项都显示绿色,但实际上这个网段的机器已经从网络上"消失"了。那次之后我明白了一个道理:监控体系里最基础、也最容易被忽略的,恰恰是网络层这台设备还在不在、通不通的指标。
ping监控要解决的就是这个问题。它不关心你的磁盘用了多少,也不关心你的Nginx进程是否活着,它只做一件事——定期向目标主机发送ICMP探测包,确认这台机器在网络层面依然"存在"、依然"可达"。成本极低,效果却极其直接,是所有监控项目里投入产出比最高的一个。
1.2 ping监控在监控体系里的定位
在完整的监控架构里,一般会分成网络层、主机层、应用层、业务层四个维度。主机层的CPU、内存、磁盘属于"这台机器活得好不好"的问题,应用层的端口、进程、接口响应属于"服务能不能用"的问题,而ping监控属于最前端的网络层——"这台机器在网络里到底还在不在"。
它的定位很特殊:它不依赖被监控主机上的任何agent进程,只要网络路径通畅,哪怕被监控的机器已经死机、系统崩溃、agent根本起不来,zabbix server也能探测出"这台机器失联了"。这个特性让ping监控天然适合做其他所有监控的前置条件——主机都ping不通了,CPU监控、进程监控即使有数据也失去了意义。
Zabbix实现ping监控是一套非常成熟的方案。它原生支持ICMP探测,不需要额外安装agent,不需要在被监控端做任何配置,只要你掌握了监控项的配置逻辑,再批量套用模板,几十台、上百台设备的网络可达性监控几十分钟就能铺完。这也是这篇文章想跟你分享的核心内容——从原理到落地,从监控项到告警阈值,一步步把zabbix的ping监控真正用起来。
2. zabbix实现ping监控的三把钥匙:icmpping、icmppingloss、icmppingsec
2.1 三个键值的具体含义与参数拆解
Zabbix本身不直接发起ICMP请求,它是通过模板里预置的几个键值(key)来间接完成探测的。很多人第一次看到这几个key会懵,觉得名字长得像但不知道区别,我把它们拆开讲清楚。
| 键值 | 作用 | 返回内容 |
|---|---|---|
icmpping | 目标主机是否可达 | 1(可达)/ 0(不可达) |
icmppingloss | 探测丢包率 | 百分比数值,如 0、50、100 |
icmppingsec | 平均响应时间 | 数值,单位秒,如 0.035 |
三个键值配合起来,就能从"通不通、丢不丢包、响应快不快"三个维度完整描述一条网络链路的健康状况。只做可用性监控可以只看icmpping,要想知道网络质量好不好,就必须把icmppingloss和icmppingsec一起加上。
每个键值后面都跟了一串参数,格式是icmpping[<target>,<packets>,<interval>,<timeout>,<size>]。我实际配置中最常用的组合是这样的:
icmpping[192.168.10.1,4,50,5000,128] icmppingloss[192.168.10.1,4,50,5000,128] icmppingsec[192.168.10.1,4,50,5000,128]这里每个参数都有实际意义:target是要探测的目标地址,可以是IP也可以是域名;packets是每次探测发送的ICMP包数量,我一般设4个,太少偶然性大,太多会拖慢采集;interval是两次发包间隔的毫秒数,50毫秒是个通用值;timeout是单包超时时间,单位毫秒,设5000也就是5秒比较稳妥,内网设短一点也行;size是ICMP报文大小,128字节足够,没必要用默认的更大值。
需要特别提醒的是,zabbix的agent必须配置了Server=参数允许接收来自server的采集请求,否则这些键值虽然配置了,agent端却不会执行。如果你用的是server端直接探测模式(不经过agent),那就要走后面的fping方案,这点要分清楚。
2.2 隐藏在底层的fping工具
Zabbix的ICMP监控并不是自己实现了ICMP协议栈,而是依赖了一个Linux下非常经典的工具——fping。zabbix server在5.0版本之后,ICMP探测任务统一由server端自己fork出来的fping进程来干活。
这也是很多新手配置完监控项后屏幕上出现一大片Not supported的根本原因:服务器上根本没装fping,或者装了但权限不对。
在CentOS/Rocky Linux上安装很简单:
yum install -y fping装完之后有个非常关键的步骤,很多人会漏掉——给fping设置setuid权限。因为ICMP原始套接字需要root权限才能创建,而zabbix server进程通常以zabbix用户运行,如果不给fping加setuid位,zabbix用户调用fping时会直接报权限错误,表现就是监控项一直不支持。
chmod u+s /usr/bin/fping设置完后可以用ls -l /usr/bin/fping确认权限位,正常情况下应该能看到s标志:
-rwsr-xr-x 1 root root 44168 Mar 10 01:23 /usr/bin/fping这一步做完,zabbix icmp监控才算有了真正能干活的基础。我在6.0和7.0两个版本上都验证过,不加setuid,监控项十年也取不到数据。
3. 从零部署:环境准备阶段的三个关键坑
3.1 server端和agent端的安装要点
Zabbix部署方式很灵活,生产环境我建议用源码编译或者官方rpm包,测试环境直接用docker compose拉起一套zabbix server加上postgresql数据库就够用了。以7.0 LTS版本为例,docker方式最省心:
docker run -d --name zabbix-server \ -e DB_SERVER_HOST=zabbix-db \ -e POSTGRES_USER=zabbix \ -e POSTGRES_PASSWORD=zabbix_pwd \ -e POSTGRES_DB=zabbix \ -p 10051:10051 \ zabbix/zabbix-server-pgsql:alpine-7.0-latest但这里有个前提:你在这台server上要能正常使用ICMP探测,否则容器内部的权限和二进制文件都不可控。我更推荐在物理机或VM上装原生版本,方便排查fping这类底层依赖问题。
Agent端的安装相对简单,装完之后最关键的是修改/etc/zabbix/zabbix_agentd.conf里的Server和ServerActive配置,指向zabbix server的地址:
Server=192.168.1.100 ServerActive=192.168.1.100 Hostname=web-server-01改完重启agent,然后在zabbix web界面添加主机时,agent就会过来主动注册或者被server采集了。很多教程到这里就结束了,但实际部署中还有两个坑,让你装了等于白装。
3.2 fping的setuid权限问题
前文已经点到了fping的权限问题,这里我展开说。我遇到过不止一次这样的情况:明明yum install fping装好了,用root用户手动执行fping 192.168.1.1也正常返回结果,但zabbix web界面上监控项就是红叉Not supported。点开监控项最近数据,报错信息写着类似Permission denied或者fping: can't create socket。
这就是setuid位没有设置。root用户执行fping没问题,因为root本身有权限创建ICMP套接字;但zabbix server是以zabbix用户身份启动的,它去执行fping时,如果fping没有setuid位,进程权限不会提升,仍然以zabbix用户的低权限运行,创建ICMP原始套接字自然就失败了。
这个问题在zabbix官方文档里其实有明确说明,但因为它藏在安装文档的角落里,我估计至少有一半的新手栽在这上面。建议执行完安装命令后顺手把setuid也设置了,避免后续排查浪费大量时间。
3.3 防火墙与路由:监控项一直报UNREACHABLE的常见原因
环境版本都装好了,fping权限也对了,但ping监控项开始采集后,数据一直是0,icmpping永远是0(不可达)。这时候很多人第一反应是目标主机的问题,但实际排查下来,最常见的三个原因都不是目标主机本身:防火墙拦截了ICMP、zabbix server没有到目标网段的路由、目标禁ping。
先说防火墙。zabbix server作为探测源,它发出的ICMP请求是普通的数据包,如果server自身或者中间的防火墙设备丢弃了ICMP流量,结果就是永远不可达。排查方法很简单,在server上手动执行:
ping -c 4 192.168.10.1如果手动ping不通,那问题大概率在网络路径上,而不是zabbix配置的问题。我遇到过最经典的案例是云厂商安全组默认只放行了TCP端口,没有放行ICMP,结果云服务器之间ping全部不通,但业务流量一切正常。这种情况需要去云控制台调整安全组规则,放行ICMP协议。
再就是目标主机开启了防火墙且禁ping。常见的Linux发行版默认行为不同,有的默认放行ICMP,有的默认丢弃。检查方法是在目标机上执行:
iptables -L -n | grep icmp或者更简单,直接看/proc/sys/net/ipv4/icmp_echo_ignore_all的值,如果是1,说明内核层面就丢弃了ICMP echo请求:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all但要注意,如果你监控的是交换机、路由器这类网络设备,有些设备管理地址默认不允许ping,需要到设备上放通管理口的ICMP策略。
4. 落地实操:创建ping监控项、模板与图形
4.1 用现成模板还是手写监控项
Zabbix自带了一个名为Template Module ICMP Ping的模板,里面预置了icmpping、icmppingloss、icmppingsec三个监控项以及配套的触发器。如果你的需求只是"通不通、丢包率、响应时间"这几个基础指标,直接用这个模板是最省事的。
但我个人并不建议生产环境直接套用官方模板不改动,原因在于官方模板的触发器阈值偏向保守。官方模板对icmppingloss的触发器设置是> 50(丢包率超过50%)才算警告,这对很多内网核心链路来说太宽松了——丢包率到10%的时候,业务其实已经能明显感觉到卡顿,等到50%才报警,黄花菜都凉了。
所以更合理的做法是:以官方模板为基础,复制一份自定义模板,然后按自己的业务容忍度调整阈值。这样既省去了从零写监控项的重复劳动,又能让告警真正符合实际需求。
4.2 主监控项的完整配置过程
如果你决定手写监控项,流程也不复杂。以我在zabbix 7.0里创建一个面向192.168.10.1网关的ping监控为例,完整步骤如下。
第一步,在"配置 → 主机"里添加主机(如果还没有的话)。这里关键点在于由agent代理这一栏——如果你是在server端直接监控网络设备(比如交换机),就不需要通过agent,可以直接留空或者选择"无代理"。但需要明确的是,zabbix默认的ICMP监控项实际是由server端发起的,即使主机类型里不关联agent,也能通过模板里的键值正常采集,前提是server上装了fping。
第二步,在主机详情页进入"监控项"选项卡,点击"创建监控项"。关键字段我分别说明:
- 名称:建议写清楚探测目标和指标,比如
ICMP ping 网关192.168.10.1 可达性 - 类型:选
简单检查(Simple check),因为这种监控不依赖agent,由server直接执行 - 键值:填
icmpping[192.168.10.1,4,50,5000,128] - 信息类型:选
数字(无符号整数) - 更新间隔:默认30秒。内网建议30秒,外网链路建议60秒,不要低于10秒,否则fping进程会被频繁fork,server负载扛不住。
第三步,同样的方式创建另外两个监控项,键值分别是icmppingloss[192.168.10.1,4,50,5000,128]和icmppingsec[192.168.10.1,4,50,5000,128],信息类型分别选浮点数和浮点数。
三个监控项创建完后,选中它们,在底部批量更新里可以一次性设置"创建触发器"和"创建图形",效率会高很多。
4.3 触发器与恢复表达式该怎么写
监控项采集到数据只是第一步,真正让ping监控发挥价值的是触发器。一个标准的ping监控触发器,至少要包含"失败判定"和"恢复判定"两部分,否则告警产生后不会自动关闭,值班人员会被持续报警折磨。
以丢包率为例,我实际在用的触发器表达式是这样的:
last(/Template Module ICMP Ping/icmppingloss[192.168.10.1,4,50,5000,128]) > 20含义是最近一次采样的丢包率超过20%,就触发告警。考虑到偶发网络抖动,还可以加上持续周期判定,比如连续3次采样都超过20%才报警:
min(/Template Module ICMP Ping/icmppingloss[192.168.10.1,4,50,5000,128],#3) > 20恢复表达式用对应的反向条件:
max(/Template Module ICMP Ping/icmppingloss[192.168.10.1,4,50,5000,128],#3) < 20这样设计的好处是,网络抖动几秒钟不会直接炸出一堆告警,而一旦真的持续劣化,告警必然触发。我见过很多团队把丢包率阈值写成>0,结果每过一段时间就被网络抖动骚扰一次,最后值班人员直接把告警屏蔽了,反而更危险。
对于icmppingsec响应时间的触发器,建议阈值根据你对链路的正常基线来定。内网核心设备我通常设> 50ms警告、> 100ms严重;跨机房专线可以放宽到> 100ms警告、> 200ms严重。阈值设定前最好先用ping命令连续打几百个包,记录正常响应时间分布,再往上加一倍余量作为告警线,这样最稳妥。
5. 告警阈值设计:别让值班同事被误报折磨
5.1 丢包率、响应时间、可用性:监控口径的选择
在真正配置ping监控告警前,我建议你先想清楚一个问题:你的核心诉求是"知道设备掉线",还是"知道网络质量变差"?
如果只是设备掉线,那icmpping这一个键值就够了。它的值是0或1,触发器可以用last() = 0来判定不可达。这个监控口径最直接,误报的可能性也最小——毕竟目标主机确实ping不通了。但它的问题是,网络质量劣化到一定程度但还没完全断的时候,它什么都看不出来。
如果想要感知网络质量劣化,就需要同时关注丢包率(icmppingloss)和响应时间(icmppingsec)。我自己的经验是:丢包率比响应时间更早反映链路问题。很多时候链路出现拥塞、光模块老化、光纤衰耗增大,首先表现为丢包率缓慢爬升,然后才是响应时间变长。所以如果你的环境允许只监控两个指标,优先选丢失率和可达性。
这里要专门提一个容易误导人的情况:响应时间有时候会出现"越ping越快"的假象。原因是ICMP探测包在网络设备上是有优先级队列的,某些设备会对ICMP流量做特殊处理,优先转发,导致响应时间看起来一直很漂亮,但实际上业务流量已经堵死了。所以不要单独用响应时间作为网络质量的唯一评判标准,要结合丢包率看。
5.2 合理设置报警级别与依赖关系
告警级别设置要匹配故障的紧急程度。我在生产环境里对ping监控的告警级别是这么划分的:
- 丢包率>20%且持续3次采样:
警告级别,群里同步运维同事关注 - 丢包率>50%或
icmpping=0:严重级别,需要立即处理 - 同时影响多个目标不可达:
灾难级别,大概率是上层链路或核心设备故障
很多新手会把所有ping告警都设置成"严重",结果告警失去了层级,真正出大事的时候反而被淹没在大量普通告警里。建议在zabbix的"报警媒介"配置里,为不同级别设置不同的通知策略——警告级别只发即时通讯通知,严重级别才开始打电话。
另外zabbix的"依赖关系"功能很适合用在网络监控上。举个例子,你同时监控了核心交换机192.168.10.1和它下挂的服务器192.168.10.10,当交换机故障时,服务器肯定也ping不通了。如果不设依赖关系,你会同时收到几十条告警;设了依赖关系后,只要下挂设备的父级(核心交换机)告警了,子设备的告警会被自动抑制,只报最上层的根因。这个功能在zabbix里叫"添加依赖",实际使用效果非常明显。
5.3 我踩过的告警风暴坑
有一段时间我给一个机房的四十多台设备都配了ping监控,更新间隔设的是30秒。结果某个周末一台核心接入交换机光模块故障,整个机柜的设备全部失联,我的手机上一下子涌进来四十多条告警。虽然依赖关系配了一部分,但没配全,告警轰炸了整整五分钟。
后来我反思了这个事,总结出三条经验:
第一,告警必须做聚合,不能一台设备一条独立告警。可以通过zabbix的"问题抑制"或者配置依赖关系来解决,也可以借助外部告警平台(如Alertmanager)做分组。
第二,恢复通知一定要配,否则你永远不知道故障是恢复了还是持续着。zabbix触发器里"恢复表达式"的意义就在于此。
第三,不要用默认的1分钟去评估"持续不可达"。网络里有很多临时性抖动,比如链路切换、STP收敛、设备重启,一两分钟内ping不通是正常的。我的做法是把icmpping=0的触发器加上时间条件,比如连续5个周期都不可达才告警:
min(/Template Module ICMP Ping/icmpping[192.168.10.1,4,50,5000,128],#5)=0这样既不会漏报,也不会因为瞬断就疯狂骚扰。
6. 可视化展示:把网络状态变成一眼能看懂的图
6.1 用zabbix原生图形拼出一张网络状态面板
监控数据采集了、告警也触发了,但如果你打开zabbix只看到一堆数字表格,工作效率依然不高。网络监控必须配可视化,让你扫一眼就能判断所有链路的健康状态。
Zabbix的"图形"功能可以做最简单的折线图、面积图。我在每个主机的图形配置里都会把三个ping指标放在同一张图上,左边Y轴显示丢包率百分比,右边Y轴显示响应时间秒数,这样一张图同时能看到可达性和延迟变化趋势。配置方法是在"主机 → 图形 → 创建图形",把三个监控项全选进去,图形类型选"多边形"或"线"都行。
不过单台设备的图形看得再细,也解决不了整体态势感知的问题。我更推荐做好两件事:一是把zabbix首页的"概览"加入自定义仪表盘小组件,按网段、机房、业务线把主机分组,每组显示最新丢包率和响应时间;二是利用zabbix的"地图"功能,把全网的设备拓扑画出来,在拓扑上叠加ICMP监控的状态色块——绿色代表正常,黄色代表有丢包,红色代表不可达。
我自己做机房监控的时候,会按机柜画拓扑地图。因为zabbix地图的核心就是维护"元素"(主机或设备)和"链接"(设备之间的连线),而链接上绑定的是监控项触发器。配置好之后,一旦某条链路丢包超阈值,地图上对应链路会直接变色,值班人员用余光扫一眼大屏就能发现问题在哪,比看几百条告警效率高得多。
6.2 网络地图:适合中小机房的资产拓扑
配置网络地图的具体操作不复杂:在"监测 → 地图"里新建地图,然后添加"元素"——把要监控的交换机、服务器、防火墙逐个拖到画布上。每个元素可以绑定一个设备组或具体主机,用标签属性来显示当前状态。
关键是在元素之间的"链接"上绑定监控项。Zabbix地图的链接可以关联到某个触发器的状态,当触发器处于"问题"状态时,链接线的颜色会从默认变成问题色,方向箭头也能标记数据流向。我之前把核心交换机到各个接入交换机的链路分别绑定了icmppingloss触发器,一旦某个接入交换机丢包率超标,大屏上那条线和那台设备的颜色立刻变红,一眼定位故障点,排查时间能缩短一半以上。
需要注意,地图里元素数量不宜过多,超过30个维护成本就上来了。中小机房用zabbix地图足够,大规模网络场景可以考虑更专业的网络拓扑工具,但zabbix地图作为日常巡检的辅助完全够用。
7. 真实排障复盘:从监控项"Not supported"到定位根因
7.1 案例一:agent端权限导致监控项不支持
先说一个我遇到的经典问题。某个客户环境里,zabbix server版本是6.0,agent装在Windows服务器上。我在server上添加了一个主机,套用了ICMP Ping模板,理论上server自己就能ping目标,不需要agent参与。但过了一天去看监控项,三个ICMP相关的监控项全部显示Not supported,错误信息是No such file or directory。
排查链路是这样的:先确认server本机fping装好了且setuid权限正确,手动ping目标IP也通,排除了网络问题。然后在server上直接用zabbix_get -s 目标IP -k icmpping[192.168.1.1,4,50,5000,128]测试,发现报错内容跟我看到的一致。
查到最后发现,原来zabbix的"简单检查"虽然不经过agent,但主机的接口类型默认是"agent",server会尝试通过agent通道去执行这个键值。而Windows agent本身有独立的ICMP探测实现,当agent端配置不完全或者Windows防火墙阻止ICMP时,就会执行失败。解决办法是:在主机配置里把"由agent代理"列表中的agent删掉,或者显式指定监控项为"由server执行"。再打一个补丁——Windows agent上也要安装WinPcap/Npcap驱动,否则ICMP功能不可用。
这个案例的教训是:zabbix ICMP监控虽然"不需要agent",但前提是主机类型要设置正确。如果你在主机上不小心绑定了agent接口,server会优先尝试agent通道去发起ICMP探测器,绕了一圈反而给自己挖坑。
7.2 案例二:虚拟机ping不通外部网络
第二个案例和热搜词里的"虚拟机ping不通百度"高度吻合。有个开发环境的虚拟机,内部网络访问正常,但ping外网IP时提示ping: www.baidu.com: Name or service not known,ping IP本身能通,说明DNS配置出了问题,跟zabbix无直接关系。
这类问题的排查顺序我建议是固定的:先ping IP,再ping域名。Name or service not known说明是DNS解析失败,需要检查/etc/resolv.conf里的nameserver是否配置正确,能不能连通DNS服务器。如果ping域名通但ping公网IP不通,那就是路由或防火墙的问题,需要检查默认网关、路由表和ICMP放行策略。
还有一种更隐蔽的情况:虚拟机里配了zabbix agent,但agent的Server=配置指向了一个不存在的zabbix server地址,导致agent一直尝试向错误的地址连接,占用CPU和网络。这时候从虚拟机ping外网IP是通的,但agent在zabbix server上显示"不活动"。排查时可以在虚拟机上执行netstat -antp | grep zabbix看agent的连接状态,再检查agent配置里的server地址是否和实际的zabbix server一致。
7.3 案例三:zabbix server is not running的排查链路
搜热词里有一条"zabbix server is not running: the information displayed may not be current.",这也是ping监控部署完以后非常容易遇到的现象——本来配置得好好的,打开zabbix前端页面突然看到黄条提示server没在运行,然后所有监控项数据都开始"卡住"。
造成这个问题的常见原因有几个:数据库连接超出限制、server进程假死、缓存配置过小。
最典型的场景是当zabbix server的数据量积累到一定规模,而CacheSize(配置缓存)设置得太小,server每秒钟要处理大量新数据但缓存不够用,进程就会进入高负载状态,前端探活请求久久得不到响应,最终显示"server is not running"。
排查方法分几步走。第一步,在server机器上执行systemctl status zabbix-server看主进程状态,如果显示active (running)但前端依然报警,那多半是前端到数据库或者server内部通信出了问题。第二步,看/var/log/zabbix/zabbix_server.log,重点搜cannot、error、failed关键词,通常能直接指向问题根因。第三步,检查数据库连接数:
SHOW PROCESSLIST;如果看到大量由zabbix用户发起的sleep连接堆积在一起,说明数据库连接没释放,可以在zabbix_server.conf里把DBMaxConnections调小,同时优化数据库的最大连接数。
这个问题的本质是"服务进程活着但处理不过来",所以在监控告警里光看进程存活不够,还要把zabbix server自身的zabbix[process,<type>,<mode>]指标加进监控,比如zabbix server的util(进程使用率)、queue(队列积压)等,才能真正掌握server的健康状态。
8. 一些更高阶的玩法与我的实际心得
8.1 从ping监控走向拨测监控
Ping监控做的是"网络层可达性探测",但它有一个天然盲区:目标主机ping得通,不代表业务真的可用。最常见的场景是Web服务器负载过高,ICMP响应正常,TCP连接也正常,但HTTP请求迟迟不返回。这时候你看到的ping指标全部绿色,业务却已经挂了。
所以成熟的做法是在ping监控基础上叠加协议层拨测。Zabbix里有net.tcp.service[http]、net.tcp.port[<ip>,<port>]这类键值,可以指定探测TCP端口的连通性,或者监控Web站点返回状态码。我在生产环境里的做法是:一台主机同时配置ICMP ping(网络层)和TCP端口拨测(传输层),两者都正常才算"健康"。当某个服务挂掉但主机还活着时,TCP端口拨测会先报警,而不是等用户投诉了才发现。
如果是互联网业务的域名拨测,我建议你考虑专门的拨测工具或者自己写脚本采集,因为zabbix的简单检查对复杂HTTP逻辑(登录态、内容匹配)支持有限。但作为基础的端口连通性监控,zabbix完全够用。
8.2 监控规模的取舍
Ping监控虽然"便宜",但绝不是免费的。每台被监控主机的每次ICMP探测,zabbix server都需要fork一个fping进程来执行。如果你监控几百台设备且更新间隔都设成5秒,server的进程开销会非常恐怖,CPU升高是小事,严重时会导致server处理不过来、整个监控系统假死。
我给一个规模参考值:更新间隔30秒时,一台4核8G的zabbix server,管理300~500台主机的ICMP探测是没问题的;但如果把更新间隔压到5秒,撑死只建议监控100台以内。所以我建议ping监控的更新间隔保守一点,内网设备30秒足够,外网链路或者专线60秒也够,真出了大故障,30秒和5秒的差异不会影响恢复时长——你不可能因为告警早25秒就把运维反应时间缩短太多。
另外还要注意监控项数量本身。zabbix的性能瓶颈往往不在数据采集,而在数据库写入和前端绘图。每台主机3个ping监控项,500台主机就是1500个监控项,每分钟产生3000条历史数据,看起来不多,但如果你的历史数据保留周期设置成一两年,存储量会滚雪球。建议把历史数据保留时间控制在30天以内,趋势数据保留1到2年,这样查询速度有保障,磁盘成本也可控。
8.3 最后几点建议
回头看zabbix实现ping监控这件事,它的核心价值不在于"怎么配置三个键值",而在于你想清楚监控的目标是什么、告警的边界在哪里、出了问题怎么快速定位。
我的建议是:从小范围试起,不要一上来就给全公司几百台设备铺上ping监控。先在核心网络设备和最重要的一批服务器上跑两周,观察数据形态,找出正常的基线值,调整好告警阈值,再逐步推广。这样推广过程中如果遇到告警风暴,影响面也是可控的。
另外,监控项命名规范一定要在建库的时候就定下来。我见过太多zabbix环境里监控项叫ICMP-1、ICMP-2这种毫无意义的名称,等设备规模到几百台时根本分不清谁是谁。我的规范是ICMP-目标IP-指标,比如Ping-192.168.10.1-loss、Ping-192.168.10.1-sec,这样后续无论是手工排查还是写脚本导出,都能一眼看明白。这套规范坚持下来,后期维护会轻松很多。