Використання системи моніторингу Nagios

Nagios – система моніторингу з відкритим початковим кодом, призначена для постійного спостереження за станом сервісів, комп’ютерів та активного мережевого обладнання. За допомогою цієї системи можливо організувати перевірку доступності вузлів комп’ютерної мережі (хостів), показників роботи комп’ютерів та працездатності функціонуючих на них програм (сервісів): поштових, веб, проксі серверів, систем резервного копіювання тощо. Можливо також інформувати адміністраторів та користувачів про порушення нормальної роботи об’єктів моніторингу за допомогою поштових і SMS повідомлень, повідомлень на пейджер, або звукових сигналів.

Спочатку система Nagios була розроблена для операційної системи (ОС) Linux, проте зараз існують версії для інших Unix-подібних операційних систем. Також є програма-клієнт для збору показників роботи комп’ютерів під керуванням ОС Windows.

Для здійснення перевірок Nagios використовує зовнішні модулі. Існує велика кількість модулів, зокрема є модулі для перевірки завантаження процесору, використання оперативної пам’яті, вільного простору на вінчестері, стану різноманітних сервісів, температури в приміщенні та інші. Також можливо створювати власні модулі мовою командної оболонки або Perl.

Можливості системи настільки великі, що розглянути їх всі в одній статті практично неможливо. Тому у пропонованій статті детально розглянутий тільки окремий випадок використання Nagios для моніторингу невеликої мережі, що складається з кількох робочих станцій під керуванням ОС Windows та серверу з ОС FreeBSD, на якому функціонують проксі, веб, FTP сервери, система резервного копіювання та власне система Nagios. Значно більше інформації про можливості цієї системи моніторингу можна отримати зі спеціальної літератури [1, 2], офіційної документації або з численних публікацій в Інтернеті.

Інсталяція

В операційній системі FreeBSD систему Nagios краще збирати з колекції портів:

cd /usr/ports/net-mgmt/nagios
make install clean

Разом з Nagios буде також встановлений пакет модулів nagios-plugins. На момент створення статті останніми версіями Nagios та nagios-plugins були відповідно 3.0.6 та 1.4.13. В якості операційної системи була використана ОС FreeBSD 7.0.

Система Nagios має веб-інтерфейс, тому для повноцінної роботи з нею потрібний web -сервер Apache, у головному конфігураційному файлі якого, /usr/local/etc/apache/httpd.conf потрібно додати:

<Directory /usr/local/www/nagios >
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd/nagios.users
Require valid-user
</Directory>

<Directory /usr/local/www/nagios/cgi-bin >
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd/nagios.users
Require valid-user
</Directory>

ScriptAlias /nagios/cgi-bin/ /usr/local/www/nagios/cgi-bin/
Alias /nagios/ /usr/local/www/nagios/

Потім створюємо файл паролів та вводимо користувачів, наприклад admin і user :

htpasswd -c /usr/local/etc/nagios/nagios.users admin
htpasswd /usr/local/etc/nagios/nagios.users user

Після чого, необхідно перезапустити Apache. Відтепер веб-інтерфейс Nagios доступний в локальній мережі за адресою http://<адреса серверу>/nagios/

Файли конфігурації

Після завершення інсталяції в директорії /usr/local/etc/nagios будуть записані файли nagios.cfg-sample, cgi.cfg-sample, resource.cfg-sample, та тека objects з файлами commands.cfg-sample, contacts.cfg-sample, localhost.cfg-sample, printer.cfg-sample, switch.cfg-sample, templates.cfg-sample, timeperiods.cfg-sample які є зразками конфігураційних файлів Nagios. Слід зазначити, що назви та кількість цих файлів різняться для різних версій програми, крім того, користувач має змогу самостійно визначати кількість, розташування та назви конфігураційних файлів. По-перше, необхідно перейменувати ці файли, прибравши з їх назв суфікс "–sample". Не завадить зробити резервні копії конфігураційних файлів, або в самих файлах робити закоментовані копії параметрів, які будуть змінені. Численні параметри, визначенні в конфігураційних файлах, мають детальні коментарі, тому далі розглянуті тільки ті параметри, які зазнали змін.

