Вывод status.cgi в Icinga
Icinga или Nagios позволяет просматривать текущее состояние всех узлов сети и сервисов, которые будут контролироваться. В стандартной поставке icinga поддерживает отображение в формате json статусов сервисов и хостов посредством cgi-программы status.cgi. Поддерживаются директивы notes_url, action_url и другие. Это работает так, например: https://nagios.corp.ru/nagios/cgi-bin/status.cgi?host=dhcp.infra.ru&jsonoutput
… "status": { "service_status": [ { "host_name": "dhcp.infra.ru", "host_display_name": "dhcp.infra.ru", "service_description": "DHCPD", "service_display_name": "DHCPD", "status": "OK", "last_check": "04-03-2015 09:17:32", "duration": "1d 19h 36m 0s", "attempts": "1/3", "state_type": "HARD", "is_flapping": false, "in_scheduled_downtime": false, "active_checks_enabled": false, "passive_checks_enabled": true, "notifications_enabled": true, "has_been_acknowledged": false, "action_url": "http://test.ru", "notes_url": "https://test2.ru", "status_information": "dhcpd is running as pid 17902."} ] } |
Для реализации нового функционала,т.е. например нужно добавить в вывод nagios status.cgi отображение директивы notes, необходимо:
1. Скачать под нашу версию исходники icinga.
2. Модифицировать исходный C++ код модулей icinga и скомпилировать status.cgi для nagios. В данном случае идем в директорию cgi. Правим код status.c — тут надо добавить работу с директивой notes, а в cgiutils.c описание переменной «char *notes_target = NULL;»
3. Далее компилим:
#./configure --prefix=/usr/local/etc/nagios --with-icinga-user=nagios --with-icinga-group=nagios --with-httpd-conf=/usr/local/etc --enable-idoutils=no #make all |
В итоге теперь у нас есть новый рабочий status.cgi, который отправляем на статусные ноды status[1-6].nagios.corp.hostcomm.ru (в данном случае существует распределённая система мониторинга, в обычных случаях просто копируем в существующую директорию текущего сервера)
Реализация паппетом:
class base_msk_nagios_status { ….. file { "/usr/local/www/nagios/cgi-bin/status_new.cgi": ensure => "file", owner => "root", group => "wheel", mode => "0755", source => "puppet:///file/status.node.nagios/status_new.cgi", } ….. |
В итоге запрос будет выглядеть так: https://nagios.corp.ru/nagios/cgi-bin/status_new.cgi?host=dhcp.infra.ru&jsonoutput, и на выходе получаем всё тоже самое что и в старом варианте + новое поле "notes":
"status": { "service_status": [ { "host_name": "dhcp.infra.ru", "host_display_name": "dhcp.infra.ru", "service_description": "DHCPD", "service_display_name": "DHCPD", "status": "OK", "last_check": "04-03-2015 09:17:32", "duration": "1d 19h 36m 46s", "attempts": "1/3", "state_type": "HARD", "is_flapping": false, "in_scheduled_downtime": false, "active_checks_enabled": false, "passive_checks_enabled": true, "notifications_enabled": true, "has_been_acknowledged": false, "action_url": "null", "notes_url": "https://test2.ru", "notes": "Привет, я директива notes", "status_information": "dhcpd is running as pid 17902."} ] } |
Поле notes добавляется в описании хостов и сервисов нагиос, например:
define service{ use my_gen-service-template-5min host_name dhcp.infra.ru service_description DHCPD check_command hc_check_dhcp notes_url https://test.ru notes Привет, я директива notes } |
Обновлено 06.04.2016 20:20