nagios nagios3 monitorizacion smp http
====== Nagios ======
nagios monitorizacion nagios3 snmp
http://nagiosplug.sourceforge.net/developer-guidelines.html
Es una herramienta de monitorización tanto de recursos privados
===== Instalación =====
  sudo aptitude update && sudo aptitude install nagios3
===== Objetos =====
http://nagios.sourceforge.net/docs/3_0/configobject.html
^ Nombre ^ Descripción ^ Ubicación (1) ^
| Anfitrión | Define una máquina | /etc/nagios3/conf.d |
| Contacto | Define una persona, con su correo eletrónico, al que le llegarán los avisos | /etc/nagios3/conf.d |
| Grupo de contactos | Define una grupo de contactos | /etc/nagios3/conf.d |
| Comando | Comando personalizado de nagios que, por ejemplo, hace un ping a una máquina | /etc/nagios-plugins/config |
| Servicio | Define el comando que se le aplicará a un anfitrión determinado, y el contacto al que se notificará el resultado | /etc/nagios3/conf.d |
(1) Depende de que en el archivo
  /etc/nagios3/nagios.cfg
Esté la directiva:
  cfg_dir=/etc/nagios3/conf.d
**IMPORTANTE**
1. Se pueden crear subdirectorios en /etc/nagios3/conf.d, pero
2. Todos los archivos de configuración tienen que acabar en .cfg
===== Anfitrión =====
Por ejemplo creamos el siguiente archivo:
  sudo vim /etc/nagios3/conf.d/maquina1
Con el siguiente contenido:
define host{
	use	generic-host	; Inherit default values from a template
	host_name	maquina1	; The name we're giving to this host
	alias	Ejemplo de anfitrión	; A longer name associated with the host
	address	maquina1.mine.nu	; IP address of the host
	}
Grabamos y salimos.
===== Contacto =====
Editamos el archivo que viene por defecto:
  nano /etc/nagios3/conf.d/contacts_nagios2.cfg
Y creamos el nuestro:
define contact{
        alias                           administrador1
        contact_name                    administrador1
        email                           cuenta@dominio.com
        host_notification_commands      notify-host-by-email
        host_notifications_enabled      1
        host_notification_options       d,r
        host_notification_period        24x7
        service_notification_commands   notify-service-by-email
        service_notifications_enabled   1
        service_notification_options    w,u,c,r
        service_notification_period     24x7
        }
Grabamos y salimos
===== Grupo de contactos =====
Editamos el archivo que viene por defecto:
  nano /etc/nagios3/conf.d/contacts_nagios2.cfg
Y creamos el nuestro:
define contactgroup{
        contactgroup_name       administradores
        alias                   Administradores de Nagios
        members                 administrador1
        }
Grabamos y salimos
===== Comandos =====
De momento no he creado ninguno, veamos solo un ejemplo:
  cat /etc/nagios-plugins/config/ping.cfg
Y entre otros comandos, tenemos 'check-host-alive':
# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% $
        }
===== Servicios =====
Creamos el siguiente archivo:
  nano /etc/nagios3/conf.d/esta_vivo.cfg
Con el siguiente contenido:
define service{
        check_command   check-host-alive
        contacts        contacto1
        host_name       maquina1
        service_description     HTTP
        use             generic-service ; Inherit default values from a template
        }
Grabamos y salimos
===== Monitorizar los servicios locales de una máquina remote: NRPE =====
http://debianclusters.org/index.php/Nagios_NRPE_Addon_Installation_and_Configuration
1. En la maquina local (la que tiene instalada nagios):
Instalar nrpe-plugin:
  sudo aptitude update && sudo aptitude install nagios-nrpe-plugin
Echarle un ojo a este archivoÑ
  /etc/nagios-plugins/config/check_nrpe.cfg
Reiniciar el servicio:
  sudo /etc/init.d/nagios3 restart
2. En la máquina remota:
Instalar nrpe (y plugins):
  sudo aptitude update && sudo aptitude install nagios-nrpe-server nagios-plugins
Crear archivo de configuración:
  sudo vim /etc/nagios/nrpe_local.cfg
Con el siguiente contenido:
allowed_hosts=monitor.jj.com
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 10 -c 1
En este caso habilitamos el comando 'check_disk' con los parámetros por defecto. 
**RECOMENDADO**: También lo podemos hacer editando:
  sudo vim /etc/nagios/nrpe.cfg
Reiniciar el servicio:
  /etc/init.d/nagios-nrpe-server restart
3. Probarlo. Desde la máquina local:
Para probar que nrpe este arriba:
  /usr/lib/nagios/plugins/check_nrpe -H test.jj.com -c check_users
