Nagios графики и прием SNMP Traps — различия между версиями

Материал из IN-TON
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
==Установка Nagios==
 
==Установка Nagios==
 
Здесь все просто, ставить будем из репозитариев.
 
Здесь все просто, ставить будем из репозитариев.
<code>aptitude install nagios3</code>
+
<code lang='bash'>aptitude install nagios3</code>
 
==Прикручиваем графики==
 
==Прикручиваем графики==
 
Сперва ставим необходимые пакеты
 
Сперва ставим необходимые пакеты
<code>aptitude install rrdtool librrds-perl gcc make</code>
+
<code lang='bash'>aptitude install rrdtool librrds-perl gcc make</code>
 
Собираем из исходников PNP4Nagios
 
Собираем из исходников PNP4Nagios
<code>wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.25.tar.gz
+
<code lang='bash'>wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.25.tar.gz
 
tar -xzf ./pnp4nagios-0.6.25.tar.gz
 
tar -xzf ./pnp4nagios-0.6.25.tar.gz
 
cd ./pnp4nagios-0.6.25
 
cd ./pnp4nagios-0.6.25
Строка 15: Строка 15:
 
Инсталятор расчитан на HTTPD в нашем случае Apache2, поэтому переносим конфиг на место, включаем его в apache и подчищаем мусор.
 
Инсталятор расчитан на HTTPD в нашем случае Apache2, поэтому переносим конфиг на место, включаем его в apache и подчищаем мусор.
 
Также в конфиге необходимо исправить параметр '''AuthUserFile''' и указать путь к реальному файлу авторизации, в нашем случае '''/etc/nagios3/htpasswd.users'''
 
Также в конфиге необходимо исправить параметр '''AuthUserFile''' и указать путь к реальному файлу авторизации, в нашем случае '''/etc/nagios3/htpasswd.users'''
<code>mv /etc/httpd/conf.d/pnp4nagios.conf /etc/apache2/conf-available/
+
<code lang='bash'>mv /etc/httpd/conf.d/pnp4nagios.conf /etc/apache2/conf-available/
 
rd /etc/httpd/conf.d
 
rd /etc/httpd/conf.d
 
rd /etc/httpd
 
rd /etc/httpd
Строка 21: Строка 21:
 
service apache2 reload</code>
 
service apache2 reload</code>
 
Теперь браузером заходим http://address-nagios/pnp4nagios и проверяем все ли в порядке, в моем случае необходимо было включить '''mod_rewrite''' в '''apache''' и установить '''php-gd'''
 
Теперь браузером заходим http://address-nagios/pnp4nagios и проверяем все ли в порядке, в моем случае необходимо было включить '''mod_rewrite''' в '''apache''' и установить '''php-gd'''
<code>aptitude install php5-gd
+
<code lang='bash'>aptitude install php5-gd
 
a2enmod rewrite
 
a2enmod rewrite
 
service apache2 restart</code>
 
service apache2 restart</code>
 
Обновляем в браузере страницу, убеждаемся что все в порядке и продолжаем.
 
Обновляем в браузере страницу, убеждаемся что все в порядке и продолжаем.
<code>mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/old_install.php
+
<code lang='bash'>mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/old_install.php
 
cp ./source_php4nagios/contrib/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi</code>
 
cp ./source_php4nagios/contrib/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi</code>
 
Осталось настроить Nagios.
 
Осталось настроить Nagios.
 
В '''Nagios.cfg''' выставляем следующие параметры:
 
В '''Nagios.cfg''' выставляем следующие параметры:
<code>process_performance_data=1
+
<code lang='INI'>process_performance_data=1
  
 
#
 
#
Строка 59: Строка 59:
 
}</code>
 
}</code>
 
Пишем шаблоны с графиками для сервисов и хостов.
 
Пишем шаблоны с графиками для сервисов и хостов.
<code>define host {
+
<code lang='INI' download>define host {
 
   name      host-pnp
 
   name      host-pnp
 
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
 
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
Строка 71: Строка 71:
 
}</code>
 
}</code>
 
Осталось назначить шаблоны нужным хостам и сервисам, например так:
 
