Archivos Mensuales: septiembre 2011

BASH: Dos trucos para chequear sintaxis de un script usando set y las variables noexec y xtrace

El comando set nos permite establecer o visualizar el contenido de las variables de shell.

si tecleamos ‘set -o’ veremos la lista de dichas variables y su valor:


[root@xxxx]# set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

Hay dos variables qeu nos van a ayudar a hacer un buen debug de nuestros shell scripts: noexec y xtrace.

Si activamos la variable noexec, podremos ejecutar un script sin que se ejecute ningún comando que contenga, aunque sí seguirá las estructuras de control (if, while, for.. ). Este comando no funciona en modo interactivo, es decir, solo lo podemos ejecutar dentro de un script:

Aqui tenemos un ejemplo. Todo lo que esté por debajo de ‘set -n’ no lo va a ejecutar, aunque sí que sigue el flujo hasta el final del script. Sólamente nos ayuda a chequear la sintaxis. Si hubiera un error en el if, lo veríamos por pantalla.


echo "Entramos en el script"
set -n
fichero="/tmp/fich.txt"
if [ -f $fichero ]
then
        echo "El fichero existe, mostramos su contenido";
        cat $fichero;
else
        echo "El fichero no existe, lo creamos";
        date > $fichero;
fi

al ejecutarlo vemos esto:


[root@xxx]# sh pruebaset.sh
Entramos en el script

Si cometieramos el error de, en lugar de escribir ‘if’, escribir ‘i’:


i [ -f $fichero ]

Veriamos esto:


[root@xxxx ]# sh pruebaset.sh
Entramos en el script
pruebaset.sh: line 5: syntax error near unexpected token `then'
pruebaset.sh: line 5: `then'

La otra variable molona es xtrace. Si activamos dicha variable, por cada comando o estructura de control, veremos una traza de lo que hace. Nos ayudará a debuguear el script en caso de errores con variables, etc.

ej:


set -x
echo "Entramos en el script"
fichero="/tmp/fich.txt"
if [ -f $fichero ]
then
        echo "El fichero existe, mostramos su contenido";
        cat $fichero;
else
        echo "El fichero no existe, lo creamos";
        date > $fichero;
fi

En una primera ejecución veríamos esto:


[root@xxx]# sh pruebaset.sh
+ echo 'Entramos en el script'
Entramos en el script
+ fichero=/tmp/fich.txt
+ '[' -f /tmp/fich.txt ']'
+ echo 'El fichero no existe, lo creamos'
El fichero no existe, lo creamos
+ date

Y en una segunda:


[root@xxx]# sh pruebaset.sh
+ echo 'Entramos en el script'
Entramos en el script
+ fichero=/tmp/fich.txt
+ '[' -f /tmp/fich.txt ']'
+ echo 'El fichero existe, mostramos su contenido'
El fichero existe, mostramos su contenido
+ cat /tmp/fich.txt
Fri Sep 30 11:02:06 CEST 2011

Una de las cosas bonicas de xtrace es que también se puede activar en modo interactivo para debuguear errores en comandos.

Un saludo.

MiJacK.

Nagios, Alta de una nueva maquina.

Vamos a poner en marcha un ejemplo real y vamos a ver todos los ficheros de configuración y entidades que participan en el proceso.

Queremos que nagios comprube la disponibilidad de la máquina con ip 192.168.183.1 al que denominaremos ‘servidor’. Comprobaremos la disponibilidad de dicha maquina mediante ping.

Se estableceran chequeos cada 5 minutos. Si la maquina estuviera down, volvería a chequear a cada 2 minutos.
Al 3º intento, se envíaria un mail a los operadores.

Al recuperarse la máquina, los operadores también recibirán un email confirmando la recuperación.

creamos el fichero servidor.cfg en el directorio hosts con el siguiente contenido:


define host{
use linux-server
host_name servidor
alias Servidor principal
address 192.168.183.1
}

comprobamos la configuración de Nagios:


/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg

Veremos esto:

