Zabbix添加监控项通过SNMP监控Openwrt路由器CPU温度

前几篇文章使用了SNMP监控Openwrt路由器的运行状态,但是没有CPU温度
本次将CPU温度添加到SNMP中,实现自定义SNMP并通过zabbix进行记录数据

Zabbix官方监控值预处理介绍:
https://www.zabbix.com/documentation/6.0/zh/manual/config/items/preprocessing

配置Openwrt的snmpd

修改snmpd配置文件

Openwrt的snmp配置文件不是/etc/snmp/snmpd.conf
这个文件是根据/etc/config/snmpd这个配置文件生成的,Openwrt基本上所有配置都在/etc/config
/etc/config/snmpd最后添加

1
2
3
4
config exec                  
option name CPUtemp
option prog /bin/cat
option args /sys/class/thermal/thermal_zone0/temp #一般openwrt查看温度是直接cat这个文件

重启snmpd服务

1
$ /etc/init.d/snmpd restart

snmpwalk获取信息

1
snmpwalk -v2c -c public -v 1 10.10.0.1 .1.3.6.1.4.1

可以得到的重要信息

1
2
3
4
5
6
7
8
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "filedescriptors"  #openwrt的snmpd配置文件自带的,不重要
iso.3.6.1.4.1.2021.8.1.2.2 = STRING: "CPUtemp"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/cat /proc/sys/fs/file-nr" #自带的不重要
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: "/bin/cat /sys/class/thermal/thermal_zone0/temp"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.100.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "352 0 23013" #自带的不重要
iso.3.6.1.4.1.2021.8.1.101.2 = STRING: "43680"

由此可以获得iso.3.6.1.4.1.2021.8.1.101.2这个OID是我们路由器的温度,实际上是43.68
但要注意这里cat获得值的类型是STRING字符型,接入zabbix统计最好用数值。
cat /sys/class/thermal/thermal_zone0/temp | grep -Eo '[0-9]+'通过正则表达式输出的是数值型,但遗憾的是我把这条命令加入CPUtemp的option args不起作用。可能需要写一下脚本,然后通过option args调用脚本可能获取到的是数值类型,我这里没有尝试过。

所以这里将类型转换交给Zabbix,openwrt配置到此结束

配置Zabbix

配置Zabbix的监控项以及数据预处理

首先在配置-模板中创建一个模板,这里我为openwrt的cpu温度单独添加一个模板,不会影响到使用中的Linux by SNMP模板,也为了方便以后添加更多的Openwrt的监控项。
创建模板名称和绑定群组,创建监控项

监控项

1
2
3
4
5
6
名称    Linux: CPU Temperature
类型 SNMP agent
键值 system.cpu.temp
信息类型 浮点数
SNMP OID iso.3.6.1.4.1.2021.8.1.101.2
单位 ℃

标记

1
2
名称	         值
component cpu

预处理

1
2
3
4
5
6
预定步骤        名称        参数
1 正则表达式 (.{3})\d{2}$ \1 #目的为了取43680的前三位,string 436
2 正则表达式 ([0-9]+) \1 #目的为了将string类型转换成...大概是double?不然下面直接/10就只剩43了(个人拙见) 436
3 自定义倍数 0.1 #目的436/10=43.6

信息类型 浮点数

将模板绑定主机

将模板绑定主机上,找到 Linux: CPU Temperature立刻执行,随后在最新数据查看即可
效果图为本文章封面

完成