Головним конфігураційним файлом є nagios.cfg. Інші конфігураційні файли приєднуються до головного за допомогою параметру cfg_file. Можливо самостійно створювати конфігураційні файли для будь-яких об’єктів моніторингу та включати їх до nagios.cfg. Спочатку в цьому файлі варто змінити тільки формат дати, який задається параметром date_format. За замовчанням встановлено американський формат. Для переходу на більш звичний європейський необхідно задати:

date_format=euro.

В файлі cgi.cfg визначаються користувачі системи Nagios та їх права. Наприклад:

authorized_for_system_information=admin,user
authorized_for_configuration_information= admin,user
authorized_for_system_commands= admin
authorized_for_all_services= admin,user
authorized_for_all_hosts= admin,user
authorized_for_all_service_commands= admin
authorized_for_all_host_commands= admin

В цьому прикладі користувач user має право тільки на перегляд інформації, а користувач admin крім перегляду, має право на виконання команд.

Після закінчення редагування конфігураційних файлів можна запустити програму:

/usr/local/etc/rc.d/nagios start

Система Nagios функціонує як фонова програма (демон). Для автоматичного запуску її при завантаженні операційної системи необхідно в конфігураційний файл /etc/rc.conf додати параметр nagios_enable="YES".

Використання шаблонів

У конфігураційному файлі templates.cfg описані шаблони об’єктів моніторингу. Використання шаблонів дозволяє створювати описи об’єктів з подібними властивостями та успадковувати властивості інших об’єктів.

Одразу після встановлення Nagios, в файлі присутні загальні шаблони контактів, хостів, принтерів, мережевих комутаторів, сервісів, а також шаблони для комп’ютерів з ОС FreeBSD, Windows та шаблон локального сервісу. При необхідності можливо створювати власні шаблони, які можуть успадковувати та змінювати властивості існуючих.

Наприклад, шаблон комп’ютера з ОС FreeBSD має наступний вигляд:

