Monitoreando PostgreSQL con Icinga

From PostgreSQL wiki

Revision as of 05:17, 22 November 2013 by Carloswaldo (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Primero tenemos que buscar los paquetes correspondientes al sistema donde vamos a instalar Icinga o, en su defecto, descargar los fuentes:

https://www.icinga.org/download/packages/

En este caso se usó un RHEL 6 con arquitectura x86_64, lo cual apunta a un .rpm para agregar el repositorio RepoForge donde se encuentran los paquetes necesarios para la instalación

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm sudo rpm -i rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm


Ahora podemos instalar los paquetes necesarios

sudo yum install icinga icinga-idoutils-libdbi-pgsql icinga-web php-pgsql nagios-plugins nagios-plugins-nrpe


El paquete icinga es la base de Icinga, icinga-idoutils-libdbi-pgsql es necesario para la conexión a la base de datos de la cual Icinga va a ser uso (usaremos una base Postgres), icinga-web es el frontend, php-pgsql lo necesitamos para que php pueda conectarse a la base Postgres, y nagios-plugins contiene la mayoría de plugins necesarios para monitoreo.

Modificamos el pg_hba.conf: sudo su - postgres vim /var/lib/pgsql/9.2/data/pg_hba.conf

Y agregamos las siguientes líneas: host icinga icinga 127.0.0.1/32 trust host icinga_web icinga_web 127.0.0.1/32 trust

Preparamos los usuarios y las bases de datos para uso de Icinga e Icinga-web: postgres=# CREATE USER icinga; postgres=# ALTER USER icinga WITH PASSWORD 'icinga'; postgres=# CREATE DATABASE icinga; postgres=# CREATE USER icinga_web; postgres=# ALTER USER icinga_web WITH PASSWORD 'icinga' createdb; postgres=# CREATE DATABASE icinga_web; postgres=# SELECT pg_reload_conf(); postgres=# \q

Y ejecutamos los scripts para crear los esquemas de las bases y datos iniciales (La ubicación de estos scripts, así como de otros archivos de configuración, puede variar dependiendo de los directorios de instalación): psql -h 127.0.0.1 -U icinga -d icinga < /usr/share/doc/icinga-idoutils-libdbi-pgsql-1.8.4/db/pgsql/pgsql.sql psql -h 127.0.0.1 -U icinga_web -d icinga_web < /usr/share/icinga-web/etc/schema/pgsql.sql

Editamos el archivo de configuración de base de datos de icinga-web para indicarle cómo conectarse a la base: vim /usr/share/icinga-web/app/config/databases.xml

Y modificamos las siguientes líneas: <ae:parameter name="dsn">pgsql://icinga_web:icinga_web@127.0.0.1:5432/icinga_web</ae:parameter>

<ae:parameter name="dsn">pgsql://icinga:icinga@127.0.0.1:5432/icinga</ae:parameter>

También modificamos el archivo de configuración de ido2db: sudo vim /etc/icinga/ido2db.cfg

Editando la siguiente línea: db_host=127.0.0.1

Ahora podemos iniciar los servicios: sudo /etc/init.d/icinga start sudo /etc/init.d/httpd start sudo /etc/init.d/ido2db start

Para agregar gráficos estadísticos tenemos que instalar pnp4nagios (en el caso de RHEL6 el paquete se encuentra en el repositorio EPEL, o se puede compilar desde los fuentes en http://sourceforge.net/projects/pnp4nagios/files/): wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -i epel-release-6-8.noarch.rpm sudo yum install pnp4nagios

Editamos los siguientes archivos de configuración: sudo vim /etc/pnp4nagios/npcd.cfg

Modificando las siguientes líneas: user = icinga group = icinga

El config.php:

sudo vim /etc/pnp4nagios/config.php


Editando esta línea:

$conf['nagios_base'] = "/icinga/cgi-bin";


El icinga.cfg:

sudo vim /etc/icinga/icinga.cfg


Con las siguientes líneas:

process_performance_data=1

host_perfdata_file=/var/lib/pnp4nagios/host-perfdata service_perfdata_file=/var/lib/pnp4nagios/service-perfdata

service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$

host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$

service_perfdata_file_mode=a host_perfdata_file_mode=a

service_perfdata_file_processing_interval=30 host_perfdata_file_processing_interval=30

service_perfdata_file_processing_command=process-service-perfdata-file host_perfdata_file_processing_command=process-host-perfdata-file


Y el commands.cfg:

sudo vim /etc/icinga/objects/commands.cfg


Agregando lo siguiente:

  1. pnp

define command{

       command_name    process-service-perfdata-file
       command_line    /bin/mv /var/lib/pnp4nagios/service-perfdata /var/spool/pnp4nagios/

}

define command{

       command_name    process-host-perfdata-file
       command_line    /bin/mv /var/lib/pnp4nagios/host-perfdata /var/spool/pnp4nagios/

}


La instalación de pnp4nagios crea algunos directorios con permisos para el usuario “nagios”, tenemos que cambiarlo al usuario “icinga”:

sudo chown icinga:icinga /var/lib/pnp4nagios/ sudo chown icinga:icinga /var/spool/pnp4nagios/


Tenemos que crear un archivo con las credenciales para Apache:

sudo htpasswd -c /etc/icinga/htpasswd.users icingaadmin


E indicarle al Apache que lo use:

sudo vim /etc/httpd/conf.d/pnp4nagios.conf


Editando la siguiente línea:

AuthUserFile /etc/icinga/htpasswd.users


Iniciamos el servicio npcd y reiniciamos los de icinga y apache

sudo /etc/init.d/npcd start sudo /etc/init.d/icinga restart sudo /etc/init.d/httpd restart


Para monitorear Postgres vamos a hacer uso del plugin check_postgres:

cd /usr/lib64/nagios/plugins/ sudo wget http://bucardo.org/downloads/check_postgres.tar.gz tar -xzf check_postgres.tar.gz


Tenemos que agregar el comando de check_postgres al archivo /etc/icinga/objects/commands.cfg:

  1. check_postgres

define command {

       command_name    check_postgres
       command_line    $USER1$/check_postgres-2.20.1/check_postgres.pl -H $HOSTADDRESS$ --action $ARG1$ -w $ARG2$ -c $ARG3$

}

Nota: Para poder monitorear la máquina remota con check_postgres se necesita tener la entrada correspondiente en pg_hba.conf del host remoto dando los permisos correspondientes al servidor de monitoreo

En el archivo icinga.cfg se pueden especificar los archivos de configuración que se van a cargar, por defecto hay un archivo para definir el monitoreo a localhost

cfg_file=/etc/icinga/objects/localhost.cfg


Para incluir otro host a monitorear agregamos otra línea indicando el archivo que vamos a usar:

cfg_file=/etc/icinga/objects/host.cfg


Creamos el archivo:

sudo vim /etc/icinga/objects/host.cfg


Y agregamos la definición del host (con la ip correspondiente) y los servicios a monitorear:

define host{

       use                     linux-server
       host_name               server1
       alias                   server1
       address                 192.168.0.114
       }
  1. check_postgres_locks

define service{

       use                             generic-service
       host_name                       server1
       service_description             PGSQL Locks
       check_command                   check_postgres!locks!40!80

}

  1. check_postgres_txn_idle

define service{

       use                             generic-service
       host_name                       server1
       service_description             PGSQL Txn_idle
       check_command                   check_postgres!txn_idle!’20 minutes’!’4 hours’

}

  1. check_postgres_bloat

define service{

       use                             generic-service
       host_name                       server1
       service_description             PGSQL Bloat
       check_command                   check_postgres!bloat!30%!60%

}


Para poder monitorear otros aspectos del host (por ejemplo, el número de procesos) hay que instalar nagios-plugins y nrpe-server en el host, para este ejemplo usamos una máquina Debian:

sudo apt-get install nagios-nrpe-server nagios-plugins


Tenemos que editar el archivo de configuración /etc/nagios/nrpe.cfg para especificar la ip desde la cual se va a monitorear:

allowed_hosts=192.168.0.110


Y reiniciamos el servicio de nrpe:

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


Agregamos el comando de check_nrpe al /etc/icinga/objects/commands.cfg:

  1. check_nrpe

define command {

       command_name    check_nrpe
       command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

}


Y añadimos el comando de lo que queramos monitorear al archivo donde definimos el host (/etc/icinga/objects/host.cfg):

  1. total_processes

define service{

       use                             generic-service
       host_name                       server1
       service_description             Total Processes
       check_command                   check_nrpe!check_total_procs

}


Los comandos disponibles para ejecutar en el host remoto estarán definidos en ese host en el archivo /etc/nagios/nrpe.cfg, así mismo podremos añadir más comandos dependiendo de los plugins que estén disponibles.

Para poder habilitar las notificaciones por correo primero tenemos que ser capaces de enviar correos mediante la terminal, para esto se puede instalar y configurar algún servidor de correo como Postfix.

Luego de tener el servidor de correo funcionando tenemos que agregar los detalles de contacto a /etc/icinga/objects/contacts.cfg

define contact {

       contact_name                    cchapi
       host_notifications_enabled      1
       host_notification_period        24x7
       host_notification_options       d,u,r
       host_notification_commands      notify-host-by-email
       service_notifications_enabled   1
       service_notification_period     24x7
       service_notification_options    w,u,c,r
       service_notification_commands   notify-service-by-email
       email                           carlos.chapi@2ndquadrant.com

}

Y agregar el contacto a los servicios o host de los cuales queramos recibir notificaciones (además de las opciones de notificación que queramos):

  1. total_processes

define service{

       use                             generic-service
       host_name                       server1
       service_description             Total Processes
       notification_period             24x7
       notification_interval           60
       notification_options            u,c,w,r
       check_command                   check_nrpe!check_total_procs
       contacts                        cchapi

}

Por último agregamos los comandos que enviarán correos a /etc/icinga/objects/commands.cfg

  1. 'notify-host-by-email' command definition
define command {
       command_name   notify-host-by-email
       command_line   /usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mailx -s "** $NOTIFICATIONTYPE$ Host Alert:  $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
       }
# 'notify-service-by-email' command definition
define command {
       command_name   notify-service-by-email
       command_line   /usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n $SERVICEOUTPUT$\n" | /bin/mailx -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
       }

Esto en el caso de utilizar Postfix como servidor de correo.

Hacemos un reload al servicio de Icinga para que cargue la nueva configuración

/etc/init.d/icinga reload

Personal tools