教 Zabbix 监控服务状态

Posted

技术标签:

【中文标题】教 Zabbix 监控服务状态【英文标题】:Teach Zabbix to monitor service status 【发布时间】:2017-09-23 12:05:55 【问题描述】:

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

扫描绑定服务的特定 tcp 或 udp 端口​​ 或者用proc.num[<processname>]统计服务进程

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

您能帮我编写用于监控特定服务状态的模板吗?我们想使用不同的操作系统,比如 Centos 7 和 Ubuntu 14.04 和 16.04 发行版。可惜service <servicename> status在列出的操作系统中完全不同。

【问题讨论】:

【参考方案1】:

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

【讨论】:

如果没有systemd(如Ubuntu 14)我应该使用什么? 非 systemd 系统 = 狂野西部 = 你必须解析初始化脚本的输出【参考方案2】:

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

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

然后例如对于 sshd 状态,使用如下键创建一个项目:

systemd.unit.is-active[sshd]

【讨论】:

不知道为什么这被否决了,这是一个完全有效的简单解决方案,与公认的答案不同,它没有任何额外的依赖关系,因此在某些情况下甚至可能是唯一实用的解决方案. +1【参考方案3】:

对于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 $1 2> /dev/null |sed -n 3p |grep -q "running";echo $?

【讨论】:

以上是关于教 Zabbix 监控服务状态的主要内容,如果未能解决你的问题,请参考以下文章

使用Zabbix监控ZooKeeper服务的健康状态

徒手教你制作运维监控大屏

zabbix监控之web服务监控

Zabbix监控服务器硬盘状态

Zabbix监控nginx服务进程状态

zabbix监控nginx状态