教 Zabbix 监控服务状态
Teach Zabbix to monitor service status
我知道 Zabbix 可以通过两个选项监控 Linux 机器上的任何服务:
- 扫描绑定服务的特定 tcp 或 udp 端口
- 或者用
proc.num[<processname>]
统计服务进程
这完全违反直觉,因为我可以生成具有相同可执行文件名称的进程,它们会欺骗 Zabbix。我更愿意使用标准 service <servicename> status
或 systemctl 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 $?
我知道 Zabbix 可以通过两个选项监控 Linux 机器上的任何服务:
- 扫描绑定服务的特定 tcp 或 udp 端口
- 或者用
proc.num[<processname>]
统计服务进程
这完全违反直觉,因为我可以生成具有相同可执行文件名称的进程,它们会欺骗 Zabbix。我更愿意使用标准 service <servicename> status
或 systemctl status name.service
工具。但是除了 system.run[cmd]
你能帮我写一个模板来监控特定的服务状态吗?我们想使用不同的操作系统,如 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 $?