Установка и настройка Nagios. Мониторинг Windows-хостов и Cisco. Настройка уведомлений по email
Invite pending

Установка и настройка Nagios 3
Требования
Установка и настройка Nagios 3 в Ubuntu Server 11.04. Мониторинг Windows и Cisco.
ОС: Ubuntu Server 11.04
Система мониторинга: Nagios 3
Требуется мониторить: Windows-сервера, Cisco 2960, Cisco 3750
Установка
Заходим в консоль с правами root:
#sudo su
Вводим свой пароль. Далее скачиваем необходимые нам пакеты:
#apt-get install apache2 php5 nagios3
Во время установки он задаст несколько вопросов в зависимости от вашей конфигурации сервера и попросит ввести пароль для учетной записи nagiosadmin.Теперь после окончания установки вы можете зайти на веб-интерфейс вашего Nagios. Для примера наш IP 192.168.0.1:
http://192.168.0.1/nagios3/
Настройка Nagios для мониторинга Windows-хостов
Все необходимые конфигурационные файлы лежат в папке /etc/nagios3/conf.d/. А глобальный конфигурационный файл nagios и файл команд лежат здесь /etc/nagios3/ и называется nagios.cfg и commands.cfg соответственно.
Чтобы мониторить windows-хосты нам необходимо подключить к nagios плагин check_nt, добавить необходимые компьютеры, которые мы хотим мониторить, в конфигурационные файлы и настроить на этих же компьютерах NSClient++.
Для начала настроим NSClient++.
Скачать его можно отсюда www.nsclient.org/nscp/downloads. Есть как 32-разрядная, так и 64-разрядная версии. Скачиваем и запускаем установку. Далее мы со всем соглашаемся и в окошке, где необходимо вписать информацию вводим ip нашего nagios-сервера, пароль и ставим везде галочки, кроме WMI.

Нажимаем Next и заканчиваем установку.
Идём в папку C:\Program Files\NSClient++ и открываем для редактирования файл NSC.ini. Здесь нам нужно изменить некоторые строчки:
— вводим наш пароль:
;# PASSWORD
; This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
password=12345
— вводим хост:
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
; If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
; The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
allowed_hosts=192.168.0.1/255.255.255.0
— и здесь:
;# USE THIS FILE
; Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1
; the registry will be used instead.
use_file=1
allowed_hosts=192.168.0.1
password=12345
Далее идём в службы, открываем NSClient++ и ставим галочку напротив «Разрешить взаимодействие с рабочим столом» на вкладке «Вход в систему».

Теперь нам нужно запустить клиент. Из командной строки:
nsclient++ /start
Идем в диспетчер задач и проверяем запущен ли клиент.

На этом настройка NSClient++ закончена.
Теперь нам необходимо настроить Nagios.
Идем в файл /etc/nagios3/commands.cfg и добавляем следующие строчки:
# check_nt command definition
define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s 12345 -v $ARG1$ $ARG2$
}
Этой строкой мы включаем плагин check_nt. Не забываем указать наш пароль, который мы вводили при настройке NSClient++ (12345).
После этого добавим необходимый нам хост. Для этого создадим файлик myhosts.cfg в папке
/etc/nagios3/conf.d/. Дадим ему необходимые права для пользователя nagiosadmin. Запишем в нем следющее:
# WINDOWS SERVERS
define host{
host_name windows-server
alias WINDOWS-SERVER
address 192.168.0.2
use generic-host
}
Так как хост у нас предполагается быть не один, то создадим группу для всех windows-хостов. Сделаем это в файле /etc/nagios3/conf.d/hostgroups_nagios2.cfg
# WINDOWS SERVERS
define hostgroup {
hostgroup_name windows-servers
alias WINDOWS SERVERS
members windows-server, windows-server2
}
Теперь нам необходимо добавить сервисы, которые будут мониториться. Делается это в файле /etc/nagios3/conf.d/services_nagios2.cfg
— проверка NSClient++:
# NSCLIENT
define service {
hostgroup_name windows-servers
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
use generic-service
}
— проверка пинга до хоста:
# PING
define service {
hostgroup_name windows-servers
service_description PING
check_command check_ping!100.0,20%!500.0,60%
use generic-service
}
— загрузка процессора:
# CPU
define service {
hostgroup_name windows-servers
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
use generic-service
}
— использование памяти:
# MEMORY
define service {
hostgroup_name windows-servers
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90
use generic-service
}
— распределение места на системном диске:
# DISK SPACE
define service {
hostgroup_name windows-servers
service_description C: Drive Space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
use generic-service
}
Теперь перезапускаем Nagios:
# /etc/init.d/nagios3 restart
Заходим в веб-интерфейс nagios и по нашему хосту видим следующую инфу:

