Nagios графики и прием SNMP Traps

Материал из IN-TON
Перейти к: навигация, поиск

Все действия из этой статьи выполнялись под 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. }

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

  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. }

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

  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. exec_enable = 1

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

  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 был нарисован следующий конфиг:

  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, таким образом достигнута корреляция событий.