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

Posted

技术标签:

【中文标题】zabbix中如何监控网卡链接状态【英文标题】:How to monitor network card link status in zabbix 【发布时间】:2013-07-16 23:43:26 【问题描述】:

我需要监控 zabbix 中的物理接口链接状态,并且想知道是否有内部 zabbix 检查,或者我需要自己编写。如果有,如何判断网卡是否插有网线,接口是否有电压。

【问题讨论】:

【参考方案1】:

所以是的 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 状态应该开始填充。如果链接断开,则针对要发出警报的项目定义触发器也可能很有用。

这里有一些other ways to detect a NIC link's state;以上cat /sys/class/net/$nic/carrier 对我很有效(Ubuntu 14.04 服务器,物理网卡)。

【讨论】:

作为一项改进,我建议在/etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf 中使用以下行:UserParameter=net.if.link[*],if [ -r /sys/class/net/$1/carrier ] ; then cat /sys/class/net/$1/carrier ; else echo 0 ; fi 这可以防止项目进入“不受支持”状态。【参考方案2】:

不,没有这样的检查。您可以使用UserParameter 来实现它。至于如何,取决于运行代理的操作系统。在 linux 上,您可以使用 mii-tool 或 ethtool 定期检查。或者,如果您使用 NetworkManager,您可以编写一些脚本并连接到 D-Bus。或者您可以监控系统日志,驱动程序通常会将链接检测记录到内核日志中。

在 Windows 上我不知道。可能带有一些 findstr 的 netsh 或 ipconfig 可以让您轮询状态。或电源外壳。询问服务器故障,我打赌你会有确切的答案。

【讨论】:

【参考方案3】:

@sxc731 是对的,net.if 键中没有这样的现有项。

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

    创建或使用现有的 Zabbix 模板。 在 Administration -> General 菜单中,转到 Regular Expressions 并执行以下操作:
      添加新的正则表达式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] 添加项目原型并在需要时触发。 在 Zabbix 客户端服务器上创建 UserParameter(示例在最后)。

使用cat /sys/class/net/$1/carrier 作为用户参数存在一个问题。如果网络接口关闭(例如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;

资源:

Zabbix discovery

Custom discovery rules example

【讨论】:

以上是关于zabbix中如何监控网卡链接状态的主要内容,如果未能解决你的问题,请参考以下文章

zabbix如何监控外部端口的状态?

Zabbix实战之运维篇Zabbix监控web网站配置方法

Zabbix监控Windows网卡流量

zabbix监控网卡进出口流量

zabbix监控网卡进出口流量

zabbix监控redis集群状态