Instalacja i konfiguracja systemu monitorowania serwerów oraz innych usług – Nagios i Icinga

przez | 8 stycznia 2014

Nagios jest programem służącym do monitorowania urządzeń sieciowych, zasobów sieci, systemów operacyjnych (Windows oraz Linux), różnego typu aplikacji. Icinga jest systemem podobnym. Bazuje na Nagios. Według mnie Icinga jest bardziej przyjaznym systemem do monitorowania.

Dostępne funkcje m.in. :

– Monitorowanie hostów i ich zasobów (np. zużycie dysku, obciążenie procesora, logi systemowe)

– Monitorowanie usług sieciowych m.in.(SMTP, POP3, HTTP, NNTP, ICMP, SNMP, FTP, SSH)

– Monitorowanie serwerów działających na systemach Linux/Unix oraz Windows (za pomocą NRPE_NT).

– inne pozostałe możliwości są zawarte w pluginach 🙂

Pluginy dostępne na stronie :

http://exchange.nagios.org/directory/Plugins

Pluginy są również kompatybilne z Icinga !

Mamy możliwość tworzenia własnych wtyczek !

Powiadomienia programu mogą być wysyłane m.in. przez :

– e-mail

– sms

Nagios/Icinga jest oparty na licencji darmowej GNU.

Instalacja Nagios. Przykład instalacji oparty na systemie Debian.

Na początku należy zainstalować serwer Apache2 oraz bibliotekę gcc. GCC jest podstawowym kompilatorem do różnych języków programowania.

apt-get install apache2

apt-get install gcc

W następnej kolejności instalujemy usługę nagios.

Wykonujemy w konsoli następnie :

apt-get install nagios3

Należy utworzyć użytkownika i hasło do panelu nagios :

Podczas instalacji program sam poprosi o wpisanie hasła.

hasło nagios

Jeżeli nie skonfigurujemy hasła podczas instalacji , hasło należy utworzyć następująco :

przechodzimy do katalogu : cd /etc/nagios3

a następnie wykonujemy :

htpasswd -c htpasswd.users nagiosadmin

i podajemy hasło. Tworzymy w tym przykładzie hasło dla użytkownika o nazwie nagiosadmin.

Należy sprawdzić czy została uruchomiona usługa po zainstalowaniu :

/etc/init.d/nagios3 status

jeżeli Nagios nie działa, to wykonujemy :

/etc/init.d/nagios3 start

———————————————————————-

Logowanie do panelu administracyjnego Nagios:

W przeglądarce wpisujemy jako adres :

http://adres_ip_serwera/nagios3

jako login podajemy : nagiosadmin

natomiast za hasło podajemy hasło, które wpisaliśmy podczas instalacji.

Panel konfiguracyjny :

panel

Aby przeprowadzać konfigurację monitorowania za pośrednictwem interfejsu www trzeba przyporządkować wartość :

check_external_commands=1 w pliku /etc/nagios3/nagios.cfg

oraz dostosować uprawnienia dotyczące plików.

Wykonujemy w konsoli następujące polecenia:

/etc/init.d/nagios3 stop

dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3

/etc/init.d/nagios3 start

NAPRAWA BŁĘDÓW, KTÓRE MOGĄ SIĘ POJAWIĆ:

„It appears as though you do not have permission to view information for any of the hosts you requested…

If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI and check the authorization options in your CGI configuration file. „
Należy wyłączyć autoryzację w pliku /etc/nagios/cgi.cfg
use_authentication=0

lub jeżeli chcemy korzystać z autoryzacji, należy dodać do pliku cgi.cfg (przy założeniu że użytkownik nazywa się „nagiosadmin„), zawartość :

authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin[/important]

KONFIGURACJA NAGIOS:

Główny plik konfiguracji programu nagios: /etc/nagios3/nagios.cfg

Instalacja systemu monitorowania – Icinga

Zamiast instalować Nagios możemy wykorzystać podobny system do monitorowania, który bazuje na Nagios. Jest to usługa Icinga. W systemie Debian wystarczy wykonać :

apt-get install apache2

apt-get install icinga

Następnie należy zainstalować pluginy Nagiosa :

apt-get –no-install-recommends install nagios-nrpe-plugin

Przykład konfiguracji Nagios/Icinga

Tworzymy sobie plik z grupami hostów lub innych urządzeń sieciowych np. plik o nazwie group_host.cfg o przykładowej zawartości :

# Definiujemy nazwę grupy oraz jej alias

# Ilość grup dowolna

define hostgroup {
hostgroup_name clientwindows7
alias clientwindows7
register 0
}

 

define hostgroup {
hostgroup_name windows_server
alias windows_server
register 0
}

 

define hostgroup {
hostgroup_name clientlinux
alias clientlinux
register 0
}

 

