教Zabbix监视服务状态

GEO*_*AAL 4 service zabbix

美好的一天!

我知道Zabbix可以通过两个选项监视Linux机器上的任何服务:

  • 扫描绑定了服务的特定tcp或udp端口
  • 或计算服务流程 proc.num[<processname>]

这完全是违反直觉的,因为我可以使用相同的可执行文件名称生成进程,并且它们会欺骗Zabbix。我更喜欢使用标准service <servicename> statussystemctl status name.service工具。但是除了Zabbix之外,没有标准的使用方式system.run[cmd]

您能否帮助我编写用于监视特定服务状态的模板。我们想使用不同的操作系统,例如Centos 7和Ubuntu 14.04和16.04发行版。遗憾的是,但service <servicename> status在列出的操作系统中却完全不同。

siv*_*ann 5

您还可以在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)

  • 不知道为什么不赞成这样做,这是一个完全有效的简单解决方案,与公认的答案不同,它没有任何其他依赖性,因此在某些情况下甚至可以是唯一可行的解​​决方案。+1 (3认同)

Jan*_*raj 2

如果 Linux 服务由systemd(Centos 7+、Ubuntu 16+、...)管理,那么您可以使用https://github.com/cavaliercoder/zabbix-module-systemd。它使用标准的systemd D-Bus 通信——这就是systemctl幕后的作用。