Осталось назначить шаблоны нужным хостам и сервисам, например так:
<code>define host{
+
<code lang='INI' download>define host{
 
         use                    linux-server,host-pnp    ; Name of host templates to use
 
         use                    linux-server,host-pnp    ; Name of host templates to use
 
                                                         ; This host definition will inherit all variables that are defined
 
                                                         ; This host definition will inherit all variables that are defined
Строка 88: Строка 88:
 
==Прикручиваем SNMP Traps==
 
==Прикручиваем SNMP Traps==
 
Устанавливаем необходимые пакеты и добавляем пользователя '''snmptt''' в группу '''nagios''' чтобы иметь возможность писать в '''nagios.cmd'''
 
Устанавливаем необходимые пакеты и добавляем пользователя '''snmptt''' в группу '''nagios''' чтобы иметь возможность писать в '''nagios.cmd'''
<code>aptitude install snmptt snmptrapd
+
<code lang='bash'>aptitude install snmptt snmptrapd
 
adduser snmptt nagios</code>
 
adduser snmptt nagios</code>
 
В '''/etc/snmp/snmp.conf''' добавляем параметр '''printNumericOids 1''' чтобы '''snmptrapd''' не осуществлял трансляцию OID-ов в текстовый формат, в итоге содержание файла следующее
 
В '''/etc/snmp/snmp.conf''' добавляем параметр '''printNumericOids 1''' чтобы '''snmptrapd''' не осуществлял трансляцию OID-ов в текстовый формат, в итоге содержание файла следующее
<code># As the snmp packages come without MIB files due to license reasons, loading
+
<code lang='INI'># As the snmp packages come without MIB files due to license reasons, loading
 
# of MIBs is disabled by default. If you added the MIBs you can reenable
 
# of MIBs is disabled by default. If you added the MIBs you can reenable
 
# loading them by commenting out the following line.
 
# loading them by commenting out the following line.
Строка 98: Строка 98:
 
</code>
 
</code>
 
В конфиг '''/etc/snmp/snmptrapd.conf''' в конец добавляем
 
В конфиг '''/etc/snmp/snmptrapd.conf''' в конец добавляем
<code>traphandle default /usr/sbin/snmptthandler
+
<code lang='INI'>traphandle default /usr/sbin/snmptthandler
 
disableAuthorization yes</code>
 
disableAuthorization yes</code>
 
Переходим к /etc/snmp/snmptt.ini и приводим параметры в соответствие со списком:
 
Переходим к /etc/snmp/snmptt.ini и приводим параметры в соответствие со списком:
<code>mode = daemon
+
<code lang='INI'>mode = daemon
 
dns_enable = 1
 
dns_enable = 1
 
strip_domain = 1
 
strip_domain = 1
Строка 113: Строка 113:
 
'''$Fz''' - распарсенная и обработанная строка из '''FORMAT'''<br>
 
'''$Fz''' - распарсенная и обработанная строка из '''FORMAT'''<br>
 
Блок '''SDESC - EDESC''' информационный и его вообще можно опустить.
 
Блок '''SDESC - EDESC''' информационный и его вообще можно опустить.
<code>EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
+
<code download>EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
 
FORMAT Link down on interface $4.  Admin state: $2.  Operational state: $3
 
FORMAT Link down on interface $4.  Admin state: $2.  Operational state: $3
 
EXEC /usr/share/nagios3/plugins/eventhandlers/submit_check_result $R $4 1 "$Fz"
 
EXEC /usr/share/nagios3/plugins/eventhandlers/submit_check_result $R $4 1 "$Fz"
Строка 140: Строка 140:
 
</code>
 
</code>
 
После того как поравили все конфиги осталось сдделать небольшую правку в скрипте '''submit_check_result''' иначе не взлетит :-) а именно поменять в самой первой строке '''#!/bin/sh''' на '''#!/bin/bash'''
 
После того как поравили все конфиги осталось сдделать небольшую правку в скрипте '''submit_check_result''' иначе не взлетит :-) а именно поменять в самой первой строке '''#!/bin/sh''' на '''#!/bin/bash'''
<code>#!/bin/bash
+
<code lang='bash'>#!/bin/bash
 
#
 
#
 