define hostgroup {
hostgroup_name linux_server
alias linux_server
register 0
}

Następnie tworzymy plik, który będzie definiował hosty lub inne urządzenia.

Ja w przykładzie utworzyłem hosty o następujących nazwach :

– asus-windows7

– debian-bacula-zarzadca

– debian-bacula-magazyn

– Windows Server 2008

Przykładowa zawartość pliku hosts.cfg :

define host{
use generic-host
host_name asus-windows7
alias Komputer Marka
address 192.168.4.100
hostgroups clientwindows7
}
define host{
use generic-host
host_name debian-bacula-zarzadca
alias Serwer Bacula
address 192.168.4.107
hostgroups linux_server
}

 

define host{
use generic-host
host_name debian-bacula-magazyn
alias Serwer Bacula
address 192.168.4.103
hostgroups linux_server

}

define host{
use generic-host
host_name Windows Server 2008
alias Windows Server 2008 Wirtualny
address 192.168.4.109
hostgroups windows_server
}

Następnie należy zdefiniować usługi jakie będą monitorowane . Przykład zawartości pliku services.cfg :

#Przykładowe definicje usług dla systemów Windows :

define service{
use generic-service
hostgroup_name clientwindows7,windows_server
service_description Wersja NSClient++
check_command check_nt!CLIENTVERSION
}

define service{
use generic-service
hostgroup_name clientwindows7,windows_server
service_description Uptime
check_command check_nt!UPTIME
}

define service{
use generic-service
hostgroup_name clientwindows7,windows_server
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}

define service{
use generic-service
hostgroup_name clientwindows7,windows_server
service_description Pamięc RAM
check_command check_nt!MEMUSE!-w 80 -c 90
}

define service{
use generic-service
hostgroup_name clientwindows7
service_description Miejsce na partycji
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}

define service{
use generic-service
hostgroup_name windows_server
service_description Status procesu Explorer
check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}

define service{
use generic-service
hostgroup_name windows_server
service_description Monitorowanie Usług Terminalowych
check_command check_nrpe_service!TermService
}

define service{
use generic-service
hostgroup_name windows_server,clientwindows7
service_description Monitorowanie Firewall
check_command check_nrpe_service!MpsSvc
}

define service{
use generic-service
hostgroup_name clientwindows7
service_description Status programu TeamViewer
check_command check_nrpe_service!TeamViewer9=stopped
}

define service{
use generic-service
hostgroup_name windows_server
service_description Status Defragmentora
check_command check_nrpe_process!”dfrgifc.exe”=stopped
}

#Przykładowe definicje dla systemów Linux:

define service{

use generic-service
hostgroup_name linux_server,clientlinux
service_description CPU Load
check_command check_nrpe!check_load
}

define service{
use generic-service
hostgroup_name linux_server,clientlinux
service_description Aktualnie zalogowanych użytkowników
check_command check_nrpe!check_users
}

define service{
use generic-service
hostgroup_name linux_server
service_description Mysql
check_command check_mysql
}

define service{
use generic-service
hostgroup_name linux_server
service_description Uruchomiony Apache
check_command check_long_running_procs.sh!10!20!”Apache2″
}

define service{
use generic-service
hostgroup_name linux_server
service_description MySQL Processlist
check_command checkmysqlprocesslist.sh
}

define service{
use generic-service
hostgroup_name linux_server,clientlinux
service_description Monitor SWAP
check_command check_swap!50!20
}

define service{
use generic-service
hostgroup_name linux_server,clientlinux
service_description Monitor RAM
check_command check_mem.pl!20!5
}

 

Następnie należy skonfigurować plik komend. Ja wrzucam definicje komend do pliku commands.cfg :

###############################################################################
# NRPE
#
# Komendy używane przez NRPE to sprawdzania zdalnych systemów
###############################################################################

define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s $USER9$ -v $ARG1$ $ARG2$
}

#######

#######

#######

# Przykładowe definicje komend :

#MONITOROWANIE USŁUG
define command{
command_name check_nrpe_service
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -c CheckServiceState -a ShowAll $ARG1$
}

#MONITOROWANIE PROCESÓW
define command{
command_name check_nrpe_process
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -c CheckProcState -a ShowAll $ARG1$
}

define command{
command_name check_long_running_procs.sh
command_line /etc/icinga/plugins/check_long_running_procs.sh -w $ARG1$ -c $ARG2$ -E $ARG3$
}

define command{
command_name checkmysqlprocesslist.sh
command_line /etc/icinga/plugins/checkmysqlprocesslist.sh -H $HOSTADDRESS$ -u $USER20$ -p $USER21$
}

#MONITOROWANIE BAZY DANYCH

# ‚check_mysql’ command definition
define command{
command_name check_mysql
command_line /usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u $USER20$ -p $USER21$
}

#MONITOROWANIE PAMIĘCI SWAP