define host{
name freebsd–server ; Назва шаблону
use generic–host ; Шаблон, властивості якого успадковує даний шаблон
check_period 24x7 ; Період, протягом якого виконуються перевірки. Описаний у файлі timeperiods.cfg
check_interval 5 ; Інтервал у хвилинах між нормальними перевірками
retry_interval 1 ; Інтервал між повторними перевірками, якщо нормальна перевірка завершилася невдало
max_check_attempts 10 ; Максимальна кількість повторних перевірок
check_command check–host–alive ; Команда перевірки доступності комп’ютера. Описана у файлі commands.cfg
notification_period workhours ; Період часу, протягом якого, адміністратори можуть отримувати повідомлення
notification_interval 120 ; Інтервал, після якого буде відправлено повторне повідомлення якщо сервіс так і не відновився
notification_options d,u,r ; Перелік подій, при настанні яких будуть відправлені повідомлення
contact_groups admins ; Група, яка буде отримувати повідомлення. Описана у файлі contacts.cfg
register 0 ; Показник приналежності до реально існуючих об’єктів (1 – реальний об’єкт, 0 – шаблон
}

Для хостів можливо відправляти повідомлення при настанні наступних станів:
d – не працює (DOWN);
u – недосяжний (UNREACHABLE);
r – працездатність відновлено (UP);
f – сервіс змінює свій стан занадто часто (FLAPPING);
n – не сповіщувати (NONE).

Для сервісів передбачені наступні ситуації:
w – застереження (WARNING);
u – невідомий (UNKNOWN);
c – критичний (CRITICAL);
r – працездатність відновлено (UP);
f – сервіс змінює свій стан занадто часто (FLAPPING);
s – запланована бездіяльність (SCHEDULED DOWNTIME);
n – не сповіщувати (NONE).

Моніторинг локального комп’ютера

Типовий конфігураційний файл, призначений для моніторингу комп’ютера на якому встановлений Nagios, називається localhost.cfg та розташовується, як і решта файлів об’єктів контролю, в директорії /usr/local/etc/nagios/objects.

У цьому файлі, після встановлення, вже описані ім’я та адреса комп’ютера:

define host{
use freebsd-server ; Шаблон комп'ютера
host_name localhost ; Ім’я комп’ютера
alias localhost ; Псевдонім
address 127.0.0.1 ; Адреса
}

Група для цього комп’ютера:

define hostgroup{
hostgroup_name freebsd-servers ; Назва групи
alias FreeBSD Servers ; Псевдонім
members localhost ; Перелік комп’ютерів, які належать до цієї групи
}

Перевірка доступності комп’ютера:

define service{
use local-service ; Шаблон сервісу
host_name localhost ; Перелік комп’ютерів, для яких здійснюється перевірка
service_description PING ; Опис сервісу
check_command check_ping!100.0,20%!500.0,60% ; Ім’я та параметри команди, що використовується для перевірки сервісу. Описана у файлі commands.cfg
}

Перевірка дискового простору на кореневому розділі локальної машини:

define service{
use local-service
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!
}

Перевірка кількості користувачів, які в цей час зареєстровані в системі:

define service{
use local-service
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}

Перевірка кількості процесів, які в цей час виконуються на локальному комп’ютері:

define service{
use local-service
host_name localhost
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}

Перевірка навантаження на локальну машину:

define service{
use local-service
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}

Перевірка використання віртуальної пам'яті (swap):

define service{
use local-service
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}

Перевірка протоколу SSH:

define service{
use local-service
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}

Перевірка протоколу HTTP:

define service{
use local-service
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 0
}

Можливо, також, самостійно визначати об'єкти перевірки локального комп’ютера. Як приклад, далі розглянуто перевірку S.M.A.R.T. статусу жорсткого диску, стану системи резервного копіювання Bacula та проксі сервера Squid.

Для перевірки S.M.A.R.T. статусу жорсткого диску (S.M.A.R.T. – технологія оцінки стану жорсткого диска вбудованою апаратурою автодіагностики, а також механізм прогнозу часу виходу його з ладу) використовується модуль check_smartmon (http://www.nagiosexchange.org/cgi-bin/jump.cgi?ID=2169&view=File1;d=1). Після завантаження, його необхідно зберегти в директорії /usr/local/libexec/nagios та зробити виконуваним:

chmod +x usr/local/libexec/nagios/check_smartmon.

Для своєї роботи модуль check_smartmon потребує встановлений інтерпретатор мови Python, тому необхідно перевірити його наявність і за потреби встановити.

Далі, потрібно зібрати з порту утиліту smartmontools, яка зчитує дані про стан жорсткого диска:

cd /usr/ports/sysutils/smartmontools
make install clean

Також треба додати користувача nagios в групу operator, внісши відповідні зміни у файл /usr/group.

Опис сервісу перевірки S.M.A.R.T. статусу жорсткого диску додається в файл localhost.cfg:

define service{
use local-service
host_name localhost
service_description S.M.A.R.T. status disk 1
check_command check_smartmon!/dev/ad0
}

Команда check_smartmon додається в файл commands.cfg:

define command{
command_name check_smartmon
command_line $USER1$/check_smartmon -d $ARG1$
}

Тепер після перезапуску демона nagios (/usr/local/etc/rc.d/nagios restart) в переліку сервісів для локального комп’ютера з’явиться пункт S.M.A.R.T. status disk 1 з результатами перевірки.

Для перевірки стану системи резервного копіювання Bacula використовується модуль nagios-check_bacula, який збирається з колекції портів (/usr/local/ports/net-mgmt/nagios-check_bacula). Далі, у файлі commands.cfg необхідно додати команду, яка викликає встановлений модуль:

define command{
command_name check_bacula
command_line $USER1$/check_bacula -H $HOSTADDRESS$ D $ARG1$ -M $ARG2$ -K $ARG3$
}

Та додати в конфігураційний файл localhost.cfg опис сервісів для моніторингу демонів Bacula: Директора (dir), Зберігача (sd) та Клієнта (fd):

define service{
use local-service
host_name localhost
service_description Bacula Director
check_command check_bacula!dir!monitor!'password'
}
define service{
use local-service
host_name localhost
service_description Bacula Storage
check_command check_bacula!sd!monitor!'password'
}
define service{
use local-service
host_name localhost
service_description Bacula Client
check_command check_bacula!fd!monitor!'password'
}

де monitor — ім’я монітора Bacula; password — пароль доступу до демона.

Для перевірки проксі сервера Squid використовується модуль check_squid.pl, який можна знайти на сайті http://www.nagiosexchange.org. Після завантаження, модуль потрібно зберегти в директорії /usr/local/libexec/nagios та зробити виконуваним. Модуль написаний мовою Perl, тому потребує встановленого інтерпретатора цієї мови. Також, необхідно у модулі check_squid.pl вказати вірний шлях до модулів Nagios (use lib "/usr/local/libexec/nagios").

У файлі commands.cfg необхідно створити команду, яка викликає встановлений модуль:

define command{
command_name check_squid
command_line $USER1$/check_squid.pl $ARG1$ $ARG2$ $ARG3$ $ARG4$
}

Опис сервіса для моніторингу Squid додається в конфігураційний файл localhost.cfg:

define service{
use local-service
host_name localhost
service_description SQUID PROXY
check_command check_squid!url!proxy.mydomain!3128!code
}

Де url — повна адреса будь-якого сайту, наприклад http://www.google.com.ua; proxy.mydomain — адреса проксі серверу; code — код статусу HTTP, який поверне Squid: у разі заборони доступу до Інтернет з локального комп’ютера через проксі сервер код дорівнює 403; якщо доступ дозволений — то 200.

Моніторинг комп’ютерів з ОС Windows

Для моніторингу комп’ютерів з ОС Windows призначена програма NSClient++ (http://trac.nakednuns.org/nscp/). Ця програма функціонує в якості служби Windows, та дозволяє отримувати інформацію про використання оперативної пам’яті, завантаження процесору, використання дискового простору, стану служб Windows та прикладних програм. На час створення статті, останньою була версія програми 0.3.6-RC4.

Як приклад, розглянуто моніторинг двох робочих станцій. Необхідно стежити за їх доступністю, часом безперервної роботи, завантаженням процесору, використанням оперативної пам'яті та дискового простору, та станом клієнта системи архівування Bacula і противірусної програми Касперського. Для цього потрібно створити конфігураційний файл windows.cfg наступного змісту:

# Ім’я та адреса першого комп’ютера
define host{
use windows-servers
host_name win1
alias Programmer
address 192.168.1.21
}
# Ім’я та адреса другого комп’ютера
define host{
use windows-servers
host_name win2
alias Manager
address 192.168.1.22
}
# Група для комп’ютерів з ОС Windows
define hostgroup{
hostgroup_name windows-servers
alias Windows
members win1,win2
}
# Перевірка доступності локального комп’ютера
define service{
use generic-service
host_name win1,win2
service_description PING
} check_command check_ping!100.0,20%!500.0,60% -4
# Перевірка часу безперервної роботи
define service{
use generic-service
host_name win1,win2
service_description Uptime
check_command check_nt!UPTIME
}
# Перевірка завантаження процесору
define service{
use generic-service
host_name win1,win2
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}
# Перевірка використання оперативної пам’яті
define service{
use generic-service
host_name win1,win2
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90
}
# Перевірка використання дискового простору (диск С)
define service{
use generic-service
host_name win1,win2
service_description Disc C: space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90 ;
}
# Перевірка стану клієнта системи архівування Bacula
define service{
use generic-service
host_name programmer
service_description Bacula Client
check_command check_nt!SERVICESTATE!-d SHOWALL -l Bacula-fd
}
# Перевірка стану противірусної програми Касперського
define service{
use generic-service
host_name programmer
service_description Kaspersky
check_command check_nt!SERVICESTATE!-d SHOWALL -l AVP
}

Для включення цього файлу, необхідно в основному конфігураційному файлі nagios.cfg прибрати коментар з рядка cfg_files=/usr/local/etc/nagios/objects/windows.cfg

Після встановлення NSClient++ (за замовчанням в каталозі C:\Program Files\NSClient++), необхідно змінити файл конфігурації NSC.ini, прибравши в секції [modules] коментарі з рядків CheckSystem.dll, CheckDisk.dll, NSClientListener.dll та в секції [Settings] коментар з рядка allowed_hosts=, вказавши адресу комп’ютера з Nagios, або порожнє поле, якщо доступ дозволений з будь-якого комп’ютера. Після цього потрібно перезапустити службу NSClientpp (Nagios).

Висновки

Використання системи моніторингу з відкритим початковим кодом Nagios дає змогу цілодобову контролювати роботу обладнання та програмного забезпечення як для окремого комп’ютера, так і для локальної мережі. Завдяки цьому, значно збільшується надійність системи та ефективність її використання.

Література

  1. Josephsen D. Building a Monitoring Infrastructure with Nagios. Prentice Hall, 2007. -264 p
  2. Barth W. Nagios: System and Network Monitoring. No Starch Press, 2008. -720 p

© Інформаційні технології. Аналітика , Рідна Мережа