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