[...]
Warning: Host ‘servidor’ has no services associated with it!
[...]
Total Warnings: 1
Total Errors: 0

Simplemente veremos un warning que nos indica que el Host servidor no tiene servicios asociados. Más tarde lo solucionaremos.

Reiniciamos Nagios para que los cambios tengan efecto


/etc/init.d/nagios restart

En la alta de este host ha tomado parte la siguiente entidad:

linux-server (plantilla).

Si editamos el fichero templates.cfg, podremos ver que se define en esa plantilla:


define host{
name linux-server
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period workhours 

notification_interval 120
notification_options d,u,r
contact_groups admins
register 0
}

Vemos que la plantilla linux-server, hereda a su vez la configuración de la plantilla generic-host. La plantilla generic host, define una serie de opciones principales, entre otras, el periodo de notificacion 24×7.

Además, en la plantilla linux-server, definimos el periodo de chequeo 24×7, un intervalo de 5 minutos entre chequeos, intervalo de 1 minuto tras un fallo, un máximo de 10 intentos, tras el que se envíara una alerta, el comando de chequeo, el periodo de notificación, intervalo, opciones, y contactos. Por último, register 0 indica que esta definición no ha de registrarse en el sistema como un elemento, por lo que sólo formará parte de las plantillas.

Todos estos elementos, están definidos en diferentes ficheros de configuración, tal como vimos en los capítulos anteriores.

En el interfaz web de nagios, si vamos a la seccion hosts, veremos el nuevo host creado:

 

Nagios – Introducción.

Instalación y configuración de Nagios Sobre Debian 6

Según Wikipedia, Nagios es:

Nagios es un sistema de monitorización de redes de código abierto ampliamente utilizado, que vigila los equipos (hardware) y servicios (software) que se especifiquen, alertando cuando el comportamiento de los mismos no sea el deseado. Entre sus características principales figuran la monitorización de servicios de red (SMTP, POP3, HTTP, SNMP…), la monitorización de los recursos de sistemas hardware (carga del procesador, uso de los discos, memoria, estado de los puertos…), independencia de sistemas operativos, posibilidad de monitorización remota mediante túneles SSL cifrados o SSH, y la posibilidad de programar plugins específicos para nuevos sistemas.

Tengo más de un año de experiencia administrando Nagios: Instalación, labor de investigación y mantenimiento, que incluye la creación de script para chequear diferentes tipos de servicios, bocas de switch, procesos lanzados en un servidor, etc.

Dicho sistema chequeaba servicios en una granja de unos 200 servidores, avisando en caso de fallo vía email o SMS al técnico de guardia para proceder a solucionar el error.

Voy a intentar dejar aquí a forma de nota, instrucciones básicas de configuración de Nagios.

El funcionamiento de nagios puede resultar un poco enrevesado y la curva de aprendizaje un poco dura al principio es por ello que es importante comprender su funcionamiento interno.

Hay diferentes entidades relacionadas con la configuración de Nagios. Aunque mi documentación se basa en ficheros, voy a proceder a explicar las diferentes entidades que forman aprte de la misma. Realmente toda la configuración podría estar en un sólo fichero de configuración, pero para hacerla más amigable se despieza la misma en diferentes ficheros y se usan includes para enlazar todos los ficheros en el fichero principal, nagios.cfg.

command: Define un comando de chequeo o de notificación. A esos comandos nos referimos cuando establecemos la configuracion de un nuevo chequeo.
contact: Define un contacto al que le llegará una notificación en caso de cambio de estado de uno de los chequeos.
contactgroup: Sirve para agrupar los contactos de forma que sea más sencillo gestionarlos.
host: Definimos un host, indicando su ip, nombre, etc. Podemos chequear la disponibilidad de ese host o asignarle servicios.
service: Definimos un servicio para chequear. Dicho servicio siempre irá asignado a un host.
template: Define las plantillas que mas tarde heredarán las entidades. Sirve para facilitar la configuración.
timeperiod: Define un periodo de tiempo personalizado, tanto para chequeos como para alertas.

