Nagios 4 на ЦентОС 7 – мониторинг Виндовс хоста (3/3)
Настављамо са изменама у конфигурацији Nagios-а. Други, претходни део овог упутства можете видети овде а за основну инсталацију Nagios Core и Nagios plugin видети упутство на овде. У овом трећем и завршном делу туторијала дефинисаћемо команде и сервисе које ћемо надгледати.
Пре него што дефинишемо команде и помоћу њих и сервисе које желимо да надгледамо прво да направимо списак шта би желели да надгледамо:
- Ping – аутоматски са додавањем хоста имамо и надгледање и провера пинг хоста
- Провера FTP порта 21 – FTP сервер (заменом у команди 21 са било којим портом можемо да надгледамо да ли је отворен било који порт који нас занима)
- Провера 1 Виндовс процеса
- Провера 1 Виндовс сервиса
- Заузетост процесора
- Заузетост меморије
- Заузетост C:\ партиције хард диска
- Провера EventLog-а на грешке у задњих X сати
За прве две одабране ставке већ постоје дефинисане команде у фајлу /usr/local/nagios/etc/objects/commands.cfg док је за остале потребно да преузмемо Nagios додатке и да их сместимо (или инсталирамо) на путању /usr/local/nagios/libexec/.
Прво да преузмемо следеће потребне Nagios додатке:
За проверу Виндовс процеса користимо следећи Nagios plugin са овог линка.
mkdir nagios-plugins cd nagios-plugins wget –O check_win_processes “https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=947/&cf_id=24” cp /root/nagios-plugins/check_win_processes /usr/local/nagios/libexec/ chown nagios /usr/local/nagios/libexec/check_win_processes chmod 777 /usr/local/nagios/libexec/check_win_processes
За проверу windows сервиса користимо сајт nagios.manubulon.com и додатак check_snmp_win.pl.
wget http://nagios.manubulon.com/check_snmp_win.pl cp /root/nagios-plugins/check_snmp_win.pl /usr/local/nagios/libexec/ chown nagios /usr/local/nagios/libexec/check_snmp_win.pl chmod 777 /usr/local/nagios/libexec/check_snmp_win.pl
За проверу заузетости CPU користимо сајт nagios.manubulon.com и додатак check_snmp_load.pl
wget http://nagios.manubulon.com/check_snmp_load.pl cp /root/nagios-plugins/check_snmp_load.pl /usr/local/nagios/libexec/ chmod 777 /usr/local/nagios/libexec/check_snmp_load.pl
За проверу заузетости меморије и заузетост партиције хард диска користимо сајт nagios.manubulon.com и додатак check_snmp_storage.pl
wget http://nagios.manubulon.com/check_snmp_storage.pl cp /root/nagios-plugins/check_snmp_storage.pl /usr/local/nagios/libexec/ chown nagios /usr/local/nagios/libexec/check_snmp_storage.pl chmod 777 /usr/local/nagios/libexec/check_snmp_storage.pl
• ДЕФИНИСАЊЕ КОМАНДИ
Крећемо са дефинисањем команди
cd /usr/local/nagios/etc/objects/
nano commands.cfg
Већ имамо дефинисану команду за проверу хоста преко пинга
# 'check-host-alive' command definition
define command{
command_name check-host-alive
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
}
…где је:
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- $USER1$ – ову променљиву смо дефинисали у фајлу resource.cfg и означава путању /usr/local/nagios/libexec/ где се налазе Nagios извршне команде
- -w 3000 0,80% – warning ако је одзив преко 3s или ако је 80% packet lost
- -c 5000 0,100% – critical ако је одзив преко 5s или ако имамо 100% packet lost
- -p број ICMP ECHO пакета који се шаљу
Дефинишемо команду за проверу TCP порта – (проверити да ли већ постоји)
У оквиру дела SAMPLE SERVICE CHECK COMMANDS додајемо следећу дефиницију:
# 'check_tcp' command definition
define command{
command_name check_tcp
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
}
Где је…
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- -p $ARG1$ $ARG2$ – број порта који проверавамо
Дефинишемо команду за проверу Виндовс процеса
У оквиру дела SAMPLE SERVICE CHECK COMMANDS додајемо следећу дефиницију:
define command {
command_name check_win_process
command_line $USER1$/check_win_processes $HOSTADDRESS$ $ARG1$ $ARG2$
}
Где је…
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- $ARG1$ – community string Windows Server-a
- $ARG2$ – тачно име процеса које проверавамо
Дефинишемо команду за проверу Виндовс сервиса
У оквиру дела SAMPLE SERVICE CHECK COMMANDS додајемо следећу дефиницију:
define command {
command_name check_win_servis
command_line $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$ -N $ARG2$
}
Где је…
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- $USER7$ – community string Windows Server-a
- -n – име сервиса под знацима навода
- -N – број колико се пута појављује сервис у Services
Дефинишемо команду за проверу заузетости CPU
У оквиру дела SAMPLE SERVICE CHECK COMMANDS додајемо следећу дефиницију:
# 'check_snmp_load_v1' command definition
define command{
command_name check_snmp_load_v1
command_line $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ $USER7$ -w $ARG1$ -c $ARG2$ $ARG3$
}
Где је
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- $USER7$ – community string Windows Server-a
- -w $ARG1$ – $ARG1$- warning број који изражава проценте
- -c $ARG2$ – $ARG2$ – critical број који изражава проценте
Дефинишемо команду за проверу заузетости меморије и заузетост партиције хард диска
У оквиру дела SAMPLE SERVICE CHECK COMMANDS додајемо следећу дефиницију:
# 'check_snmp_storage_v1' command definition
define command{
command_name check_snmp_storage_v1
command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ $USER7$ -m $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
}
Где је…
- $HOSTADDRESS$ – hostname или IP адреса хоста који се проверава
- $USER7$ – community string Windows Server-a
- -m $ARG1$ – arg1 је име шта надгледамо, почиње са специјалним знаком ^ и иза иде или лабела партиције за коју се проверава заузетост или име за коју меморију проверавамо заузетост (Virtual Memory, RealMemory, RAM) што дефинишемо у оквиру дефиниције самог сервиса
- -w $ARG2$ – $ARG2$- warning број који изражава проценте
- -c $ARG3$ – $ARG3$ – critical број који изражава проценте
Приказ дела фајла commands.cfg који смо мењали:

