zabbix-tools / zabbix-module-systemd

Native systemd monitoring for Zabbix
MIT License
90 stars 17 forks source link

Not supported item when Service is on inactive state. #24

Open rubenbperez opened 6 years ago

rubenbperez commented 6 years ago

Hi, I have a little issue when a system is in inactive state, the module gives me back a ZBX_NOTSUPPORTED: Failed to lookup object path:

1707:20180420:150015.966 In update_cpustats() 1707:20180420:150015.966 End of update_cpustats() 1707:20180420:150015.967 zbx_zbx_setproctitle() title:'collector [idle 1 sec]' 1707:20180420:150016.967 zbx_zbx_setproctitle() title:'collector [processing data]' 1707:20180420:150016.967 In update_cpustats() 1707:20180420:150016.967 End of update_cpustats() 1707:20180420:150016.967 zbx_zbx_setproctitle() title:'collector [idle 1 sec]' 1708:20180420:150016.968 zbx_zbx_setproctitle() title:'listener #1 [processing request]' 1708:20180420:150016.968 Requested [systemd.service.info[elasticsearchcurator,state]] 1708:20180420:150016.968 [systemd] org.freedesktop.systemd1.NoSuchUnit: Unit elasticsearchcurator.service not loaded. 1708:20180420:150016.968 Sending back [ZBX_NOTSUPPORTED: Failed to lookup object path] 1708:20180420:150016.968 zbx_zbx_setproctitle() title:'listener #1 [waiting for connection]' 1707:20180420:150017.967 zbx_zbx_setproctitle() title:'collector [processing data]' 1707:20180420:150017.967 In update_cpustats() 1707:20180420:150017.967 End of update_cpustats() 1707:20180420:150017.967 zbx_zbx_setproctitle() title:'collector [idle 1 sec]' 1707:20180420:150018.967 zbx_zbx_setproctitle() title:'collector [processing data]' 1707:20180420:150018.968 In update_cpustats() 1707:20180420:150018.968 End of update_cpustats() 1707:20180420:150018.968 zbx_zbx_setproctitle() title:'collector [idle 1 sec]' 1707:20180420:150019.968 zbx_zbx_setproctitle() title:'collector [processing data]' 1707:20180420:150019.968 In update_cpustats() 1707:20180420:150019.968 End of update_cpustats() 1707:20180420:150019.968 zbx_zbx_setproctitle() title:'collector [idle 1 sec]' 1707:20180420:150020.968 zbx_zbx_setproctitle() title:'collector [processing data]' 1707:20180420:150020.968 In update_cpustats() 1707:20180420:150020.968 End of update_cpustats()

Any idea?

Thank you.

cavaliercoder commented 6 years ago

It might be related to this issue: https://github.com/systemd/systemd/issues/3807. In this case, an inactive service is actually unloaded.

From the output above, it appears the systemd API is claiming there is no elasticsearchcurator.service service unit. The module is simply reporting this.

What result do you see for $ systemctl status elasticsearchcurator.service when the service is inactive?

rubenbperez commented 6 years ago

Thanks for you fast answer.

This also happens to system services in Ubuntu 16.04.

$ systemctl show elasticsearchcurator.service | grep State
LoadState=loaded
ActiveState=inactive
SubState=dead
UnitFileState=disabled
StateChangeTimestampMonotonic=0
$ systemctl status elasticsearchcurator.service 
● elasticsearchcurator.service - ElasticSearchCurator. Cure it all.
   Loaded: loaded (/etc/systemd/system/elasticsearchcurator.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
rubenbperez commented 6 years ago

Finally I used this solution: https://github.com/systemd/systemd/issues/1929

Doc: https://dbus.freedesktop.org/doc/api/html/group__DBusPendingCall.html#ga5a738928c2369fef093ce00658903d06

I hope for non side-effects for the change (I didn't read full code).

EDIT:

There's a little problem. With the above change, it always gives back an object path which means every string is a service (this makes systemd_unit_is_service function to always return true). To Solve this problem I made a double check: When ActiveState is checked I also check for LoadState which may give me the existance of the service. After checking this, I created a new Code (255) to show No Such Service.