Еще горстка материалов:

Расширенный custom вывод status.cgi в Nagios

Вывод 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

unix-way