我需要监视zabbix中的物理接口链接状态,并想知道,如果有内部zabbix检查,或者我需要编写自己的。如果是这样,如何确定网卡中是否插有电缆,接口是否有电压。
答案 0 :(得分:2)
所以是UserParameter它是(即使在Zabbix 3.0中)并且它的设置相当容易,至少在现代Linux机器上。通过参数化UserParameter(如果你遵循......),可以定义一个参数来支持监控多个NIC;这是如何:
/etc/zabbix/zabbix_agentd.d/
为定义创建新文件或修改现有文件;我这样做了:
cat > /etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf << EOF
UserParameter=net.if.link[*],cat /sys/class/net/$1/carrier
EOF
service zabbix-agent restart
net.if.link[em1]
,就是这样;转到最新数据;等待30秒左右,你的NIC状态应该开始填充。如果链接断开,定义针对项目的触发器可能也是有用的。
以下是一些other ways to detect a NIC link's state;上面的cat /sys/class/net/${nic}/carrier
对我很有用(Ubuntu 14.04服务器,物理网卡)。
答案 1 :(得分:1)
不,没有这样的检查。您可以使用UserParameter来实现它。至于如何,取决于运行代理的操作系统。在linux上,您可以使用mii-tool或ethtool定期检查。或者,如果使用NetworkManager,则可以执行一些脚本并连接到D-Bus。或者您可以监视系统日志,驱动程序通常会将链接检测记录到内核日志中。
在Windows上我不知道。可能netsh或ipconfig与一些findstr可以让你轮询状态。或者powershell。在服务器故障上询问,我打赌你会有确切的答案。
答案 2 :(得分:1)
@ sxc731是对的,net.if
键中没有这样的现有项目。
如果要使此解决方案具有通用性,可以使用发现规则来发现网络接口。这将找到所有接口,也可以是虚拟,桥接等。但您可以使用正则表达式仅匹配物理接口。我在许多服务器上使用多个操作系统进行部署。这是我的方法:
Physical network interface discovery
。^em[0-9]{1,}|p[0-9]{1,}p[0-9]{1,}|eth[0-9]{1,}|ens[0-9]{1,}$
。net.if.discovery
为您的模板创建发现规则。{#PHYSNET}
和正则表达式@Physical network interface discovery
创建过滤器。net.if.link[{#PHYSNET}]
添加项目原型,并在需要时触发。将cat /sys/class/net/$1/carrier
用作UserParameter存在一个问题。如果网络接口关闭(例如,使用ip link set eth0 down
),则cat
命令的结果为无效参数。
我个人使用这个单线程用于UserParameter:
UserParameter=net.if.link[*], if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then cat /sys/class/net/$1/carrier; else echo "0"; fi;
资源: