教 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> status
或systemctl 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 监控服务状态的主要内容,如果未能解决你的问题,请参考以下文章