我需要监控 zabbix 中的物理接口链接状态,并且想知道是否有内部 zabbix 检查,或者我需要自己编写。如果有,如何判断网卡是否插有网线,接口是否有电压。
3 回答
所以是的,它是一个UserParameter(即使在 Zabbix 3.0 中),而且设置起来相当容易,至少在现代 Linux 机器上是这样。通过参数化 UserParameter(如果您遵循...),可以定义单个参数来支持对多个 NIC 的监控;就是这样:
- 在目标框上,找到存储 UserParamter 定义的代理目录,类似
/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
- 在 Zabbix UI 中,针对主机创建一个 Item,如下所示:
- 类型: Zabbix 代理(如果合适,激活)。
- Key:括号中是否有要监控的实际网卡,例如:
net.if.link[em1]
, - 信息类型:数字(无符号);数据类型:十进制
- 显示值:作为“服务状态”(显示为“向上/向下”)
- 应用:网络接口
而已; 转到最新数据;等待 30 秒左右,您的 NIC 状态应该开始填充。如果链接断开,则针对要发出警报的项目定义触发器也可能很有用。
以下是检测 NIC 链接状态的其他一些方法;以上cat /sys/class/net/${nic}/carrier
对我来说很有效(Ubuntu 14.04 服务器,物理网卡)。
不,没有这样的检查。您可以使用UserParameter来实现它。至于如何,取决于运行代理的操作系统。在 linux 上,您可以使用 mii-tool 或 ethtool 定期检查。或者,如果您使用 NetworkManager,您可以编写一些脚本并连接到 D-Bus。或者您可以监视系统日志,驱动程序通常会将链接检测记录到内核日志中。
在windows上我不知道。可能带有一些 findstr 的 netsh 或 ipconfig 可以让您轮询状态。或电源外壳。询问服务器故障,我打赌你会有确切的答案。
@sxc731 是对的,键中没有这样的现有项目net.if
。
如果您想让这个解决方案通用,您可以使用发现规则来发现网络接口。这将找到所有接口,包括虚拟接口、网桥等。但是您可以使用正则表达式仅匹配物理接口。我在许多服务器上使用多个操作系统来部署它。这是我的方法:
- 创建或使用现有的 Zabbix 模板。
- 在管理 -> 常规菜单中,转到正则表达式并执行以下操作:
- 添加新的正则表达式
Physical network interface discovery
。 - 使用正则表达式
^em[0-9]{1,}|p[0-9]{1,}p[0-9]{1,}|eth[0-9]{1,}|ens[0-9]{1,}$
。
- 添加新的正则表达式
- 使用 key 为您的模板创建发现规则
net.if.discovery
。 - 使用宏
{#PHYSNET}
和正则表达式创建过滤器@Physical network interface discovery
。 net.if.link[{#PHYSNET}]
如果需要,请添加带有键和触发器的项目原型。- 在 Zabbix 客户端服务器上创建 UserParameter(示例在最后)。
使用cat /sys/class/net/$1/carrier
as UserParameter 存在一个问题。如果网络接口关闭(例如 with ip link set eth0 down
),cat
命令的结果是Invalid Argument。
我个人将这个单线用于 UserParameter:
UserParameter=net.if.link[*], if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then cat /sys/class/net/$1/carrier; else echo "0"; fi;
资源: