教 Zabbix 监控服务状态

Teach Zabbix to monitor service status

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

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

之外,没有从 Zabbix 使用它的标准方法

你能帮我写一个模板来监控特定的服务状态吗?我们想使用不同的操作系统,如 Centos 7 和 Ubuntu 14.04 和 16.04 发行版。遗憾的是 service <servicename> status 在列出的操作系统中完全不同。

如果 Linux 服务由 systemd(Centos 7+,Ubuntu 16+,...)管理,那么您可以使用 https://github.com/cavaliercoder/zabbix-module-systemd. It uses standard systemd D-Bus communication - 就是这样systemctl 在后台执行。

您还可以在zabbix_agentd.conf中添加以下UserParameters来监控systemd系统中的服务状态。对于非 systemd,OS 并不真正监控服务状态,各种 bash 脚本 "status" 参数通常不可靠。

UserParameter=systemd.unit.is-active[*],systemctl is-active --quiet '' && echo 1 || echo 0
UserParameter=systemd.unit.is-failed[*],systemctl is-failed --quiet '' && echo 1 || echo 0
UserParameter=systemd.unit.is-enabled[*],systemctl is-enabled --quiet '' && echo 1 || echo 0

然后例如为 sshd status 创建一个带有如下键的项目:

systemd.unit.is-active[sshd]

centos 6可以做到:

UserParameter=check_service_status_asterisk,sudo service asterisk status 2> /dev/null | grep -q "is running";echo $?

对于 centos 7 或类似系统,可以使用以下方式创建:

UserParameter=check_service_status_grafana,systemctl status grafana-server 2> /dev/null |sed -n 3p |grep -q "running";echo $?

UserParameter=check_service_status[*],systemctl status  2> /dev/null |sed -n 3p |grep -q "running";echo $?