Настройка Nagios для мониторинга CISCO (2960 и 3750)
Для начала нам нужно настроить SNMP на самой CISCO. Заходим в консоль и прописываем следующее:
#snmp-server community RO-COMMUNITY RO
#snmp-server trap-source Vlan1
#snmp-server source-interface informs Vlan1
#snmp-server location LOCATION
#snmp-server contact admin@admin.com
#snmp-server host 192.168.0.1 RO-COMMUNITY
#exit
Теперь проверим работает ли snmp следующей командой с хоста, где стоит Nagios:
# snmpwalk –v2c –c RO-COMMUNITY 192.168.0.4
192.168.0.4 – ip нашей Cisco 2960.
После этой команды должно пойти огромное количество записей по вашей Cisco. Если ругается, то скорее всего не установлен пакет snmpd и snmp-utils. Или следует проверять конфиг Cisco.
Итак, мы убедились, что все работает. Идём подключать плагин check_snmp. Лезем в файлик commands.cfg в /etc/nagios3/ и вбиваем следующее:
# check_snmp command definition
define command{
command_name check_snmp
command_line usr/lib/nagios/plugins/check_snmp -H $HOSTADRESS$ $ARG1$
}
Добавляем нужные нам хосты в тот же файлик myhosts.cfg
define host{
host_name CISCO 2960
alias CISCO 2960
address 192.168.0.4
use generic-host
}
Можно также создать группу, если свитчей много.
Описываем необходимые нам сервисы:
— пинг:
# CISCO 2960
# PING
define service {
host_name cisco 2960
service_description PING
check_command check_ping!100.0,20%!500.0,60%
use generic-service
}
— аптайм:
# UPTIME
define service {
host_name cisco 2960
service_description UPTIME
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.2.1.1.3.0 -l "Uptime is"
use generic-service
}
— порты FastEthernet с 1 по 6:
# PORT STATUS for SWITCHES-24
define service {
host_name cisco 2960
service_description FastEthernet Port 1-6 Link Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o ifOperStatus.10001 -r 1 -m RFC1213-MIB, -o ifOperStatus.10002 -r 1 -m RFC1213-MIB, -o ifOperStatus.10003 -r 1 -m RFC1213-MIB, -o ifOperStatus.10004 -r 1 -m RFC1213-MIB, -o ifOperStatus.10005 -r 1 -m RFC1213-MIB, -o ifOperStatus.10006 -r 1 -m RFC1213-MIB
use generic-service
}
Прошу обратить внимание, что на гигабитных свитчах номер портов указывается, как 10001, 10002. А гигабитные порты — 10101, 10102.
— порты GigabitEthernet отдельно:
define service {
host_name cisco 2960
service_description GigabitEthernet Port 1 Link Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o ifOperStatus.10101 -r 1 -m RFC1213-MIB
use generic-service
}
define service {
host_name cisco 2960
service_description GigabitEthernet Port 2 Link Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o ifOperStatus.10102 -r 1 -m RFC1213-MIB
use generic-service
}
— FAN:
define service {
host_name cisco 2960
service_description FAN Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.4.1.9.9.13.1.4.1.2.1004 -l "Fan Status"
use generic-service
}
— питание:
define service {
host_name cisco 2960
service_description Power Supply Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.4.1.9.9.13.1.5.1.2.1003 -l "Power Supply Status"
use generic-service
}
— температура:
define service {
host_name cisco 2960
service_description Temperature Status
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.4.1.9.5.1.2.13.0 -l "Temp Status"
use generic-service
}
— процессор:
define service {
host_name cisco 2960
service_description CPU Load
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.4.1.9.9.109.1.1.1.1.5.1 -w 90 -c 95 -u % -l "CPU Load"
use generic-service
}
— использование памяти:
define service {
host_name cisco 2960
service_description Memory Usage
check_command check_snmp! -H 192.168.0.4 -C RO-COMMUNITY -o .1.3.6.1.4.1.9.9.48.1.1.1.5.1 -l "Mem Used"
use generic-service
}
Теперь перезапускаем Nagios и видим примерную картину по нашей железке. Для себя я добавил еще промежутки портов.

В промежутке портов он сообщает состояние CRITICAL, даже если один из портов находится в состоянии «down».
В вышеуказанных сервисах прописаны oid’ы для Cisco 2960, которые мне в итоге подошли и для 3750. Необходимые вам oid’s можно найти на сайте Cisco или с помощью, например, MIB Browser.
Настройка уведомлений по email
Для начала нужно поставить следующие пакеты:
#apt-get install libio-socket-ssl-perl libnet-ssleay-perl perl
#apt-get install sendemail
Создадим для nagios почтовый ящик, например на gmail.
Теперь в файле commands.cfg пропишем следующее:
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -f username@gmail.com -t yourmail@gmail.com -u "NAGIOS WARNING" -s smtp.gmail.com -o tls=yes -xu username -xp password -m
}
# 'notify-host-by-emailz' command definition
define command{
command_name notify-host-by-emailz
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -f username@gmail.com -t yourmail@gmail.com -u "NAGIOS WARNING" -s smtp.gmail.com -o tls=yes -xu username -xp password -m
}
username@gmail.com – созданный почтовый ящик
yourmail@gmail.com – ящик, куда будут приходить оповещения.
username – логин от созданного почтового ящика
password – пароль от созданного почтового ящика
Теперь создадим нужный нам контакт в файле /etc/nagios3/conf.d/contacts_nagios2.cfg
define contact{
contact_name user
alias Root
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email username@gmail.com
}
Перезапускаем Nagios. Настройка закончена.