Monitorització amb Nagios
Contingut
Introducció
Enllaç que seguirem:
Nagios és el estàndar en la monitorització de les infraestructures de d'ordinadors i xarxes. Amb Nagios pots tenir alertes immediates dels problemes d'infraestructura, de manera que les caigudes de servei no afectin a l'empresa o organització.
Nagios ofereix un servei complet de monitorització i alertes per a servidors, switches, aplicacions i serveis.
Amb Nagios pots:
- Monitor your entire IT infrastructure
- Spot problems before they occur
- Know immediately when problems arise
- Share availability data with stakeholders
- Detect security breaches
- Plan and budget for IT upgrades
- Reduce downtime and business losses
Desenvolupament
Treballarem amb una configuració de dos servidors (els alumnes treballaran per parelles). El servidor1 és on tenim instal.lat el nagios, que volem monitoritzar, i el servidor2 és una altra màquina que volem monitoritzar (la màquina del company).
Seguim l'enllaç:
i fixem-nos bé perquè hi ha accions que s'han de fer en la màquina servidor1, i d'altres que es fan en la màquina servidor2.
A servidor1:
$ sudo apt-get install nagios3 nagios-nrpe-plugin
En el procés d'instal.lació se't demana un password per a l'usuari nagiosadmin.
en la màquina servidor2 només cal instal.lar el paquet:
sudo apt-get install nagios-nrpe-server
NRPE significa Nagios Remote Plugin Executor Server, és a dir, és el plugin que s'instal.larà en el servidor remot, i que es comunicarà amb l'ordinador central que centralitzarà tota la informació de l'estat de la infraestructura.
El directori principal dels fitxers de configuració és /etc/nagios3/conf.d/:
cd /etc/nagios3/conf.d/
creem un fitxer de configuració per al servidor2:
$ sudo cp /etc/nagios3/conf.d/localhost_nagios2.cfg /etc/nagios3/conf.d/servidor2.cfg
Necessitem saber la IP del servidor2. Per ex,
$ sudo joe /etc/nagios3/conf.d/server02.cfg
define host{
use generic-host ; Name of host template to use
host_name servidor2
alias servidor2
address 192.168.0.15
}
i reiniciant el servei nagios3 ja podem monitoritzar les opcions per defecte del servidor2: número d'usuaris connectats, càrrega, estat del processador, discos,... (per saber quines són aquestes opcions només cal mirar el fitxer de configuració).
Monitorizar els servidors de mysql, Apache, SSH
L'ordinador de l'alumne i del seu company com a mínim tenen els serveis de Apache, SSH, mysql. En comptes de monitoritzar amb la perspectiva de la màquina, podem monitoritzar amb la perspectiva del servei. Per ex, ens pot interessar:
- Com estan els serveis de Mysql, detectar algun servidor caigut
En el fitxer /etc/nagios3/conf.d/services_nagios2.cfg hi ha definit per defecte la configuració del Apache i del SSH, podem també afegir una configuració per al mysql:
# check MySQL servers.
define service {
hostgroup_name mysql-servers
service_description MySQL
check_command check_mysql_cmdlinecred!nagios!secret!$HOSTADDRESS
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
i en el fitxer /etc/nagios3/conf.d/hostgroups_nagios2.cfg hem de dir quins servidors de mysql volem monitoritzar:
# MySQL hostgroup.
define hostgroup {
hostgroup_name mysql-servers
alias MySQL servers
members localhost, servidor2
}
La línia:
check_command check_mysql_cmdlinecred!nagios!secret!$HOSTADDRESS
significa que en cadascun dels servidors de mysql que volem monitoritzar s'executarà la comanda check_mysql_cmdlinecred que comprova l'estat del mysql, i per tenir permisos hem de donar-li un usuari/password del mysql amb permisos. Per tant, en cadascun dels servidors mysql que volem monitoritzar haurem de crear l'usuari en qüestió:
$ mysql -u root -p -e "create user nagios identified by 'secret';"
Reiniciem el servei:
$ sudo /etc/init.d/nagios3 restart
Controlar l'espai de disc al servidor2
En el servidor1 editem el fitxer /etc/nagios3/conf.d/servidor2.cfg, que controla la configuració del servidor2:
# NRPE disk check.
define service {
use generic-service
host_name server02
service_description nrpe-disk
check_command check_nrpe_1arg!check_all_disks!192.168.0.15
}
la línia
check_command check_nrpe_1arg!check_all_disks!192.168.0.15
significa que el servidor Nagios enviarà a la IP 192.168.0.15 (servidor2) el missatge per executar els scripts que controlen el tamany dels discs.
I en el servidor2 hem de donar una confiança en el servidor Nagios. editem el fitxer /etc/nagios/nrpe.cfg:
allowed_hosts=192.168.0.37
on 192.168.0.37 és la IP del servidor de Nagios. És a dir, estem dient que el servidor2 admet que el servidor1 faci un check dels seus discs.
La comanda que s'executarà està definida també en el fitxer /etc/nagios/nrpe.cfg més avall, en la zona de comandes:
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -e
Reiniciem els serveis en les dues màquines:
en el servidor2: $ sudo /etc/init.d/nagios-nrpe-server restart en el servidor1: $ sudo /etc/init.d/nagios3 restart
Interfície gràfica
Tot això ho hem fet per auditar màquines i serveis en la nostra xarxa. El resultat el podem veure a:
Ens logem amb l'usuari nagiosadmin i el password que hem posat en la instal.lació. La interfície gràfica és bastant intuïtiva.
Enviar alertes per mail. Configuració
L'objectiu ara és poder enviar correus electrònics a l'administrador quan ocorri una alerta. El procés per configurar l'enviament dels correus electrònics és el següent.
Seguim l'enllaç
però precisament la part de configuració del postfix és exactament la que vam veure en una pràctica anterior, per tant, és possible que ja ho tinguis configurat:
Anem per passos. Primer de tot hem de definir un nou contacte en el fitxer contacts_nagios2.cfg:
define contact{
contact_name joan
alias joan
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 joanqc@gmail.com
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members root, joan
}
és a dir, hem definit un nou contacte i l'hem afegit en el grup de admins.
I ara ja podem instal.lar i configurar el postfix per enviar correus a través d'un compte de gmail:
- Scripting._Alertes._Acc%C3%A9s_a_BD_i_enviament_de_mails_des_de_bash#Enviar_mails_des_de_la_consola_amb_Postfix_i_Gmail_SMTP
Potser ja ho tens fet, per comprovar si funciona només cal enviar un mail en línia de comanda:
$ echo "Test mail from postfix" | mail -s "Test Postfix" el_teu_correu@gmail.com
Un cop ens assegurem que la sortida de correus funciona correctament, ja podem configurar les alertes.
Habilitem les notificacions de Nagios per als hosts i per als serveis (per defecte ja està habilitat). Fitxers generic-host_nagios2.cfg i generic-services_nagios2.cfg:
# Generic host definition template - This is NOT a real host, just a template!
define host{
name generic-host ; The name of this host
notifications_enabled 1 ; Host notifications are enable
event_handler_enabled 1
...
# generic service template definition
define service{
name generic-service ; The 'name' of this se
active_checks_enabled 1 ; Active service checks are ena
passive_checks_enabled 1 ; Passive service checks are en
parallelize_check 1 ; Active service checks should
obsess_over_service 1 ; We should obsess over this se
check_freshness 0 ; Default is to NOT check servi
notifications_enabled 1
...
També puc canviar en els dos fitxers l'intèrval de 5 minuts a 1 minut, que va bé per fer proves:
normal_check_interval 1
Com veiem en aquest fitxers:
contact_groups admins
i com que l'usuari joan està en el contactgroup de admins, se li enviarà la notificació.
i ara el que hem de provocar és que es dispari una alerta. En el cas més senzill que ha configurat el professor, anem a provocar una alerta (i el seu consegüent enviament de mail) quan en la màquina servidor2 hi hagi més de 5 usuaris connectats. Editem el fitxer /etc/nagios3/conf.d/servidor2.cfg i busquem la directiva on s'especifica el límit d'usuaris. Hi ha dos números: el primer número és el límit d'usuaris que provoca un warning; el segon número provoca un error crític. Posem els dos números a 5.
Reiniciem el servei:
$ sudo /etc/init.d/nagios3 restart
Ara, des del servidor1 obrim terminals i ens connectem per SSH a la màquina servidor2, fins a 5 ó 6 usuaris (connexions obertes). En el Nagios podem controlar l'hora-minut-segon de quan es s'executarà el proper check. Si tot ha anat bé, sortirà amb vermell (CRITICAL) indicant-nos que hi ha un problema a servidor2, i hem de rebre un correu electrònic:
** PROBLEM Service Alert: HOST-MV/Current Users is CRITICAL ** Safata d'entrada x joanqc@gmail.com 17.17 (fa 3 minuts) per a usuari ***** Nagios ***** Notification Type: PROBLEM Service: Current Users Host: HOST-MV Address: 192.168.0.15 State: CRITICAL Date/Time: Thu Apr 3 17:17:44 CEST 2014 Additional Info: USERS CRITICAL - 5 users currently logged in
Si no rebem el correu electrònic podem mirar la definició del notyfy-service-by-email i notyfy-host-by-email i observar que tot està correcte:
/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
fixem-nos bé que amb printf escribim per consola el cos del missatge, i l'enviem (pipe) amb /usr/bin/mail.
Objectius de la pràctica, feina per l'alumne
El primer que haurà de fer l'alumne, treballant per parelles, és instal.lar el Nagios amb la configuració de dos servidors que s'ha comentat, i reproduir els resultats. Un cop aconseguit aquest objectiu, ara et pots proposar a fer més proves. Entre d'altres:
- controlar que els serveis de Apache, SSH i mysql estiguin actius.
- controlar l'espai de disc.
- controlar la càrrega dels dos servidors. Pots provocar l'alerta ficant un valor ben baix per als valors de la càrrega.
Entrega
Entrega al Schoology, amb el fitxer llegeixme.txt com sempre.
creat per Joan Quintana Compte, març 2014