Monitorització amb Nagios

De wikijoan
Salta a la navegació Salta a la cerca

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