Para probar el comando antes habilitado:
  /usr/lib/nagios/plugins/check_nrpe -H test.jj.com -c check_disk
===== Ejemplo: comprobar si una máquina está levantada =====
En este ejemplo vamos a crear un anfitrión que no existe para probar que nos envía un correo avisando de que está caído.
**REQUISITO** [[informatica:linux:correo:postfix|Tener un servidor de correo instalado en la misma máquina en la que se está ejecutando nagios]]
1. Creamos un anfitrión. Creamos el siguiente archivo:
  nano /etc/nagios3/conf.d/mi_maquina.cfg
Con el siguiente contenido:
define host{
	use	generic-host	; Inherit default values from a template
	host_name	mi_maquina	; The name we're giving to this host
	alias	Esta máquina no existe	; A longer name associated with the host
	address	noexiste.mine.nu	; IP address of the host
	}
2. Creamos un nuevo contacto editando el archivo:
  nano /etc/nagios3/conf.d/contacts_nagios2.cfg
Con el siguiente contenido:
define contact{
        alias                           contacto1
        contact_name                    contacto1
        email                           cuenta@dominio.com
        host_notification_commands      notify-host-by-email
        host_notifications_enabled      1
        host_notification_options       d,r
        host_notification_period        24x7
        service_notification_commands   notify-service-by-email
        service_notifications_enabled   1
        service_notification_options    w,u,c,r
        service_notification_period     24x7
        }
Grabamos y salimos
3. Creamos un servicio. Para ello vamos a usar el archivo:
  /etc/nagios-plugins/config/ping.cfg
Que tiene el comando 'check-host-alive':
...
	# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% $
        }
...
Creamos el siguiente archivo:
  nano /etc/nagios3/conf.d/esta_vivo.cfg
Con el siguiente contenido:
define service{
        check_command   check-host-alive
        contacts        contacto1
        host_name       mi_maquina
        service_description     HTTP
        use             generic-service ; Inherit default values from a template
        }
Grabamos y salimos
4. Verificamos la configuración:
	
  nagios3 -v /etc/nagios3/nagios.cfg
Salida si la cosa va bien:
	
	Nagios Core 3.2.0
Copyright (c) 2009 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 08-12-2009
License: GPL
Website: http://www.nagios.org
Reading configuration data...
   Read main config file okay...
Processing object config file '/etc/nagios3/commands.cfg'...
Processing object config directory '/etc/nagios-plugins/config'...
Processing object config file '/etc/nagios-plugins/config/users.cfg'...
Processing object config file '/etc/nagios-plugins/config/games.cfg'...
Processing object config file '/etc/nagios-plugins/config/ping.cfg'...
Processing object config file '/etc/nagios-plugins/config/mrtg.cfg'...
Processing object config file '/etc/nagios-plugins/config/vsz.cfg'...
Processing object config file '/etc/nagios-plugins/config/netware.cfg'...
Processing object config file '/etc/nagios-plugins/config/telnet.cfg'...
Processing object config file '/etc/nagios-plugins/config/rpc-nfs.cfg'...
Processing object config file '/etc/nagios-plugins/config/mysql.cfg'...
Processing object config file '/etc/nagios-plugins/config/http.cfg'...
Processing object config file '/etc/nagios-plugins/config/mail.cfg'...
Processing object config file '/etc/nagios-plugins/config/dhcp.cfg'...
Processing object config file '/etc/nagios-plugins/config/breeze.cfg'...
Processing object config file '/etc/nagios-plugins/config/nt.cfg'...
Processing object config file '/etc/nagios-plugins/config/pgsql.cfg'...
Processing object config file '/etc/nagios-plugins/config/ssh.cfg'...
Processing object config file '/etc/nagios-plugins/config/ifstatus.cfg'...
Processing object config file '/etc/nagios-plugins/config/ldap.cfg'...
Processing object config file '/etc/nagios-plugins/config/radius.cfg'...
Processing object config file '/etc/nagios-plugins/config/snmp.cfg'...
Processing object config file '/etc/nagios-plugins/config/dummy.cfg'...
Processing object config file '/etc/nagios-plugins/config/real.cfg'...
Processing object config file '/etc/nagios-plugins/config/tcp_udp.cfg'...
Processing object config file '/etc/nagios-plugins/config/disk.cfg'...
Processing object config file '/etc/nagios-plugins/config/dns.cfg'...
Processing object config file '/etc/nagios-plugins/config/news.cfg'...
Processing object config file '/etc/nagios-plugins/config/flexlm.cfg'...
Processing object config file '/etc/nagios-plugins/config/hppjd.cfg'...
Processing object config file '/etc/nagios-plugins/config/procs.cfg'...
Processing object config file '/etc/nagios-plugins/config/apt.cfg'...
Processing object config file '/etc/nagios-plugins/config/ftp.cfg'...
Processing object config file '/etc/nagios-plugins/config/fping.cfg'...
Processing object config file '/etc/nagios-plugins/config/disk-smb.cfg'...
Processing object config file '/etc/nagios-plugins/config/load.cfg'...
Processing object config file '/etc/nagios-plugins/config/ntp.cfg'...
Processing object config directory '/etc/nagios3/conf.d'...
Processing object config file '/etc/nagios3/conf.d/extinfo_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/host-gateway_nagios3.cfg'...
Processing object config file '/etc/nagios3/conf.d/cntmalaga.cfg'...
Processing object config file '/etc/nagios3/conf.d/timeperiods_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/generic-host_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/generic-service_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/hostgroups_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/contacts_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/services_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/localhost_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/esta_vivo.cfg'...
   Read object config files okay...
