Teach Zabbix to monitor service status

GEORG GAAL picture GEORG GAAL · Apr 26, 2017 · Viewed 10k times · Source

I know that Zabbix can monitor any service on Linux machine via two options:

  • scan particular tcp or udp port, on which the service is bound
  • or count the service processes with proc.num[<processname>]

It is totally counter-intuitive, because I can spawn processes with the same executable name and they will deceive Zabbix. I'd prefer to use standard service <servicename> status or systemctl status name.service tool. But there are no standard way to use it from Zabbix except system.run[cmd]

Could you help me to write templates for monitoring a particular service state. We want to use different OSes like Centos 7 and Ubuntu 14.04 and 16.04 distributions. It is pity but service <servicename> status is completely different in listed operating systems.

Answer

sivann picture sivann · Jun 12, 2018

You can also add the following UserParameters in zabbix_agentd.conf to monitor service status in systemd systems. For non-systemd the OS doesn't really monitor service status, the various bash script "status" arguments are often unreliable.

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

And then e.g. for sshd status create an item with a key like:

systemd.unit.is-active[sshd]