# SUBMIT_CHECK_RESULT
 
# SUBMIT_CHECK_RESULT
Строка 148: Строка 148:
 
# This script will write a command to the Nagios command...</code>
 
# This script will write a command to the Nagios command...</code>
 
Теперь перезапускаем сервисы
 
Теперь перезапускаем сервисы
<code>service snmptrapd restart
+
<code lang='bash'>service snmptrapd restart
 
service snmptt restart</code>
 
service snmptt restart</code>
 
Для тестовых целей в Nagios был нарисован следующий конфиг:
 
Для тестовых целей в Nagios был нарисован следующий конфиг:
<code>define service{
+
<code lang='INI' download>define service{
 
   name                    snmptrap-service
 
   name                    snmptrap-service
 
   use                    generic-service
 
   use                    generic-service

Версия 09:35, 10 февраля 2016

Все действия из этой статьи выполнялись под Debian 8.3

Установка Nagios

Здесь все просто, ставить будем из репозитариев.

  1. aptitude install nagios3

Прикручиваем графики

Сперва ставим необходимые пакеты

  1. aptitude install rrdtool librrds-perl gcc make

Собираем из исходников PNP4Nagios

  1. wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.25.tar.gz
  2. tar -xzf ./pnp4nagios-0.6.25.tar.gz
  3. cd ./pnp4nagios-0.6.25
  4. ./configure
  5. make
  6. make fullinstall

Инсталятор расчитан на HTTPD в нашем случае Apache2, поэтому переносим конфиг на место, включаем его в apache и подчищаем мусор. Также в конфиге необходимо исправить параметр AuthUserFile и указать путь к реальному файлу авторизации, в нашем случае /etc/nagios3/htpasswd.users

  1. mv /etc/httpd/conf.d/pnp4nagios.conf /etc/apache2/conf-available/
  2. rd /etc/httpd/conf.d
  3. rd /etc/httpd
  4. a2enconf pnp4nagios
  5. service apache2 reload

Теперь браузером заходим http://address-nagios/pnp4nagios и проверяем все ли в порядке, в моем случае необходимо было включить mod_rewrite в apache и установить php-gd

  1. aptitude install php5-gd
  2. a2enmod rewrite
  3. service apache2 restart

Обновляем в браузере страницу, убеждаемся что все в порядке и продолжаем.

  1. mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/old_install.php
  2. cp ./source_php4nagios/contrib/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi

Осталось настроить Nagios. В Nagios.cfg выставляем следующие параметры:

  1. process_performance_data=1
  2.  
  3. #
  4. # service performance data
  5. #
  6. service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
  7. service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
  8. service_perfdata_file_mode=a
  9. service_perfdata_file_processing_interval=15
  10. service_perfdata_file_processing_command=process-service-perfdata-file
  11.  
  12. #
  13. # host performance data starting with Nagios 3.0
  14. #
  15. host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
  16. host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
  17. host_perfdata_file_mode=a
  18. host_perfdata_file_processing_interval=15
  19. host_perfdata_file_processing_command=process-host-perfdata-file

В конфиг commands.cfg добавляем следующее:

  1. define command{
  2. command_name process-service-perfdata-file
  3. command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata
  4. }
  5.  
  6. define command{
  7. command_name process-host-perfdata-file
  8. command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata
  9. }

Пишем шаблоны с графиками для сервисов и хостов.

Download Code
  1. define host {
  2. name host-pnp
  3. action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
  4. register 0
  5. }
  6.  
  7. define service {
  8. name srv-pnp
  9. action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
  10. register 0
  11. }

Осталось назначить шаблоны нужным хостам и сервисам, например так:

Download Code
  1. define host{
  2. use linux-server,host-pnp ; Name of host templates to use
  3. ; This host definition will inherit all variables that are defined
  4. ; in (or inherited by) the linux-server host template definition.
  5. host_name localhost
  6. alias localhost
  7. address 127.0.0.1
  8. }
  9. define service{
  10. use local-service,srv-pnp ; Name of service template to use
  11. host_name localhost
  12. service_description PING
  13. check_command check_ping!100.0,20%!500.0,60%
  14. }

ЗЫ: размеры всплывающих графиком можно поменять в /usr/local/pnp4nagios/etc/config_local.php параметр $conf['popup-width']

Прикручиваем SNMP Traps

Устанавливаем необходимые пакеты и добавляем пользователя snmptt в группу nagios чтобы иметь возможность писать в nagios.cmd

  1. aptitude install snmptt snmptrapd
  2. adduser snmptt nagios

В /etc/snmp/snmp.conf добавляем параметр printNumericOids 1 чтобы snmptrapd не осуществлял трансляцию OID-ов в текстовый формат, в итоге содержание файла следующее

  1. # As the snmp packages come without MIB files due to license reasons, loading
  2. # of MIBs is disabled by default. If you added the MIBs you can reenable
  3. # loading them by commenting out the following line.
  4. mibs :
  5. printNumericOids 1
  6.  

В конфиг /etc/snmp/snmptrapd.conf в конец добавляем

  1. traphandle default /usr/sbin/snmptthandler
  2. disableAuthorization yes

Переходим к /etc/snmp/snmptt.ini и приводим параметры в соответствие со списком:

  1. mode = daemon
  2. dns_enable = 1
  3. strip_domain = 1
  4. daemon_fork = 1
  5. sleep = 1
  6. exec_enable = 1

При установке snmptt устанавливается пример конфигурации snmptt.conf для тестовых целей поравим его, нас интересуют события linkUp и linkDown
FORMAT - описывает формат строки которая будет писаться в логи.
EXEC - скрипт который необходимо исполнить
$R - имя хоста от которого пришел трап
$Fz - распарсенная и обработанная строка из FORMAT
Блок SDESC - EDESC информационный и его вообще можно опустить.

Download Code
  1. EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
  2. FORMAT Link down on interface $4. Admin state: $2. Operational state: $3
  3. EXEC /usr/share/nagios3/plugins/eventhandlers/submit_check_result $R $4 1 "$Fz"
  4. SDESC
  5. A linkDown trap signifies that the SNMP entity, acting in
  6. an agent role, has detected that the ifOperStatus object for
  7. one of its communication links is about to enter the down
  8. state from some other state (but not from the notPresent
  9. state). This other state is indicated by the included value
  10. of ifOperStatus.
  11. EDESC
  12. #
  13. #
  14. #
  15. EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
  16. FORMAT Link up on interface $4. Admin state: $2. Operational state: $3
  17. EXEC /usr/share/nagios3/plugins/eventhandlers/submit_check_result $R $4 0 "$Fz"
  18. SDESC
  19. A linkUp trap signifies that the SNMP entity, acting in an
  20. agent role, has detected that the ifOperStatus object for
  21. one of its communication links left the down state and
  22. transitioned into some other state (but not into the
  23. notPresent state). This other state is indicated by the
  24. included value of ifOperStatus.
  25. EDESC
  26.  

После того как поравили все конфиги осталось сдделать небольшую правку в скрипте submit_check_result иначе не взлетит :-) а именно поменять в самой первой строке #!/bin/sh на #!/bin/bash

  1. #!/bin/bash
  2. #
  3. # SUBMIT_CHECK_RESULT
  4. # Written by Ethan Galstad (egalstad@nagios.org)
  5. # Last Modified: 02-18-2002
  6. #
  7. # This script will write a command to the Nagios command...

Теперь перезапускаем сервисы

  1. service snmptrapd restart
  2. service snmptt restart

Для тестовых целей в Nagios был нарисован следующий конфиг:

Download Code
  1. define service{
  2. name snmptrap-service
  3. use generic-service
  4. register 0
  5. service_description SNMP TRAP
  6. is_volatile 1
  7. check_command check-host-alive
  8. max_check_attempts 1
  9. normal_check_interval 0
  10. retry_check_interval 1
  11. passive_checks_enabled 1
  12. notification_interval 31536000
  13. }
  14.  
  15. define host{
  16. use generic-host ; Name of host template to use
  17. host_name cisco7200
  18. alias cisco7200
  19. address 192.168.1.222
  20. }
  21.  
  22.  
  23. define service{
  24. host_name cisco7200
  25. use snmptrap-service
  26. }
  27.  
  28. define service{
  29. host_name cisco7200
  30. use snmptrap-service
  31. service_description FastEthernet0/0
  32. }
  33.  
  34. define service{
  35. host_name cisco7200
  36. use snmptrap-service
  37. service_description FastEthernet0/1
  38. }

На тестовой железке административно погасили один порт, в логах видим:

  1. Feb 9 14:57:41 nagios snmptrapd[746]: 2016-02-09 14:57:41 cisco7200 [UDP: [192.168.1.222]:53492->[192.168.1.6]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (25747) 0:04:17.47#011.1.3.6.1.6.3.1
  2. .1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.3#011.1.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2#011.1.3.6.1.2.1.2.2.1.7.2 = INTEGER: 2#011.1.3.6.1.2.1.2.2.1.8.2 = INTEGER: 2#011.1.3.6.1.2.1.2.2.1.2.2 = STRING:
  3. "FastEthernet0/1"#011.1.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6#011.1.3.6.1.4.1.9.2.2.1.1.20.2 = STRING: "administratively down"
  4. Feb 9 14:57:41 nagios snmptt[779]: .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" cisco7200 - Link down on interface FastEthernet0/1. Admin state: 2. Operational state: 2
  5. Feb 9 14:57:41 nagios nagios3: EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;cisco7200;FastEthernet0/1;1;Link down on interface FastEthernet0/1. Admin state: 2. Operational state: 2
  6. Feb 9 14:57:42 nagios nagios3: PASSIVE SERVICE CHECK: cisco7200;FastEthernet0/1;1;Link down on interface FastEthernet0/1. Admin state: 2. Operational state: 2
  7. Feb 9 14:57:42 nagios nagios3: SERVICE ALERT: cisco7200;FastEthernet0/1;WARNING;HARD;1;Link down on interface FastEthernet0/1. Admin state: 2. Operational state: 2
  8. Feb 9 14:57:42 nagios nagios3: SERVICE NOTIFICATION: root;cisco7200;FastEthernet0/1;WARNING;notify-service-by-email;Link down on interface FastEthernet0/1. Admin state: 2. Operational stat
  9. e: 2

Соответственно в интерфейсе Nagios сервис FastEthernet0/1 перешел в статус Warning, теперь поднимем порт на железке, в логах:

  1. Feb 9 14:58:16 nagios snmptrapd[746]: 2016-02-09 14:58:16 cisco7200 [UDP: [192.168.1.222]:53492->[192.168.1.6]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (28402) 0:04:44.02#011.1.3.6.1.6.3.1
  2. .1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.4#011.1.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2#011.1.3.6.1.2.1.2.2.1.7.2 = INTEGER: 1#011.1.3.6.1.2.1.2.2.1.8.2 = INTEGER: 1#011.1.3.6.1.2.1.2.2.1.2.2 = STRING:
  3. "FastEthernet0/1"#011.1.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6#011.1.3.6.1.4.1.9.2.2.1.1.20.2 = STRING: "Keepalive OK"
  4. Feb 9 14:58:16 nagios snmptt[779]: .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" cisco7200 - Link up on interface FastEthernet0/1. Admin state: 1. Operational state: 1
  5. Feb 9 14:58:16 nagios nagios3: EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;cisco7200;FastEthernet0/1;0;Link up on interface FastEthernet0/1. Admin state: 1. Operational state: 1
  6. Feb 9 14:58:22 nagios nagios3: PASSIVE SERVICE CHECK: cisco7200;FastEthernet0/1;0;Link up on interface FastEthernet0/1. Admin state: 1. Operational state: 1
  7. Feb 9 14:58:22 nagios nagios3: SERVICE ALERT: cisco7200;FastEthernet0/1;OK;HARD;1;Link up on interface FastEthernet0/1. Admin state: 1. Operational state: 1
  8. Feb 9 14:58:22 nagios nagios3: SERVICE NOTIFICATION: root;cisco7200;FastEthernet0/1;OK;notify-service-by-email;Link up on interface FastEthernet0/1. Admin state: 1. Operational state: 1

В интерфейсе Nagios сервис FastEthernet0/1 перешел в статус OK, таким образом достигнута корреляция событий.