Nagios – Contacts, templates y time periods

Los ficheros de configuración a tratar en este capítulo serán contacts.cfg, templates.cfg y timeperiods.cfg.

contacts.cfg:

En el fichero contacts podemos definir tanto contactos como grupos de contactos.

Los grupos de contactos aquí definidos podrán ser luego aplicados a las plantillas para establecer quien recibirá las notificaciones.

Ejemplo de contactos y grupo de contacto:


define contact{
        contact_name                    oper1
        use                             generic-contact        
        alias                           Nagios oper number one
        email                           operador.1@dominios.com
        }

define contact{
        contact_name                    oper2
        use                             generic-contact        
        alias                           Nagios oper number two
        email                           operador.2@dominios.com
        }

En este ejemplo, registramos los contactos oper1 y oper2. definimos sus emails. El resto de opciones las va a coger de la plantilla generic-contact.


define contactgroup{
        contactgroup_name       operadores
        alias                   Nagios operators
        members                 oper1,oper2
        }

En este ejemplo, registramos en el grupo operadores, a los usuarios oper1 y oper2.

A partir de este momento, en las plantillas, al definir un fichero, podremos asignarle el grupo operadores, que heredará la configuración definida en el contacto generic-contact, también definido en templates.

templates.cfg:

Templates es un fichero donde podremos definir las plantillas, de todas las entidades con las que trabajamos en Nagios.

Vamos a ver un ejemplo con una plantilla de servicio:

En esta plantilla definimos generic-service:


define service{
        name                            generic-service         
        active_checks_enabled           1                       
        passive_checks_enabled          1                       
        parallelize_check               1                       
        obsess_over_service             1                       
        check_freshness                 0                       
        notifications_enabled           1                       
        event_handler_enabled           1                       
        flap_detection_enabled          1                       
        failure_prediction_enabled      1                       
        process_perf_data               1                       
        retain_status_information       1                       
        retain_nonstatus_information    1                       
        is_volatile                     0                       
        check_period                    24x7                    
        max_check_attempts              3                       
        normal_check_interval           10                      
        retry_check_interval            2                       
        contact_groups                  admins, operadores                
        notification_options            w,u,c,r                 
        notification_interval           60                      
        notification_period             24x7                    
         register                        0                      
        }

Al definir mas tarde un servicio, le diremos que utilice la plantilla generic-service.

Podemos definir diferentes tipos de plantillas para diferentes tipos de chequeo. Por ejemplo, servicio-noche y servicio-dia, en los que definiríamos dos checkperiods diferentes (con diferentes time periods), para que uno tuviera un chequeo de diferente intensidad dependiendo de la hora.

quedaría algo asi:


define service{
        name                            generic-service-day         
        check_period                    dia
        max_check_attempts              3                       
        normal_check_interval           5                      
        retry_check_interval            2                       
        }
define service{
        name                            generic-service-night
        check_period                    noche
        max_check_attempts              10                       
        normal_check_interval           10                      
        retry_check_interval            5                       
        }

De esta forma, tenemos las plantillas generic-service-day y generic-service-night, las cuales podremos aplicar a los chequeos, de forma que por la noche el chequeo sea menos intenso que por el día y ante servicios que se recuperan solos tras una caida, tendremos menos posibilidades de que nos despierten ;) .

timeperiods.cfg

Con lo visto en el ejemplo anterior, ya sabemos que podemos definir diferentes time_periods, aplicables tanto a chequeos de host y servicio, como a envio de notificaciones.

el típico timeperiod 24×7, definido por defecto es así:


define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

Pasamos a definir dos timeperiods personalizados: day y night:

define timeperiod{
        timeperiod_name day
        alias           solo durante horario de oficina
        sunday          09:00-16:59
        monday          09:00-16:59
        tuesday         09:00-16:59
        wednesday       09:00-16:59
        thursday        09:00-16:59
        friday          09:00-16:59
        saturday        09:00-16:59
        }

