如何在zabbix中监控网卡链接状态

时间:2013-07-18 06:47:55

标签: networking monitoring zabbix

我需要监视zabbix中的物理接口链接状态,并想知道,如果有内部zabbix检查,或者我需要编写自己的。如果是这样,如何确定网卡中是否插有电缆,接口是否有电压。

3 个答案:

答案 0 :(得分:2)

所以是UserParameter它是(即使在Zabbix 3.0中)并且它的设置相当容易,至少在现代Linux机器上。通过参数化UserParameter(如果你遵循......),可以定义一个参数来支持监控多个NIC;这是如何:

  1. 在目标框中,找到存储UserParamter定义的代理程序目录,如/etc/zabbix/zabbix_agentd.d/
  2. 为定义创建新文件或修改现有文件;我这样做了:

    cat > /etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf << EOF
    UserParameter=net.if.link[*],cat /sys/class/net/$1/carrier
    EOF
    
  3. 重新启动代理,例如:service zabbix-agent restart
  4. 在Zabbix UI中,针对主机创建一个Item,如下所示:
    • 输入: Zabbix代理(如果适用,则为活动状态)。
    • 密钥:具有在括号内监控的实际NIC,例如:net.if.link[em1]
    • 信息类型:数字(无符号); 数据类型:十进制
    • 显示值:为“服务状态”(将其显示为“向上/向下”)
    • 应用程序:网络接口
  5. 就是这样;转到最新数据;等待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键中没有这样的现有项目。

如果要使此解决方案具有通用性,可以使用发现规则来发现网络接口。这将找到所有接口,也可以是虚拟,桥接等。但您可以使用正则表达式仅匹配物理接口。我在许多服务器上使用多个操作系统进行部署。这是我的方法:

  1. 创建或使用现有的Zabbix模板。
  2. 管理中 - &gt;常规菜单,转到正则表达式并执行以下操作:
    1. 添加新的正则表达式Physical network interface discovery
    2. 使用正则表达式^em[0-9]{1,}|p[0-9]{1,}p[0-9]{1,}|eth[0-9]{1,}|ens[0-9]{1,}$
  3. 使用键net.if.discovery为您的模板创建发现规则。
  4. 使用宏{#PHYSNET}和正则表达式@Physical network interface discovery创建过滤器。
  5. 使用键net.if.link[{#PHYSNET}]添加项目原型,并在需要时触发。
  6. 在Zabbix客户端服务器上创建UserParameter(最后的示例)。
  7. 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;
    

    资源: