用Zabbix监控OpenWRT这个想法是因为之前随手装了个WGCloud,后来觉得WGC的限制越来越多,虽然简单,但也太简单,所有又回头找了一圈,发现之前装过的Zabbix还真不错,6.4版本的binary package安装真的比之前简单的太多了,而且新的7.0的alpha有很多新特色。。所以就放弃了之前用了很多年的Cacti+Nagios的方案,重新再来一套Zabbix试试吧,装到家里ESXi的all in One的机器的guest OS (Debian 12)居然CPU Panic,算了,还是扔到OCI上吧,这段时间还是非常稳定的,装好之后服务器的监控很快搞好了,但是OpenWRT和Padavan有点抓瞎,居然没有内置的模板,这怎么办呢?
网上找了一大堆不怎么相干的文档,要么就是Zabbix巨老,要么就是各种瞎扯,后来在Reddit上看到一篇讨论,三楼的大哥HenryDavidCursory的两年前的帖子指明了一个方向,我开始还觉得这只是个大概的方向,后来才发现这是个完全的可行的解决方案,相对于装SNMPD然后用Snmp协议爬MIB树的方法来说简单了很多。。其实能看懂英文的也能帆樯的直接看他的帖子就行了,哈哈。。下面是我翻译的,然后根据我用的版本做了一些调整。
设置基础的 Zabbix Agent
我将 Zabbix Agent 安装在刷成 OpenWrt R23.7.7 GDQ V2[2023] Compiled by eSir / LuCI Master (git-23.198.59743-991daf5) 的5105 All in One的ESXi 7.03U的虚拟机上。Zabbix Agent现在的版本是6.4.7-1,如下图所示,如果你不需要跟服务器进行PSK或者证书通讯,可以不用考虑GnuTLS和OpenSSL的版本,zabbix-get估计也是需要的。
安装完agent和三个extra包之后,下一步需要通过 SSH 编辑 /etc/zabbix_agentd.conf
进行如下设置:
(a) 将模式改为 “agent active”; (b) 使用 ServerActive=
参数指向 Zabbix 服务器。
即使使用主动模式,也需要 (b) 设置 Server=
参数,指定允许查询被动模式 Zabbix Agent 的 IP 地址。
确认 Agent 运行正常并向 Zabbix 服务器提交数据,这里要强调一下,模板中的item大部分都是Active抓取的,所以的步骤 (a) 是必须的,否则不会工作,这个模板Active抓数的时候在Zabbix服务器的web页面上不会显示绿色的已经连接或者红色的连不上,就是个黑色的原始状态,不知道为啥。我使用的是 6.4.7-1 版本的 Agent 包,可以正常向 6.4.10 版本的 Zabbix 服务器汇报数据。
安装额外的包
在 LuCI 中安装额外的 Zabbix 包,这些包会在 /etc/zabbix_agentd.conf.d/
下创建必要的 Zabbix 用户参数设置文件:mac80211、network 和 wifi。你可以在这些文件的源代码中看到,它们定义了一个用于发现低级别项目 (Zabbix 术语) 的 .disocvery
用户参数,然后还有一系列单独的用户参数,以 [*]
索引,应用于每种类型的发现项目 (802.11、IP 网络、WLAN 网络)。因为我是装在虚拟机中,宿主机没有装WIFI网卡,所以802.11和WLAN我都用不到,但还是安装了。
注意:安装额外包后,我需要手动重启 zabbix_agentd
服务,以便运行中的 Agent 读取这些文件中定义的 UserParams。
在 Zabbix 服务器上定义模板
我的配置使用一个 “总版” 监控模板来监控系统级项目,以及三个 “子模板”,分别用于 802.11、IP 网络和 WLAN 接口。我最初使用上述 pastebin 脚本作为参考,但可能进行了某些修改。(我确定我调整了发现间隔/项目收集间隔之类的无关设置,但我记不清是否修改了其他内容。)
我的模板链接如下:
OpenWRT “总版” 设备监控模板:https://pastebin.com/RgMxytwn
OpenWRT Mac80211 模板:https://pastebin.com/SGCi3NHw
OpenWRT [IP/逻辑] 网络模板:https://pastebin.com/HAzfHYTN
OpenWRT WiFi 网络模板:https://pastebin.com/UWz0XZmw
确保在 Zabbix 模板配置中将三个 “子模板” 链接到 “总版” 模板,它们成功导入并自动相互引用。
主机设置和模板链接
最后,在 Zabbix 中进行标准操作:为你的 OpenWRT 设备创建 Zabbix 主机,并将 “总版” 监控模板应用于它们。你应该会在适当的间隔后开始收集数据,无论这些间隔是直接设置在项目本身,还是设置在低级别发现项目的项目原型收集间隔上。
故障排除
经过一轮抓数 (即发现间隔) 后,Zabbix 服务器可以告诉你哪些项目对于任何特定的 OpenWRT 设备都不支持 (在 Zabbix 中,导航到: 配置 --> 主机 --> <设备> --> 项目 --> 设置状态过滤器为 不支持 --> 应用)。额外的包中的一些项目返回 “不支持”,因为 Zabbix 为未使用的网络/设备发送回的值可能为空字符串而不是零,但大多数项目都按照模板收集和解析数据。
OpenWRT Zabbix Agent 默认也会记录到 syslog,因此如果你从 OpenWRT 设备收集 syslog,你可以在 Zabbix Agent 重启时看到它的启动消息,或者看到 “不支持的项目密钥” 错误消息,这些消息来自 Agent 本身,而不是 Zabbix 服务器。但是,Zabbix 服务器确实需要告诉 Agent 查询这些项目,这意味着它需要安装并应用模板,然后 Zabbix Agent 才会尝试收集这些项目 (如果无法收集,则会生成错误)。
这里我修改了一下配置文件,让错误信息写入 /tmp/zabbix.log,为什么会写入 /tmp是因为运行agent的zabbix用户没有写/var/log目录的权限,我也没时间去发现怎么赋予权限就临时写到那里,还有就是这四个template只能提供Graph,而没有完整的dashboard,所以还要自己设计dashboard,加上各种host,group分类啥的。
还有个事情,不要用OpenWRT官方的关于三个子template的文件,那三个文件是2.xx或者4.xx的,跟zabbix 6.4不兼容,我就是先下载了那三个文件导入失败,然后试图转换也失败后才找到这个帖子的,上面四个链接里的模板文件都可以在6.4上直接用,当然如果你想修改,都是标准的XML,也可以根据自己的习惯调整。
如果想了解zabbix agent抓的原始数据的样式,可以运行下面的命令:
zabbix_agentd --print
从output也能看到你的openwrt支持什么和不支持什么了。祝大家监控愉快,等我研究完怎么监控padavan再水一篇。
文章评论