2012/05/25

ICINGA

Introduccion:

Instalar ICINGA en FreeBSD

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Apache22 instalado
* Leer este manual

Documentacion de Icinga:

http://docs.icinga.org/latest/en/index.html

El proceso:

Actualizar el arbol de ports
# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

Instalar el port icinga

# cd /usr/ports/net-mgmt/icinga

# make config

Options for icinga 1.7.0_2

[X] EMBEDDED_PERL   Enable embedded Perl
[X] IDOUTILS        Enable IDOUtils

<OK>

# make install clean

Options for libdbi-drivers 0.8.3.1_5

[X] MYSQL     With MySQL Driver
[X] PGSQL     With PostgreSQL Driver
[ ] SQLITE3   With SQLite 3 Driver     <- Desactivo esta, no quiero sqlite

pw: unknown group `icinga'
You need a "icinga" group.
Would you like me to create it [YES]? YES

Done.
pw: no such user `icinga'
You need a "icinga" user.
Would you like me to create it [YES]? YES

Hacer que inicie con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

icinga_enable="YES"

Instalar el port nagios-plugins

# cd /usr/ports/net-mgmt/nagios-plugins

# make install clean

Instalar los logos para Icinga

# cd /usr/local/www/icinga/images/logos
# fetch https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Base-Images/imagepak-base.tar.tar
# tar -xvzf imagepak-base.tar.tar
# mv base/* /usr/local/www/icinga/images/logos/
# rm -rf base
# rm imagepak-base.tar.tar
# fetch https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Network-Symbols/symbols-v1.1.tar.gz
# tar -xvzf symbols-v1.1.tar.gz
# mv symbols/* /usr/local/www/icinga/images/logos/
# rm symbols-v1.1.tar.gz
# rm -rf symbols

Otros logos se pueden descargar de aqui (opcional)
https://www.monitoringexchange.org/inventory/Artwork/Image-Packs

Crear el archivo htpasswd.users

# touch /usr/local/etc/icinga/htpasswd.users

Agregar los usuarios y las claves

# htpasswd -c /usr/local/etc/icinga/htpasswd.users icingaadmin
New password: miclavesecreta
Re-type new password: miclavesecreta
Adding password for user isingaadmin

El password que escribio lo debe anotar, osea que creamos icingaadmin/miclavesecreta

Note que en el primer comando tenemos -c para crear el archivo y en el siguiente no!

# htpasswd /usr/local/etc/icinga/htpasswd.users guest
New password: guest
Re-type new password: guest
Adding password for user guest

El password que escribio lo debe anotar, osea que creamos guest/guest

Note que hemos creado dos usuarios icingaadmin con su respectiva clave y el usuario guest con clave guest

Editar el archivo de Apache para el sitio de icinga

# edit /usr/local/etc/apache22/httpd.conf

Agregar las lineas

# Modificacion para ICINGA inicio

<Directory /usr/local/www/icinga>
Order deny,allow
Options -Indexes
Deny from all
Allow from all

# Autenticacion inicio
AuthName "Icinga Access"
AuthType Basic
AuthUserFile /usr/local/etc/icinga/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

<Directory /usr/local/www/icinga/cgi-bin>
Options ExecCGI
# Autenticacion inicio
AuthName "Icinga Access"
AuthType Basic
AuthUserFile /usr/local/etc/icinga/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

ScriptAlias /icinga/cgi-bin/ /usr/local/www/icinga/cgi-bin/
Alias /icinga /usr/local/www/icinga/

# Modificacion para ICINGA fin

Reiniciar Apache para que tome los cambios

# /usr/local/etc/rc.d/apache22 restart

Creamos los archivos a partir de los de ejemplo

# cp /usr/local/etc/icinga/cgi.cfg-sample /usr/local/etc/icinga/cgi.cfg
# cp /usr/local/etc/icinga/cgiauth.cfg-sample /usr/local/etc/icinga/cgiauth.cfg
# cp /usr/local/etc/icinga/icinga.cfg-sample /usr/local/etc/icinga/icinga.cfg
# cp /usr/local/etc/icinga/resource.cfg-sample /usr/local/etc/icinga/resource.cfg
# cp /usr/local/etc/icinga/objects/commands.cfg-sample /usr/local/etc/icinga/objects/commands.cfg
# cp /usr/local/etc/icinga/objects/contacts.cfg-sample /usr/local/etc/icinga/objects/contacts.cfg
# cp /usr/local/etc/icinga/objects/notifications.cfg-sample /usr/local/etc/icinga/objects/notifications.cfg
# cp /usr/local/etc/icinga/objects/templates.cfg-sample /usr/local/etc/icinga/objects/templates.cfg
# cp /usr/local/etc/icinga/objects/timeperiods.cfg-sample /usr/local/etc/icinga/objects/timeperiods.cfg

