On this page
2 网络接口发现
可以发现网络接口及其属性:
- 接口名称
- 接口别名
- 接口 MAC 地址
- 接口类型
- 链路速度
- 接口最新或当前的双工值
- 已配置的以及 RFC2863 运行状态
- 物理链路是否存在
- 链路变为 up 或 down 的次数,以及链路状态发生变化的总次数
- 入站和出站流量
为此,您可以组合使用:
- 作为主监控项的
net.if.getagent 监控项 - 一个依赖的低级别发现规则
- 依赖的监控项原型
配置
主监控项
使用以下 key 创建一个 Zabbix agent 监控项:
net.if.get[enp.*]

对于可能较大的 JSON 数据,请将 信息类型 设置为 文本。
历史数据可设置为 不存储,因为它仅用作主监控项。
可以配置一个相对较短的更新间隔,例如 1m,以确保频繁轮询数据。
该监控项会发现名称匹配 enp.* 的网络接口,并返回其配置和统计信息。
此监控项返回的数据将包含类似于以下网络接口信息:
{
"config": [
{
"name": "enp0s3",
"mac": "08:00:27:9a:8f:bb",
"type": "physical",
"speed": 1000,
"duplex": "full",
"administrative_state": "up",
"operational_state": "up",
"carrier": 1
}
],
"values": [
{
"name": "enp0s3",
"mac": "08:00:27:9a:8f:bb",
"carrier": 1,
"carrier_changes": 2,
"carrier_up_count": 1,
"carrier_down_count": 1,
"in": {
"bytes": 98241651,
"packets": 72754,
"errors": 0,
"dropped": 0,
"overruns": 0,
"frame": 0,
"compressed": 0,
"multicast": 17
},
"out": {
"bytes": 1299650,
"packets": 11380,
"errors": 0,
"dropped": 0,
"overruns": 0,
"collisions": 0,
"carrier": 0,
"compressed": 0
}
}
]
}
依赖型 LLD 规则
创建一个低级别发现规则,类型为 Dependent item:

作为主监控项,选择已创建的 net.if.get 监控项。
在 Preprocessing 选项卡中,添加:
- 一个带有
$.config参数的 JSONPath 步骤。 - 一个带有足够大的心跳间隔的 Discard unchanged with heartbeat 步骤,例如
1h,以避免不必要的 LLD 执行。 这样,主监控项可以被频繁轮询,而低级别发现仅在config发生变化或心跳周期到期时运行。

在 LLD macros 选项卡中,定义自定义宏及其对应的 JSONPath 表达式。
例如,在使用 net.if.get[enp.*] 时,可以使用以下 JSONPath 表达式:
{#IFNAME} - $.name

依赖监控项原型
在 LLD 规则中创建一个类型为 Dependent item 的监控项原型。
将已创建的 net.if.get 监控项选为此原型的主监控项。

请注意在监控项原型名称和键中使用自定义宏。 在此示例中,键是自定义且由用户定义的。
- 名称:Interface
{#IFNAME}: operational state - 键:
net.if.oper.state[{#IFNAME}]
信息类型使用 Text。
在监控项原型的 Preprocessing 选项卡中选择 JSONPath,并使用以下 JSONPath 表达式作为参数:
$.config[?(@.name=='{#IFNAME}')].operational_state.first()

还可以用同样的方式创建其他监控项原型,例如:
- 名称:Interface
{#IFNAME}: carrier changes - 键:
net.if.carrier.changes[{#IFNAME}] - 预处理:JSONPath -
$.values[?(@.name=='{#IFNAME}')].carrier_changes.first() - 名称:Interface
{#IFNAME}: speed - 键:
net.if.speed[{#IFNAME}] - 预处理:JSONPath -
$.config[?(@.name=='{#IFNAME}')].speed.first()
当发现开始时,将为每个网络接口创建一个监控项。