Running pre-flight check on configuration data...
Checking services...
	Checked 8 services.
Checking hosts...
	Checked 3 hosts.
Checking host groups...
	Checked 5 host groups.
Checking service groups...
	Checked 0 service groups.
Checking contacts...
	Checked 1 contacts.
Checking contact groups...
	Checked 1 contact groups.
Checking service escalations...
	Checked 0 service escalations.
Checking service dependencies...
	Checked 0 service dependencies.
Checking host escalations...
	Checked 0 host escalations.
Checking host dependencies...
	Checked 0 host dependencies.
Checking commands...
	Checked 154 commands.
Checking time periods...
	Checked 4 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors:   0
Things look okay - No serious problems were detected during the pre-flight check
5. Reiniciamos nagios:
  /etc/init.d/nagios3 restart
6. Y ahora a esperar y ver los logs:
  clear && cat /var/log/nagios3/nagios.log | tail
Debería aparecer, al cabo de unos minutos, las siguientes lineas:
[1257947560] Finished daemonizing... (New PID=15385)
[1257947590] HOST ALERT: mi_maquina;DOWN;SOFT;2;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257947660] HOST ALERT: mi_maquina;DOWN;SOFT;3;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257947730] HOST ALERT: mi_maquina;DOWN;SOFT;4;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257947800] HOST ALERT: mi_maquina;DOWN;SOFT;5;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257947870] HOST ALERT: mi_maquina;DOWN;SOFT;6;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257947940] HOST ALERT: mi_maquina;DOWN;SOFT;7;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257948010] HOST ALERT: mi_maquina;DOWN;SOFT;8;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257948080] HOST ALERT: mi_maquina;DOWN;SOFT;9;check_ping: Invalid hostname/address - mi_maquina.mine.nu
[1257948150] HOST ALERT: mi_maquina;DOWN;HARD;10;check_ping: Invalid hostname/address - mi_maquina.mine.n
u
[1257948150] HOST NOTIFICATION: contacto1;mi_maquina;DOWN;notify-host-by-email;check_ping: Invalid hostname/ad
dress - mi_maquina.mine.nu
En ese momento se le envía un correo a 'cuenta@dominio.com' con el siguiente contenido:
***** Nagios *****
Notification Type: PROBLEM
Host: mi_maquina
State: DOWN
Address: noexiste.mine.nu
Info: check_ping: Invalid hostname/address - noexiste.mine.nu
Date/Time: Wed Nov 11 16:24:17 CET 2009
===== Ejemplo: comprobar si existe un proceso local =====
**Comprobar** No sé si se necesita el paquete 'nagios-nrpe-plugin'
Queremos comprobar si en la misma máquina que está corriendo nagios existe el proceso 'noexiste'
1. Creamos el comando, a partir del archivo:
  nano /etc/nagios3/conf.d/comprobar_noexiste.cfg
Le damos el siguiente contenido:
define command{
        command_name    comprobar_noexiste
        command_line    /usr/lib/nagios/plugins/check_procs -c 1:1 -C noexiste
        }
2. Grabamos y salimos
3. Creamos el servicio (sobre la máquina y el contacto que ya tenemos creados de ejemplos anteriores):
  nano /etc/nagios3/conf.d/noexiste.cfg
Le damos el siguiente contenido:
define service{
        check_command   comprobar_noexiste
        contacts        contacto1
        host_name       mi_maquina
        service_description     Comprobar si existe el proceso noexiste
        use             generic-service ; Inherit default values from a template
        }
4. Grabamos y salimos
5. Verificamos la configuración:
	
  nagios3 -v /etc/nagios3/nagios.cfg
6. Reiniciamos nagios:
  /etc/init.d/nagios3 restart
7. Y ahora a esperar y ver los logs:
  clear && cat /var/log/nagios3/nagios.log | tail