define command{
command_name check_swap
command_line /etc/icinga/plugins/check_swap -w $ARG1$ -c $ARG2$
}

#MONITOROWANIE PAMIĘCI RAM

define command{
command_name check_mem.pl
command_line /etc/icinga/plugins/check_mem.pl -w $ARG1$ -c $ARG2$ -f

}

#MONITOROWANIE APACHE

define command{
command_name check_apache2.sh
command_line /etc/icinga/plugins/check_apache2.sh -H $HOSTADDRESS$ -P 80
}

 

Bardzo fajnym pluginem jest check_nrpe_service. Umożliwia monitorowanie usług systemu Windows.

Możemy zdefiniować dowolną usługę znajdującą się w systemie, którą chcemy monitorować.

np.

define service{
use generic-service
hostgroup_name windows_server,clientwindows7
service_description Monitorowanie Firewall
check_command check_nrpe_service!MpsSvc
}

Należy wstawić w miejsce pogrubienia nazwę usługi systemu Windows.

Jeżeli nie znamy nazwy usługi, uruchamiamy narzędzie services.msc

servicesmsc1

Drugim ciekawym pluginem jest check_nrpe_process. Umożliwia monitorowanie procesów w systemie Windows.

np.

define service{
use generic-service
hostgroup_name windows_server
service_description Status Defragmentora
check_command check_nrpe_process!”dfrgifc.exe„=stopped
}

W miejscu pogrubionym wstawiamy proces. Dopisanie stopped spowoduje że status usługi będzie OK jeśli usługa będzie wyłączona w systemie Windows.

Definicje Pluginów można ściągnąć z Internetu.

W systemie Debian wystarczy wykonać : apt-get –no-install-recommends install nagios-nrpe-plugin

Domyślnie definicje pluginów znajdują się w /usr/lib/nagios/plugins/ . Nie należy wtedy tych samych pluginów definiować w pliku commands.cfg. Nie można dublować definicji !

[/important]

Pluginy różnego rodzaju są dostępne na stronie :

http://exchange.nagios.org/directory/Plugins

Wszystkie zmienne np. $USER9$ definiujemy w pliku resource.cfg[/important]

 

Do monitoringu drukarek (m.in. stanu tonerów w drukarkach sieciowych) polecam pluginy :

SNMP-Printer-Check.

Testowałem pluginy i bardzo fajnie przedstawiają ilość toneru ( w %)

Do pobrania ze strony :

http://exchange.nagios.org/directory/Plugins/Hardware/Printers/Check-your-printer-consumables-status-using-SNMP/details

Drugi plugin :

http://exchange.nagios.org/directory/Plugins/Hardware/Printers/check_snmp_printer/details

Po każdej zmianie konfiguracji, należy Nagios/Icinga zresetować. Przed resetem należy sprawdzić poprawność konfiguracji :

nagios -v /etc/nagios3/nagios.cfg ( w przypadku testowania konfiguracji Nagiosa)

/etc/init.d/nagios3 restart

[/warning]

Konfiguracja klienta Linux[/important]

Aby móc monitorować system Linux należy zainstalować moduł umożliwiający uruchomienie pluginów Nagios/Icinga na zdalnych maszynach. Przykład instalacji oparty na systemie Debian :

1) Instalujemy NRPE na systemie klienta

apt-get install nagios-nrpe-server

2) Edytujemy plik konfiguracyjny

/etc/nagios/nrpe.cfg

Podajemy w allowed_hosts adres IP serwera Nagios lub Icinga

np.

allowed_hosts=192.168.4.106

Zapisujemy zmiany.

3) Restartujemy NRPE :

/etc/init.d/nagios-nrpe-server restart

 

Konfiguracja klienta Windows[/important]

Podobnie postępujemy w przypadku monitorowania systemu Windows.

1) Instalujemy NSClient++

Do ściągnięcia ze strony : http://www.nsclient.org

2) Przechodzimy do pliku konfiguracyjnego nsclient.ini (plik znajduje się w katalogu instalacyjnym NSClient++)

Dodajemy do pliku :

[/settings/NRPE/server]
allow arguments = true

oraz edytujemy :

allowed hosts = wstawiamy tutaj adres IP serwera na którym jest postawiona usługa Nagios/Icinga

3) Zapisujemy zmiany i startujemy NSClient++

Efekt działania usługi Icinga :

Icinga1

Icinga6

 

Jak widzimy powyżej mamy na zielono zaznaczone usługi, które mają stutus OK.

Icinga2

Tutaj mamy sytuację wyłączonego hosta. Nie ma możliwości monitorowania usług. Kolejne funkcjonalności Nagiosa/Icingi zostały przedstawione na pozostałych zrzutach ekranu.

Icinga3

Icinga4

Icinga5

Efekt działania usługi Nagios :

