美好的一天!
我知道Zabbix可以通过两个选项监视Linux机器上的任何服务:
proc.num[<processname>]这完全是违反直觉的,因为我可以使用相同的可执行文件名称生成进程,并且它们会欺骗Zabbix。我更喜欢使用标准service <servicename> status或systemctl status name.service工具。但是除了Zabbix之外,没有标准的使用方式system.run[cmd]
您能否帮助我编写用于监视特定服务状态的模板。我们想使用不同的操作系统,例如Centos 7和Ubuntu 14.04和16.04发行版。遗憾的是,但service <servicename> status在列出的操作系统中却完全不同。
您还可以在zabbix_agentd.conf中添加以下UserParameters来监视systemd系统中的服务状态。对于非系统的OS,它实际上并不监视服务状态,因此各种bash脚本的“ status”参数通常是不可靠的。
UserParameter=systemd.unit.is-active[*],systemctl is-active --quiet '$1' && echo 1 || echo 0
UserParameter=systemd.unit.is-failed[*],systemctl is-failed --quiet '$1' && echo 1 || echo 0
UserParameter=systemd.unit.is-enabled[*],systemctl is-enabled --quiet '$1' && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
然后,例如,对于sshd状态,创建一个带有以下项的项:
systemd.unit.is-active[sshd]
Run Code Online (Sandbox Code Playgroud)
如果 Linux 服务由systemd(Centos 7+、Ubuntu 16+、...)管理,那么您可以使用https://github.com/cavaliercoder/zabbix-module-systemd。它使用标准的systemd D-Bus 通信——这就是systemctl幕后的作用。