Verificar las lineas o ajustarlas (note que agregamos ,guest al final, en las lineas 260 y 261)

# edit /usr/local/etc/icinga/cgi.cfg

authorized_for_all_services=icingaadmin,guest
authorized_for_all_hosts=icingaadmin,guest

Editar el archivo de Cinga

# edit /usr/local/etc/icinga/icinga.cfg

Comentar la linea colocando un # al inicio, queda asi:

#cfg_file=/usr/local/etc/icinga/objects/localhost.cfg

Crear el archivo con los equipos de nuestra compaƱia (abajo hay un link en Google Drive desde donde puede descargarlo)

# edit /usr/local/etc/icinga/conf.d/equipment.cfg

Editar el archivo de contactos de Icinga

# edit /usr/local/etc/icinga/objects/contacts.cfg

Ajustamos la linea

email       icinga@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Por un email valido

email       micorreo@gmail.com   ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Verificar que todo esta bien en la configuracion de icinga

# icinga -v /usr/local/etc/icinga/icinga.cfg

Iniciar Icinga si la verificacion pasa sin errores

# /usr/local/etc/rc.d/icinga start

Performing sanity check of icinga configuration: OK
Starting icinga.

Para ver el log (luego para parar de ver el log use las teclas Ctl + C)
# tail -f /var/log/icinga/icinga.log

Otro comando util

# icingastats -c /usr/local/etc/icinga/conf.d/equipment.cfg

Ahora que Icinga esta corriendo, para velo, entramos a:

http://<ipdemiserver>/icinga

le pedira entrar el usuario guest y la clave guest con los que se puede monitorear los equipos, si inincia con el usuario icingaadmin y la clave miclavesecreta se pueden hacer otros ajustes mas delicados desde el navegador (desactivar alarmas y otras cosas).

Caputuras de Icinga funcionando :-)

Icinga Tactical Overview


Icinga Map


Notas:

En el port icinga 1.7.0_2 se solucionaron unos errores en rutas y permisos que originalmente se detectaron el el port 1.7.0 :-)

Si quiere aqui estan los archivos de configuracion "equipment.cfg" y "commands.cfg", pero tenga en cuenta que en el primero hay comandos que requieren de nuevos comandos agregados posteriormente en "commands.cfg", por esto si va a usar el primer archivo tambien debe remplazar el archivo original "commands.cfg" de Icinga, baje ambos archivos del siguiente link:
Google Drive

Adicionalmente se puede modificar en la opcion "notification_period" el valor "24x7" por "workhours" y luego editamos el archivo /usr/local/etc/icinga/objects/timeperiods.cfg para ajustar workhours a nuestro horario de trabajo.

Opcional (en pruebas):

Icinga puede guardar la informacion del estado de los equipos en un DB que puede ser MySQL o PostgreSQL, si queremos hacerlo...

Hay que tener un montor de DB, en nuestro caso usaremos MySQL

Para activar el soporte de MySQL, al instalar el port debe activar tambien la opcion

[X] MYSQL           "Depend on MySQL"

Si siguio paso a paso este manual no lo tendra activado. Para activarlo puede parar el servicio, entrar al port, desinstalarlo, activar la opcion e instalarlo nuevamente sin problema

# /usr/local/etc/rc.d/icinga stop
# cd /usr/ports/net-mgmt/icinga
# make deinstall clean

# make config

Options for icinga 1.7.0_2

Activamos las siguientes opciones

[X] EMBEDDED_PERL   "Enable embedded Perl"
[X] IDOUTILS        "Enable IDOUtils"
[X] MYSQL           "Depend on MySQL"

# make install clean

Note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

Crear la DB llamada icinga

$ mysqladmin -uroot create icinga

Le damos permisos al usuario icinga con clave icinga en la DB llamada icinga

$ mysql -uroot -e"GRANT ALL ON icinga.* TO icinga@localhost IDENTIFIED BY 'icinga'" icinga

