首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在zabbix中监控网卡链路状态

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

Stack Overflow用户
提问于 2013-07-18 14:47:55
回答 3查看 8.1K关注 0票数 3

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

EN

回答 3

Stack Overflow用户

发布于 2017-02-07 22:51:47

因此,是的,它是一个UserParameter (即使在Zabbix3.0中也是如此),而且它相当容易设置,至少在现代的Linux机器上是这样。通过参数化UserParameter (如果您遵循...),可以定义单个参数来支持对多个NIC的监控;具体方法如下:

在目标框上,找到存储UserParamter定义的代理目录,就像为定义创建一个新文件或修改现有文件一样;我这样做了:

cat > /etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf EOF UserParameter=net.if.link*,cat /sys//

  • /$1/ service zabbix-agent restart

  • In EOF

  • 重新启动代理,例如:service zabbix-agent restart

  • In Zabbix UI,针对主机创建一个项目,如下所示: Zabbix代理类型:Zabbix代理(如果appropriate).

  • Key:在括号之间有实际要监控的NIC,则激活,例如:net.if.link[em1]

  • 信息类型:数字(未签名);数据类型:Decimal网络状态显示值: as“服务状态”(将它们显示为"Up/Down")

  • Application:

Interfaces

就这样;转到最新数据;等待30秒左右,您的NIC状态应该开始填充。在链路中断时针对要发出警报的项定义触发器也可能很有用。

这里有一些other ways to detect a NIC link's state;上面的cat /sys/class/net/${nic}/carrier对我来说工作得很好(Ubuntu14.04服务器,物理网卡)。

票数 3
EN

Stack Overflow用户

发布于 2013-07-19 07:14:35

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

在windows上我不知道。也许netsh或ipconfig和一些findstr可以让你轮询状态。或者是powershell。问一下serverfault,我打赌你会有确切的答案。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 21:36:15

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

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

  1. 创建或使用现有Zabbix模板。
  2. 在管理->常规菜单中,转到正则表达式并执行以下操作:
    1. 添加新的正则表达式Zabbix正则表达式Zabbix

使用key net.if.discovery.

  • Create filter和regular expression @Physical network interface discovery.

  • Add item prototype以及key net.if.link[{#PHYSNET}]和trigger为模板创建发现规则。

  • Create UserParameter on Zabbix客户端服务器(末尾的示例)。

使用cat /sys/class/net/$1/carrier作为UserParameter有一个问题。如果网络接口关闭(例如,如果使用ip link set eth0 down),则cat命令的结果是无效参数。

我个人在UserParameter中使用这一行代码:

代码语言:javascript
运行
复制
UserParameter=net.if.link[*], if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then cat /sys/class/net/$1/carrier; else echo "0"; fi;

资源:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17716431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档