nagios1

nagios5

nagios2

nagios3

nagios4

Jeśli połączymy Nagios/Incinga z NDOUtils to całą konfigurację możemy trzymać w bazie danych. Więcej informacji dostępnych jest tutaj :

http://exchange.nagios.org/directory/Addons/Database-Backends/NDOUtils/details

Tutaj będę opisywał pozostałe ciekawe pluginy, które monitorują usługi systemu Linux :

1) check_logwarn

Plugin monitorujący logi. Dostępny pod linkiem:

http://exchange.nagios.org/directory/Plugins/Log-Files/check_logwarn/details

np. możemy monitorować logi Apache

– instalujemy plugin

./configure –prefix=/usr/local/logwarn

make

make install

– dodajemy definicję pluginu w pliku commands.cfg. Należy zmienić ścieżkę miejsca instalacji pluginu

define command{
command_name check_logwarn
command_line bash /usr/local/logwarn -d /tmp/logwarn -p $ARG1$ $ARG2$
}

– definiujemy definicję usługi dla hosta lub grupy

Ustalamy jaki plik z logami ma być monitorowany oraz wstawiamy słowo filtrujące dany log.

define service{
use generic-service
hostgroup_name linux_server
service_description Log Warning
max_check_attempts 1
check_command check_logwarn!/var/log/error.log!^.*error.*
}

Przykładowy efekt działania pluginu :

nagios6

 

2) check folder size

Plugin monitoruje rozmiar katalogu w systemie Linux

– ściągamy skrypt pluginu ze strony i wrzucamy do katalogu pluginów :

http://exchange.nagios.org/directory/Plugins/System-Metrics/File-System/check-folder-size-%28linux-nrpe%29/details

– definiujemy komendę np. taką :

define command{
command_name check_folder_size.sh
command_line /etc/icinga/plugins/check_folder_size.sh -f $ARG1$ -s $ARG2$ -w $ARG3$ -c $ARG4$
}

– definiujemy usługę np. taką :

define service{
use generic-service
host_name localhost
service_description Sprawdzanie pojemnosci katalogu /var/log
check_command check_folder_size.sh!/var/log!m!100!200
}

k w (KB)
m w (MB)
g w (GB)

/var/log – jest to przykładowy katalog, który będzie monitorowany

100 – zdefiniowany przekroczony rozmiar będzie ostrzeżeniem

200 – zdefiniowany przekroczony rozmiar będzie błędem krytycznym

Przykładowy efekt działania pluginu :

Icinga7

markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.
0 0 vote
Article Rating
Subscribe
Powiadom o
guest
7 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
arek
6 lat temu

Cześć Słuchaj mam problem ze skumaniem poniższej rzeczy, a mianowicie od punktu:

„Tutaj będę opisywał pozostałe ciekawe pluginy, które monitorują usługi systemu Linux ”

Jak ja mam zainstalować te pluginy i co dokładnie skonfigurować, które pliki?
Mógłbyś mi to tak „łopatologicznie” wyjaśnić ?
Z góry dzięki

e-proit
e-proit
6 lat temu

A co sobie zainstalowałeś ? Nagios czy Icinga ?

Zamiast pluginu check_logwarn polecam zainstalowanie tego :

http://www.eproit.pl/rsyslog-mysql-loganalyzer-serwer-logow

arek
6 lat temu

Zainstalowałem jedno i drugie, ale zrobię, tak jak mówisz, bo widzę, że bardzo ciekawe rozwiązanie proponujesz…
Dzięki.

arek
6 lat temu

stworzyłem plik „group_host.cfg”, i mam komunikat w sekcji „Service Overview For All Service Groups” – czerwony napis „There are no service groups defined.” Gdzie dokładnie powinien być ten plik umieszczony ?
Dzięki z góry za pomoc.

e-proit
e-proit
6 lat temu

No ale Ty stworzyłeś tylko grupy hostów a nie usług. Brak zdefiniowanych grup usług.

Bartek S
Bartek S
5 lat temu

Zainstalowałem wg twojego tutoriala ale przy teście ustawień otrzymuję komunikat:

Warning: Duplicate definition found for command ‚check_nrpe’ (config file ‚/etc/nagios-plugins/config/check_nrpe.cfg’, starting on line 2)
Error: Could not add object property in file ‚/etc/nagios-plugins/config/check_nrpe.cfg’ on line 3.
Error processing object config files!

Czy dobrze rozumiem, że jest zdublowana definicja check_nrpe? w pliku commands.cfg wpis dotyczący NRPE obejmuje tylko:

define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s $USER9$ -v $ARG1$ $ARG2$
}

Gdzie szukać rozwiązania?

e-proit
e-proit
5 lat temu
Reply to  Bartek S

Tak, jest zdublowana definicja. Musisz jedną skasować.