...
[1258042842] SERVICE ALERT: mi_maquina;Comprobar si existe el proceso noexiste;OK;HARD;4;PROCS OK: 1 process with command name 'noexiste'
[1258042842] SERVICE NOTIFICATION: contacto1;Comprobar si existe el proceso noexiste;OK;notify-service-by-email;PROCS OK: 1 process with command name noexiste
...
En ese momento se le envía un correo a 'cuenta@dominio.com' con el siguiente contenido:
***** Nagios *****
Notification Type: PROBLEM
Host: mi_maquina
State: DOWN
Address: noexiste.mine.nu
Info: check_ping: Invalid hostname/address - noexiste.mine.nu
Date/Time: Wed Nov 11 16:24:17 CET 2009
***** Nagios *****
Notification Type: PROBLEM
Service: Comprobar si la mula está corriendo
Host: Servidor local
Address: 192.168.1.2
State: CRITICAL
Date/Time: Thu Nov 12 17:15:44 CET 2009
Additional Info:
PROCS CRITICAL: 0 processes with command name noexiste
===== Ejemplo: comprobar si una partición está llena =====
**Comprobar** No sé si se necesita el paquete 'nagios-nrpe-plugin'
Queremos comprobar si en la misma máquina que está corriendo nagios una o más particiones tienen menos de x porcentaje de espacio libre.
1. Creamos el comando, a partir del archivo:
  nano /etc/nagios3/conf.d/comprobar_espacio.cfg
Le damos el siguiente contenido:
define command{
        command_name    comprobar_espacio
        command_line    /usr/lib/nagios/plugins/check_disk -w $ARG1$% -c $ARG2$% -p $ARG3$
        }
2. Grabamos y salimos
3. Creamos el servicio (sobre la máquina y el contacto que ya tenemos creados de ejemplos anteriores):
  nano /etc/nagios3/conf.d/espacio_root_mi_maquina.cfg
Le damos el siguiente contenido:
define service{
        check_command   comprobar_espacio!20!95!/
        contacts        contacto1
        host_name       mi_maquina
        service_description     Partición / llena
        use             generic-service ; Inherit default values from a template
        }
Nagios enviará un 'aviso' del tipo warning si queda menos del 20% de espacio libre, y uno del tipo 'critical' si queda menos del 95%.
Lógicamente es solo para comprobar que funciona, luego se debe cambiar a valores más bajos, como 20% y 5%, por ejemplo.
4. Grabamos y salimos
5. Verificamos la configuración:
	
  nagios3 -v /etc/nagios3/nagios.cfg
6. Reiniciamos nagios:
  /etc/init.d/nagios3 restart
7. Y ahora a esperar y ver los logs:
  clear && cat /var/log/nagios3/nagios.log | tail
...
[1258385009] SERVICE ALERT: mi_maquina;Partición / llena;CRITICAL;SOFT;3;DISK CRITICAL - free space: / 4510 MB (72% inode=88%):
[1258385069] SERVICE NOTIFICATION: contacto1;mi_maquina;Partición / llena;CRITICAL;notify-service-by-email;DISK CRITICAL - free space: / 4510 MB (72% inode=88%):
...
En ese momento se le envía un correo a 'cuenta@dominio.com' con el siguiente contenido:
***** Nagios *****
Notification Type: PROBLEM
Service: Partición / llena
Host: Servidor local
Address: 192.168.1.2
State: CRITICAL
Date/Time: Mon Nov 16 16:24:29 CET 2009
Additional Info:
DISK CRITICAL - free space: / 4510 MB (72% inode=88%):
===== Configurar interfaz web =====
Queremos acceder a nagios desde una interfaz gráfica. Para ello instalamos apache2 en la misma máquina:
1. Instalar apache2
  sudo aptitude install apache2 -R
2. Crear un usuario:
  sudo htpasswd /etc/apache2/contrasenyas miusuario
Teclear dos veces la contraseña
3. Crear el siguiente archivo:
  sudo vim /etc/apache2/apache2.conf/nagios3.conf
Con el siguiente contenido:
ScriptAlias /cgi-bin/nagios3 /usr/lib/cgi-bin/nagios3
ScriptAlias /nagios3/cgi-bin /usr/lib/cgi-bin/nagios3
# Where the stylesheets (config files) reside
Alias /nagios3/stylesheets /etc/nagios3/stylesheets
# Where the HTML pages live
Alias /nagios3 /usr/share/nagios3/htdocs
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride AuthConfig
    Order Allow,Deny
    Allow From All
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /etc/apache2/contrasenyas
    require valid-user
4. Recargar la configuración de apache:
  sudo apache2ctl reload
5. Probar:
  http://localhost/nagios3