define timeperiod{
        timeperiod_name night
        alias           Fuera del horario de oficina
        sunday          17:01-08:59
        monday          17:01-08:59
        tuesday         17:01-08:59
        wednesday       17:01-08:59
        thursday        17:01-08:59
        friday          17:01-08:59
        saturday        17:01-08:59
        }

Iphone 3G. Jailbreak + UnLock

Este fin de semana me he hecho con un Iphone 3g de los viejunos. El iphone fue comprado con movistar, por lo que no podía utilizar mi tarjeta de Yoigo. Tras unas cuantas horas documentandome (Mi primer iphone, mi primer Jailbreak), he conseguido actualizar ios, hacer el Jailbreak y el Unlock.

Paso a describir los pasos que he seguido. Primero, un pequeño glosario

Jailbreak:Jailbreak (en español, escaparse de la cárcel o, desbloqueo) es un proceso que permite a los usuarios de los dispositivos iPhone desbloquear el dispositivo para ejecutar aplicaciones distintas a las alojadas en App Store, así como instalar extensiones de aplicaciones y complementos del Sistema Operativo (iOS). En nuestro caso, nos permite instalar la aplicación ‘Cydia’ (http://cydia.saurik.com/), que incorpora mejoras sobre el iOS original.

Unlock: El término unlock se refiere a la eliminación del bloqueo que las compañías telefónicas ponen en los dispositivos que venden, de forma que no el terminal no se pueda utilizar con una tarjeta SIM de otra compañía.

iOS: (anteriormente denominado iPhone OS) es un sistema operativo móvil de Apple desarrollado originalmente para el iPhone, siendo después usado en todos los dispositivos iPhone, iPod Touch e iPad. Es un derivado de Mac OS X, que a su vez está basado en Darwin BSD. Otro sistema *NIX, al fin y al cabo, pero muy propietario.

Baseband: Parte del iOS que se encarga de las comunicaciones. Hasta ahora todas las liberaciones por software implican modificar el baseband.

Firmware: Cambiar el firmware implica, actualizar la versión del sistema operativo, pero no implica actualizar el BaseBand. En nuestro caso, vamos a instalar siempre Firmwares ‘cocinados’, es decir, modificados para que hagan lo que queremos, en nuestro caso, el unlock de la sim.

modo DFU: El modo DFU, es un modo especial de recuperación del iPhone, podemos encontrar el método en el que activarlo en muchos sitios y videos en Youtube, no tiene pérdida. (http://www.esferaiphone.com/tutoriales/modo-dfu/)

Fuente: wikipedia, google, e incluso, Yahoo respuestas.

Procedimiento para el JailBreak + UnLock. (Al menos el que he seguido yo)

1 – Actualizar nuestro firmware a la última versión desde iTunes.

2 – comprobar si nuestra versión de iphone es compatible con los dos metodos. Podemos utilizar esta web: http://jailbreak-me.info/jailbreak-and-unlock-wizard.html

3 – Descargar el firmware cocinado que coincida con nuestra versión desde aqui: http://www.felixbruns.de/iPod/firmware/

4 – Nos descargamos y ejecutamos el programa redsn0w. Nos pedirá el ficheor descargado en el paso anterior. Nos pedirá entrar en modo DFU. El resto ya lo hace él.

5 – El sistema se reiniciará. Parecerá que no ha pasado nada, pero tendremos instalada una nueva app, Cydia. La ejecutamos. Tardará un rato. Una vez que termine, entramos de nuevo. Nos preguntará si somos user, hacker o developer. Decimos que User.

6 – Para instalar la aplicación ultrasnow, que es la que nos liberará el teléfono, necesitamos estar conectados a internet. Recordad niños, wifi on, que no os pase como a mí, que en este paso he estado una hora preguntandome que pasaba :) . vamos en Cydia a “Manage” – “Sources” – “edit” – “Add” y añadimos http://repo666.ultrasn0w.com. Nos saldran unos avisos que dirán “Imposible enconrar la red movil”, los ignoramos. Una vez hecho todo esto:

7 – Desde la opcion ” ” de Cydia, buscamos e instalamos la última versión de ultrasn0w, reiniciamos el iphone y .. tachán! ya tengo linea con mi tarjeta Yoigo.

Según reinicio el iPhone, introduzco el PIN y llamo al 622 (at. cliente de Yoigo) para comprobar que tengo linea y funciona.

Por último, la activación de datos 3g.

Para yoigo es asín: Ajustes–>General–>Red. Aquí Activamos 3g, Datos Moviles e Itinerancia de Datos. Vamos a red de datos moviles y en punto de acceso escribimos “internet”.

Ya tenemos twitter.

Otros enlaces de ayuda: http://www.arturogoga.com/2010/11/29/liberar-iphone-3gs-3g-con-ios-4-2-1-con-redsn0w-ultrasn0w/ (En el que más me he basado)

Niños, si lo he hecho yo, cualquiera puede.

Un saludo.

MiJacK.

Nagios, resumen de Posts.

1 – Nagios – Introducción.
2 – Instalación y configuración de Nagios en Debian 6.
3 – Interfaz web
4 – Nagios. Ficheros de Configuracion inicial: nagios.cfg
5 – Nagios. Ficheros commands.cfg, Macros en resources.cfg y sobre nagios-plugin
6 – Contacts, templates y timeperiods
7 – Alta de nueva máquina
8 – Alta de nuevos servicios
9 – servicegroups y hostgroups

10 – Creacion de un tipo de chequeo personalizado
11 – Creación de un tipo de notificacion personalizada

Nagios Graph
Nagios mysql

Anexo:

Nagios. Comandos útiles.

Nagios. Ficheros commands.cfg, Macros en resources.cfg y sobre nagios-plugin

Como dijimos anteriormente, el fichero commands.cfg define todos los comandos que mas tarde serán utilizados por Nagios, tanto para chequear los servicios como para envíar alertas. Si necesitaramos crear un script personalizado, tendríamos que definirlo aquí.

Notificaciones:

Tomemos como ejemplo la definición del command ‘notify-host-by-email’:

Dicho comando, se encarga de notficar el cambio de estado de un host.


define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOS
TNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mai
l -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

Como vemos, solamente se define un nombre de comando y una linea de comando.

Cuando el estado de un host cambie, tal como estará definido en las plantillas, que posteriormente veamos, Nagios llamará a este comando, que mediante unas variables denominadas macros, definidas en el nucleo de Nagios, recogerá datos como el nombre de la máquina, ip de la misma, estado, email del contacto asociado a esa máquina, etc.

Las variables que se pueden utilizar en este apartado están perfectamente documentadas en este enlace

Si se diera el caso que necesitamos crear una alerta personalizada (para envío de alertas via SMS, twitter o lo que se nos ocurra), podemos definir una nueva. Este sería un ejemplo:


define command{
        command_name    notify-host-by-email
        command_line    /scripts/notify-by-twitter.pl $HOSTNAME$ $NOTIFICATIONTYPE$ $HOSTSTATE$ $HOSTADDRESS $HOSTOUTPUT$ $LONGDATETIME$ $CONTACTEMAIL$
       }

En este caso, tendríamos un script en /scripts/notify-by-twitter.pl, al que, pasandole por parametro los datos(nombre de la maquina, tipo de notificacion, estado, direccion ip, salida del chequeo que ha provocado el cambio de estado, fecha actual y email de contacto), haría ‘lo-que-sea’ en twitter, notificando la caída.

Chequeos:

Con los chequeos el funcionamiento es similar.

Cada host o servicio definido, estará ligado a una plantilla, donde se define el tipo de chequeo.

Para realizar los chequeos, disponemos de una colección de plugins, llamada nagios-plugins, ya instalados si hemos seguido este manual. Son, en su mayoría, binarios compilados de un código fuente escrita en C.

En dicha colección de chequeos está check_ping. Podemos ejecutar dicho binario en linea de comando para comprobar su comportamiento.

ej:

vmNagios:/etc/nagios/objects# /usr/local/nagios/libexec/check_ping -H google.es -w 80,80% -c 90,90%
PING OK - Packet loss = 0%, RTA = 10.73 ms|rta=10.725000ms;80.000000;90.000000;0.000000 pl=0%;80;90;0

El comando recibe vía macros tantos valores como necesite para llevar a cabo el chequeo, en este caso, solamente la variable $HOSTADDRESS$, que contiene la ip a chequear:

# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

al igual que con las notificaciones, podríamos crear comandos de chequeo personalizados:

supongamos que queremos chequear la disponibilidad de un servidor IRC remoto. Preparaíamos un script llamado check_irc.pl al que, pasando por parámetro la ip del servidor (-h ), chequearía si dicho servicio (puerto 6667) está disponible.

Así lo definiríamos en el fichero de configuración:

# 'check-irc command definition
define command{
        command_name    check-irc
        command_line    $USER1$/check_irc.pl -H $HOSTADDRESS$ 
        }

Macros en resources.cfg:

Vereis una variable llamada $USER1$. Paso a explicar qué es.

Como hemos comentado, existen una serie de variables denominadas Macros. Esas variables se incluyen en el nucleo de Nagios (documentadas aquí).

Además de las ya existentes, podemos definir nuevas macros, para ello, tendremos que editar el fichero
/etc/nagios/resource.cfg.

Existe ya una macro definida en dicho fichero, que define el directorio donde estarán instalados los scripts o binario sde nagios-plugins:


$USER1$=/usr/local/nagios/libexec

De esta forma, tendría sentido crear una Macro más, que indique donde se encuentran los scripts creados por nosotros para chequeos y notificaciones:


$USERSCRIPTS$=/scripts

Ahora, si quisieramos referirnos al script notify-by-twitter, localizado en esa ubicación, podríamos hacerlo así: $USERSCRIPTS$/notify-by-twitter.pl

Otro ejemplo claro, sería definir aquí el teléfono al que se envíaran las notificaciones via SMS.


$TELEFONO_ALERTAS_SMS$=618888888

Nagios. Ficheros de Configuracion inicial: nagios.cfg

Recuerdo que Nagios dispone de una muy buena (pero en ocasiones demasiado extensa como para sentarse un ratito a leerla) documentación. Todos los parametros que aquí incluyo están disponibles en dicha documentación.

Para evitar que el fichero de configuracion principal sea algo interminable, eliminamos comentarios y lineas en blanco y dejamos el fichero asi:

# Ficheros de configuracion
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Directorio de hosts
cfg_dir=/usr/local/nagios/etc/objects/hosts

# Parametros auxiliares de configuracion
log_file=/usr/local/nagios/var/nagios.log
object_cache_file=/usr/local/nagios/var/objects.cache
precached_object_file=/usr/local/nagios/var/objects.precache
resource_file=/usr/local/nagios/etc/resource.cfg
status_file=/usr/local/nagios/var/status.dat
status_update_interval=10
nagios_user=nagios
nagios_group=nagios
check_external_commands=1
command_check_interval=-1
command_file=/usr/local/nagios/var/rw/nagios.cmd
external_command_buffer_slots=4096
lock_file=/usr/local/nagios/var/nagios.lock
temp_file=/usr/local/nagios/var/nagios.tmp
temp_path=/tmp
event_broker_options=-1
log_rotation_method=d
log_archive_path=/usr/local/nagios/var/archives
use_syslog=1
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=0
log_external_commands=1
log_passive_checks=1
service_inter_check_delay_method=s
max_service_check_spread=30
service_interleave_factor=s
host_inter_check_delay_method=s
max_host_check_spread=30
max_concurrent_checks=0
check_result_reaper_frequency=10
max_check_result_reaper_time=30
check_result_path=/usr/local/nagios/var/spool/checkresults
max_check_result_file_age=3600
cached_host_check_horizon=15
cached_service_check_horizon=15
enable_predictive_host_dependency_checks=1
enable_predictive_service_dependency_checks=1
soft_state_dependencies=0
auto_reschedule_checks=0
auto_rescheduling_interval=30
auto_rescheduling_window=180
sleep_time=0.25
service_check_timeout=60
host_check_timeout=30
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5
retain_state_information=1
state_retention_file=/usr/local/nagios/var/retention.dat
retention_update_interval=60
use_retained_program_state=1
use_retained_scheduling_info=1
retained_host_attribute_mask=0
retained_service_attribute_mask=0
retained_process_host_attribute_mask=0
retained_process_service_attribute_mask=0
retained_contact_host_attribute_mask=0
retained_contact_service_attribute_mask=0
interval_length=60
check_for_updates=1
bare_update_check=0
use_aggressive_host_checking=0
execute_service_checks=1
accept_passive_service_checks=1
execute_host_checks=1
accept_passive_host_checks=1
enable_notifications=1
enable_event_handlers=1
process_performance_data=0
obsess_over_services=0
obsess_over_hosts=0
translate_passive_host_checks=0
passive_host_checks_are_soft=0
check_for_orphaned_services=1
check_for_orphaned_hosts=1
check_service_freshness=1
service_freshness_check_interval=60
check_host_freshness=0
host_freshness_check_interval=60
additional_freshness_latency=15
enable_flap_detection=1
low_service_flap_threshold=5.0
high_service_flap_threshold=20.0
low_host_flap_threshold=5.0
high_host_flap_threshold=20.0
date_format=us
p1_file=/usr/local/nagios/bin/p1.pl
enable_embedded_perl=1
use_embedded_perl_implicitly=1
illegal_object_name_chars=`~!$%^&*|'"<>?,()=
illegal_macro_output_chars=`~$&|'"<>
use_regexp_matching=0
use_true_regexp_matching=0
admin_email=nagios@localhost
admin_pager=pagenagios@localhost
daemon_dumps_core=0
use_large_installation_tweaks=0
enable_environment_macros=1
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/nagios.debug
max_debug_file_size=1000000

Nos centramos en las primeras lineas, donde se definen los parametros mas funcionales de Nagios. Paso a describirlos:

# Ficheros de configuracion
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Directorio de hosts
cfg_dir=/usr/local/nagios/etc/objects/hosts

Fichero objects/commands.cfg:

Define todos los comandos que mas tarde serán utilizados por Nagios, tanto para chequear los servicios como para envíar alertas. Si necesitaramos crear un script personalizado, tendríamos que definirlo aquí.

Fichero contacts.cfg:

Define los contactos y grupos de contactos de Nagios. Se podría definir un contacto como una persona. Alguien a quien hacer llegar una alerta. Los usuarios se agrupan como ‘contact groups’ para facilitar la gestión de la configuración.

Fichero timeperiods.cfg:

Define los periodos de tiempo de Nagios. Dichos periodos son aplicables tanto a los chequeos como a las alertas, permitiendo establecer diferentes periodos para diferentes casos. El ejemplo más claro sería, en caso de las alertas, la definición de una alerta que sólo se envíara en un horario concreto, por ejemplo, fuera de horario de oficina. En caso de los chequeos, se podrian definir diferentes timeperiods, por ejemplo, un chequeo que se realizara sólo en horario de oficina, para, fuera de ese horario, hacer un chequeo diferente, más o menos exhaustivo.

Fichero templates.cfg:

Define las plantillas de Nagios. Una plantilla es una forma de simplificiar la configuración de los diferentes elementos. En caso de elementos repetitivos, como por ejemplo, máquinas con un mismo perfil de chequeo, en lugar de establecer todos los parámetros (tipo de chequeo, hora de chequeo, a quién avisar en caso de caída, etc) cada vez que definimos un chequeo, se crearía una plantilla con dicho perfil, de forma que se indicaría que el nuevo chequeo, utilizaría esa plantilla en la que definimos los parámetros.

Nagios. Comandos útiles.

# Chequear la configuración de nagios:
# Esto nos será util tras un cambio de configuración.


/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg

#Si el resultado de las últimas lineas, es el mostrado debajo, podemos reiniciar sin miedo a que no arranque por fallo de la configuración:

Total Warnings: 0
Total Errors: 0

Instalación y configuración de Nagios en Debian 6. Instalación.

Parte I: Instalación del servidor Nagios.

Escenario: Partimos de un sistema Debian 6 con apache instalado.

# Creamos el usuario nagios, bajo el que correrá el demonio


adduser nagios

# instalamos las Dependencias:


apt-get install build-essential

Instalación y configuración de Nagios Sobre Debian 6

Partimos de un sistema Debian con httpd instalado.

# Dependencias:


apt-get install build-essential

# Nos bajamos la última versión de Nagios y de los plugins de http://www.nagios.org/download/


wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.3.1.tar.gz

3 Compilamos ‘As Usual’. primero los plugins y luego nagios.


tar xvzf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure && make && make install
tar xvzf nagios-3.3.1.tar.gz
cd nagios
./configure && make all
make modules install-base   install-cgis install-config install-init

#copiamos un sample de configuracion (se copiara a /usr/local/nagios/etc/)

make install-config

# comprobamos los errores que pueda haber en la configuracion (ficheros de log a crear, directorios que faltan, etc)


/usr/local/nagios/bin/nagios /usr/local/nagios/etc/ -v

# en mi caso, vemos: Error: Cannot open main configuration file ‘/usr/local/nagios/etc/’ for reading!
# cambiamos los permisos:

chown nagios:nagios /usr/local/nagios/etc/

# ahora nos dice: Warning: Cannot open log file ‘/usr/local/nagios/var/nagios.log’ for writing
#creamos el fichero:


mkdir /usr/local/nagios/var -p; touch /usr/local/nagios/var/nagios.log ; chown nagios /usr/local/nagios/var/nagios.log

# por ultimo, instalamos el init script, la configuracion de apache y la configuracion inicial de nagios:


make install-init && make install-config && make install-webconf

# Creamos el fichero htpasswd de apache para el acceso web


htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Resumen de lo instalado:


General Options:
-------------------------
       Nagios executable:  nagios
       Nagios user/group:  nagios,nagios
      Command user/group:  nagios,nagios
           Embedded Perl:  no
            Event Broker:  yes
       Install ${prefix}:  /usr/local/nagios
               Lock file:  ${prefix}/var/nagios.lock
  Check result directory:  ${prefix}/var/spool/checkresults
          Init directory:  /etc/init.d
 Apache conf.d directory:  /etc/apache2/conf.d
            Mail program:  /usr/bin/mail
                 Host OS:  linux-gnu

Web Interface Options:
------------------------
                HTML URL:  http://localhost/nagios/
                 CGI URL:  http://localhost/nagios/cgi-bin/
Traceroute (used by WAP):  /usr/sbin/traceroute

# iniciamos nagios y reiniciamos httpd.


/etc/init.d/nagios start
/etc/init.d/httpd restart

# Hecho esto, ya podemos acceder via web: http://localhost/nagios


Por comodida, creamos un enlace simbólico de n -s /usr/local/nagios/etc/ a /etc/nagios
cd /etc
ln -s /usr/local/nagios/etc/ nagios

# procedo a realizar el siguiente cambio en la configuración:


cd /etc/nagios/objects
mkdir hosts
mv localhost.cfg hosts


nano /etc/nagios/nagios.cfg

#Cambiamos:


cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

#por

cfg_dir=/usr/local/nagios/etc/objects/hosts

# De esta forma, en lugar de incluir cada nuevo host en el directorio de configuracion de nagios, y referirlo en nagios.cfg, simplemente creamos el fichero en el directorio hosts y al reiniciar lo añade a la config por defecto.

Comandos útiles:

# Chequear la configuración de nagios


/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg

#Si el resultado es este, podemos reiniciar sin miedo a que no arranque por fallo de la configuración.
Total Warnings: 0
Total Errors: 0