Creamos los archivos a partir de los de ejemplo

# cp /usr/local/etc/icinga/idomod.cfg-sample /usr/local/etc/icinga/idomod.cfg
# cp /usr/local/etc/icinga/ido2db.cfg-sample /usr/local/etc/icinga/ido2db.cfg

Activar el modulo broker de icinga editando el archivo

# edit /usr/local/etc/icinga/icinga.cfg

La linea original (esta opcion esta en la linea 269)

#broker_module=/usr/local/lib/idomod.so config_file=/usr/local/etc/icinga/idomod.cfg

La activamos quitando el # del principio, de modo que queda asi

broker_module=/usr/local/lib/idomod.so config_file=/usr/local/etc/icinga/idomod.cfg

Importar el esquema de la DB para icinga

Note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

$ mysql --user=icinga --password=icinga icinga < /usr/local/share/examples/icinga/idoutils/db/mysql/mysql.sql

Hacer que inicie con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

ido2db_enable="YES"

Iniciar ido2db

# /usr/local/etc/rc.d/ido2db start

Si nos regresa este error

Could not bind socket: Address already in use

Borrar el archivo /var/spool/icinga/ido.sock

# rm /var/spool/icinga/ido.sock

Y tratar de iniciar el servicio nuevamente

# /usr/local/etc/rc.d/ido2db start

Iniciar Icinga

# /usr/local/etc/rc.d/icinga start

Hacer backup de la DB icinga
# mysqldump --user=icinga --password=icinga icinga > /usr/home/backups/icinga.sql

Importarlo, note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

$ mysql --user=icinga --password=icinga icinga < /usr/home/backups/icinga.sql

Algunos ajustes opcionales:

statusmap http://docs.icinga.org/latest/en/configcgi.html

# edit /usr/local/etc/icinga/cgi.cfg

ajustamos la linea

default_statusmap_layout=5

la podemos cambiar por 3 (Balanced tree) para que siempre nos muestre de esa forma el mapa.

Actualizacion
Luego de un tiempo se necesito que dos elementos en icinga reportaran a un email diferente, para hacer esto

# edit /usr/local/etc/icinga/objects/contacts.cfg

En la seccion CONTATS agrego al final de icingaadmin las entradas
...
define contact{
        contact_name                    jdoe
        use                             generic-contact
        alias                           John Doe (Sistemas)

        email                           john.doe@gmail.com
        }

define contact{
        contact_name                   jsmith
        use                             generic-contact
        alias                           John Smith (Sistemas)

        email                           john.smith@gmail.com
        }

define contact{
        contact_name                   jroe
        use                             generic-contact
        alias                           Jane Roe (Ingenieria)

        email                           jane.roe@gmail.com
        }

En la seccion CONTACT GROUPS agrego al final de admins las entradas
...
define contactgroup{
        contactgroup_name       sistemas
        alias                   Soporte Sistemas
        members                 jdoe, jsmith
        }

define contactgroup{
        contactgroup_name       ingenieria
        alias                   Ingenieria
        members                jroe
        }

Ejemplo de la entrada para un equipo

# edit /usr/local/etc/icinga/conf.d/equipment.cfg

define host{
        host_name                       alpha
        alias                           HP ProLiant ML370G4
        icon_image                      freebsd40.png
        icon_image_alt                  FreeBSD
        vrml_image                      freebsd40.png
        statusmap_image                 freebsd40.gd2   ; El que se ve en el mapa (.gd2 o .png)
       #2d_coords                       x_coord,y_coord         ; Example 100,250
        2d_coords                       100,125
        notes                           Servidor principal
        notes_url                       /glpi
        action_url                      /public
        address                         192.168.16.1
       #parents
        hostgroups                      network-server
        check_command                   check-host-alive
        check_interval                  5
        retry_interval                  1
        max_check_attempts              5
        check_period                    24x7
        process_perf_data               0
        retain_nonstatus_information    0
       #contact_groups                  admins
        contact_groups                  sistemas   ; Este solo reporta a sistemas
        notification_interval           30
        notification_period             24x7
        notification_options            d,u,r
        }

Si quiero que reporte a sistemas y a ingenieria, la linea contact_groups es asi

contact_groups                  sistemas, ingenieria

O si solo reporta a ingenieria, la linea es

contact_groups                 ingenieria