Провера рада команди из командне линије
Пре него што дефинишемо сервисе требало би да проверимо рад команди из командне линије. Одемо на путању где се налазе команде…
cd /usr/local/nagios/libexec/
# Provera pinga ./check_ping -H WinServer1 -w 3000.0,80% -c 5000.0,100% -p 5
WinServer1 – име нашег сервера које смо дефинисали у фајлу hosts.cfg, треба да добијемо нешто слично као:
PING OK - Packet loss = 0%, RTA = 0.47 ms|rta=0.471000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0
Провера TCP портова
Ако су на серверу „WinServer1“ подигнути mysql, apache и ftp можемо да надгледамо одговарајуће портове..
Провера ftp порта
./check_tcp -H WinServer1 -p 21 TCP OK - 0.002 second response time on WinServer1 port 21|time=0.002343s;;;0.000000;10.000000
Провера mysql порта
./check_tcp -H WinServer1 -p 3306 TCP OK - 0.001 second response time on WinServer1 port 3306|time=0.001026s;;;0.000000;10.000000
Провера веб порта 8080
./check_tcp -H WinServer1 -p 8080 TCP OK - 0.001 second response time on WinServer1 port 8080|time=0.001034s;;;0.000000;10.000000
Провера Виндовс процеса
Ако на серверу WinServer1 имамо јако битан процес који мора да буде активан нoн-стоп онда њега можемо да надгледамо.
Претпоставка је да је омогућен SNMP сервис на серверу, да је дефинисан community string и додата IP адреса Nagiosа. Укратко, отићи у Control Panel – Services, наћи SNMP Service, десни клик Properties, у табу Traps додати community string и у оквиру Trap destinations додати IP адресу Nagios сервера. У табу Agent чекирати све опције у оквиру Service. У табу Security чекирати Send authentication trap и додати community string, и чекирати Accept SNMP packets from these hosts и ту додати IP адресу Nagios сервера.
Провере процеса mysqld.еxе
./check_win_processes WinServer1 communitystring mysqld.exe OK: 1 running process(es)
Провера процеса tomcat7.exe (потребно је навести тачно име процеса какво је у оквиру таба Processes Task Manager-а)
./check_win_processes WinServer1 communitystring tomcat7.exe OK: 1 running process(es)
или
./check_win_processes WinServer1 communitystring mysqld.exe tomcat7.exe OK: 2 running process(es)
Провера Виндовс сервиса
Ако на серверу WinServer1 имамо јако битне сервисе који морају да буду стартовани и да буду активни нон-стоп онда њих можемо да надгледамо.
Пре провере сервиса потребно је преко cpan- инсталирати модул Net::SNMP.
perl -MCPAN -e shell install Net::SNMP exit Потребно је додатно инсталирати perl-NET-SNMP Команде су: yum install net-snmp-perl yum install epel-release yum install perl-NET-SNMP
Провера сервиса
Пре саме провере сервиса потребно је додатно изменити Perl скрипт,
У линији 259 и 317 где стоји
$resultat = (Net::SNMP->VERSION < 4) ?
уместо знака < треба ставити оператер lt тако да линија изгледа $resultat = (Net::SNMP->VERSION lt 4) ?
cd /usr/local/nagios/libexec/
nano check_snmp_win.pl
То мењамо да не би добили упозорења при извршавању команде
Argument „v6.0.1“ isn’t numeric in numeric lt (<) at ./check_snmp_win.pl line 259.
Argument „v6.0.1“ isn’t numeric in numeric lt (<) at ./check_snmp_win.pl line 317
Provera MySQL56 servisa ./check_snmp_win.pl -H WinServer1 –C communitystring -n MySQL56 -N 1 1 services active (matching „MySQL56“) : OK
Provera Apache servisa ./check_snmp_win.pl -H WinServer1 -C communitystring -n „Apache Tomcat 7“ -N 1 1 services active (matching „Apache Tomcat 7“) : OK
Провера заузетости CPU
На серверу WinServer1 проверавамо оптерећеност процесора – CPU load. Пре саме провере оптерећености CPU потребно је додатно изменити Perl скрипт, У линији 681 где стоји „my $resultat = (Net::SNMP->VERSION < 4) ?“ уместо знака < треба ставити оператер lt тако да линија изгледа „my $resultat = (Net::SNMP->VERSION lt 4) ?“
cd /usr/local/nagios/libexec/
nano check_snmp_load.pl
То мењамо да не би добили упозорења при извршавању команде
Argument „v6.0.1“ isn’t numeric in numeric lt (<) at ./check_snmp_load.pl line 681.
./check_snmp_load.pl -H WinServer1 -C communitystring -w 70 -c 95 1 CPU, load 6.0% < 70% : OK
Провера заузетости меморије
На серверу WinServer1 проверавамо оптерећеност меморије.
Пре саме провере оптерећености меморије потребно је додатно изменити Perl скрипт, У линији 420 и 494 где стоји if (Net::SNMP->VERSION < 4) {
уместо знака < треба ставити оператер lt тако да линија изгледа if (Net::SNMP->VERSION lt 4) {
cd /usr/local/nagios/libexec/
nano check_snmp_storage.pl
То мењамо да не би добили упозорења при извршавању команде
Argument „v6.0.1“ isn’t numeric in numeric lt (<) at ./check_snmp_storage.pl line 420.
Argument „v6.0.1“ isn’t numeric in numeric lt (<) at ./check_snmp_storage.pl line 494.
./check_snmp_storage.pl -H WinServer1 -C communitystring -m "Virtual Memory" -w 70 -c 95
Virtual Memory: 50%used(3066MB/6141MB) (<70%) : OK
Провера заузетости партиција хард диска
На серверу WinServer1 проверавамо заузетост партиција хард диска
Провера C:\ партиције
./check_snmp_storage.pl -H WinServer1 -C communitystring -m ^C: -w 80 -c 95 C:\ Label: Serial Number fa685589: 68%used(174495MB/255896MB) (<80%) : OK
Провера D:\ партиције
./check_snmp_storage.pl -H WinServer1 -C communitystring -m ^D: -w 80 -c 95 D:\ Label:Podaci Serial Number 98c534f0: 58%used(149285MB/255997MB) (<80%) : OK
Када смо успешно проверили команде које ћемо користити у дефинисању сервиса време је да дефинишемо и сервисе.
• ДЕФИНИСАЊЕ СЕРВИСА
Креирамо фајл и допунимо га доле дефинисаним параметрима
cd /usr/local/nagios/etc/objects/
nano /usr/local/nagios/etc/objects/services.cfg
########################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################
# Definisanje servisa ping za grupu hostova windows-servers, ostale se dodaju iza zaresa po potrebi
define service{
use generic-service,Service-graph
hostgroup_name windows-servers
service_description PING
check_command check_ping!500.0,20%!1500.0,60%
}
# Definisanje servisa provere TCP porta MySQL – 3306, novi hostovi se dodaju iza
# WinServer1 odvojeno zarezom (WinServer1, WinServer2)
define service{
use generic-service
host_name WinServer1
service_description MySQL-port
check_command check_tcp!3306
}
# Definisanje servisa provere TCP porta Apache-a – 8080
define service{
use generic-service
host_name WinServer1
service_description Apache-port
check_command check_tcp!8080
}
# Definisanje servisa provere TCP porta FTP-a – 21
define service{
use generic-service
host_name WinServer1
service_description FTP-port
check_command check_tcp!21
}
#Definisanje servisa provere MySQL procesa mysqld.exe
define service{
use generic-service
host_name WinServer1
service_description MySQL proces
check_command check_win_process!communitystring!mysqld.exe
}
# Definisanje servisa provere Apache Tomcat servisa
define service{
use generic-service
host_name WinServer1
service_description Provera Apache Tomcat servisa
check_command check_win_servis!'Apache Tomcat 7'!1
}
# Definisanje servisa provere zauzetosti CPU
define service{
use generic-service,Service-graph
host_name WinServer1
service_description Zauzetost CPU
check_command check_snmp_load_v1!70!95
}
# Definisanje servisa zauzetosti memorije
define service{
use generic-service,Service-graph
host_name WinServer1
service_description Zauzetost memorije
check_command check_snmp_storage_v1!^Virtual Memory$!85!95
}
# Definisanje servisa zauzetosti C particije hard diska
define service{
use generic-service,Service-graph
host_name WinServer1
service_description Zauzetost particije C hard diska
check_command check_snmp_storage_v1!^C:!85!95!
}
# Definisanje servisa zauzetosti D particije hard diska
define service{
use generic-service,Service-graph
host_name WinServer1
service_description Zauzetost particije D hard diska
check_command check_snmp_storage_v1!^D:!85!95!
}
На крају сачувамо фајл service.cfg и прво проверавамо конфигурацију Nagios-a па онда рестарт Nagios-a.
Провера исправности конфигурације Nagios-a
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Рестарт Nagios-a
/etc/init.d/nagios restart
За наш сервер WinServer1 треба да добијемо следећу слику за service статус
Наместили смо мониторинг најважнијих портова, процеса и сервиса као и мониторинг CPU, меморије и хард диска.


