Gestión de Redes: Nagios
Transcript of Gestión de Redes: Nagios
Gestión de Redes: Nagios
Estos materiales están bajo la Licencia Creative Commons Atribución-No comercial 4.0 Licencia internacional (https://creativecommons.org/licenses/by-nc/4.0/deed.es_ES)
Network Startup Resource Centerwww.ws.nsrc.org
• Probablemente el software libre de monitorización más utilizado.
• Interfaz web para visualizar el estado, revisar el historial de eventos, planificar bajas por mantenimiento, etc.
• Envía alarmas por e-mail. Puede ser configurado para usar otros mecanismos (ej. SMS).
• Introducción
Nagios monitorea la disponibilidad de:• Nodos (dispositivos: pcs, servidores,
conmutadores, enrutadores, etc).
• Servicios (http, ssh, ftp, pop, etc).
• Introducción
• Nagios: Resumen Táctico
• Vista Detallada de Nodos
• Vista Detallada de Servicios
• Utiliza información topológica para determinar las dependencias. Diferencia entre lo que está abajo vs. lo que está inalcanzable. Evita hacer
chequeos innecesarios y enviar alarmas redundantes• Permite definir cómo enviar alarmas basado en una combinación
de: Contactos y listas de contactos Dispositivos y grupos de dispositivos Servicios y grupos de servicios Horarios definidos por personas y grupos. El estado de un servicio.
• Características
• Los plugins se usan para verificar servicios y nodos: La arquitectura de Nagios es lo suficientemente simple para permitir escribir
nuevos plugins en el lenguaje de su preferencia. Existen muchos, muchos plugins disponibles (miles)..
http://exchange.nagios.org/http://nagiosplugins.org/
• Plugins
/usr/lib/nagios/plugins
/etc/nagios-plugins/config
• Plugins Pre-instalados en Ubuntu
• Periódicamente Nagios ejecuta un plugin para verificar el estado de cada servicio. Las posibles respuestas son:
OK
WARNING
CRITICAL
UNKNOWN
• Si un servicio no está OK, entra en un estado de error “soft”. Después de un número de reintentos (3 por defecto), entra en un estado de error “hard”. En este momento se envía una alarma.
• Es posible también activar controladores de eventos externos basándose en las transiciones entre estados.
• Cómo funcionan los chequeos
• Parámetros
Intervalo de chequeo normal
Intervalo de reintento (i.e. cuando no está OK)
Número máximo de reintentos
Ventana de ejecución de los chequeos
Ventana para el envío de las alarmas
• Planificación de tareas Nagios distribuye sus chequeos a lo largo del intervalo para balancear
la carga
La interfaz web muestra la hora del próximo chequeo
• Cómo funcionan los chequeos (Cont.)
• Los nodos pueden tener padres:- El padre de un servidor conectado a un conmutador sería el conmutador.- Nos permite especificar las dependencias entre dispositivos.- Evita enviar alarmas cuando los padres no responden.- Un nodo puede tener varios padres (dual-homed).
• Jerarquía: El concepto de padres
• El lugar donde se coloque el servidor Nagios determinará su punto de vista de la red.
• El servidor Nagios se convierte en la raíz del árbol de dependencias jerárquicas
• Punto de Vista de Red
• Punto de Vista de Red
• Vista de Red en Árbol Colapsado
¿Reconoce esta red?
• Vista de Red en Árbol Colapsado
• Demostración de Nagios
http://noc.ws.nsrc.org/nagios3/
usuario: nagiosadmin password: lab_password
• En Debian/Ubuntu
# apt-get install nagios3
Directorios clave/etc/nagios3/etc/nagios3/conf.d/etc/nagios-plugins/config
/usr/lib/nagios/plugins/usr/share/nagios3/htdocs/images/logos
• La interfaz web de Nagios está en:
http://hostX.campusY.ws.nsrc.org/nagios3/
• Instalación
• Basado en plantillas Esto ahorra mucho tiempo ya que evita la repetición
• Hay plantillas por defecto con parámetros por defecto para: Nodo genérico (generic-host_nagios2.cfg)
Servicio genérico (generic-service_nagios2.cfg)
• Los parámetros individuales se pueden sobreponer• Los valores por defecto son razonables
• Configuración de nodos y servicios
● La configuración se define en archivos de texto/etc/nagios3/conf.d/*.cfg
Detalles sobre estos archivos están en: http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html● La configuración por defecto está distribuida entre varios archivos,
pero en realidad se puede organizar como desee.● Siempre verifique antes de reiniciar Nagios, de lo contrario su
monitoreo podría interrumpirse!nagios3 –v /etc/nagios3/nagios.cfg
• Configuración
define host { host_name host1 alias host1 in campus 1 address host1.campus1.ws.nsrc.org use generichost}
define host { host_name host1 alias host1 in campus 1 address host1.campus1.ws.nsrc.org use generichost}
Ésta es una configuración mínima. Simplemente está haciendo ping al nodo; Nagios le advertirá que
no está monitoreando ningún servicio• El nombre del archivo puede ser cualquiera siempre que termine
en .cfg• Organice sus nodos como le convenga, por ejemplo, nodos
relacionados en el mismo archivo
pcs.cfg
Heredar parámetros de esta plantilla
• Monitorizar un nodo
define host { name generichost ; The name of this host template notifications_enabled 1 ; Host notifications are enabled event_handler_enabled 1 ; Host event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain nonstatus information across restarts check_command checkhostalive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r contact_groups admins register 0 ; DON’T REGISTER THIS DEFINITION – ; IT’S NOT A REAL HOST, JUST A TEMPLATE!}
define host { name generichost ; The name of this host template notifications_enabled 1 ; Host notifications are enabled event_handler_enabled 1 ; Host event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain nonstatus information across restarts check_command checkhostalive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r contact_groups admins register 0 ; DON’T REGISTER THIS DEFINITION – ; IT’S NOT A REAL HOST, JUST A TEMPLATE!}
generic-host_nagios2.cfg
• Plantilla genérica de nodo
• Hay mucho que definir!!!! • Explicaremos qué significan cada uno de
estos elementos
Todas las configuraciones en generic-host_nagios2.cfg pueden ser sobrescritas por host en la definición local. Por ejemplo:
• Sobreponer valores por defecto
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host
notification_interval 120 contact_groups admins,managers}
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host
notification_interval 120 contact_groups admins,managers}
La plantilla en la que nos basamos
• Definiendo Servicios (forma directa)
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.org use generic-host
}
define service { host_name srv1.campus1 service_description HTTP check_command check_http use generic-service}
define service { host_name srv1.campus1 service_description SSH check_command check_ssh use generic-service}
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.org use generic-host
}
define service { host_name srv1.campus1 service_description HTTP check_command check_http use generic-service}
define service { host_name srv1.campus1 service_description SSH check_command check_ssh use generic-service}
Plantilla del servicio
servicio “srv1.campus1,HTTP”
plugin
servicio “srv1.campus1,SSH”
• La combinación de nodo + servicio es un identificador único para el chequeo del servicio, ej:- “host1.campus1,HTTP”- “host1.campus1,SSH”- “host1.campus1,HTTP”- “host1.campus1,SSH”
• check_command hace referencia al plugin Cada plugin tiene opciones que puede especificar, si no especifica nada, las opciones por
defecto son usadas
• service template causa que se hereden los parámetros sobre frecuencia de comprobación, y a quién y cuándo enviar las alarmas
• Chequeos de servicios
define service{ name genericservice 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
notification_interval 0is_volatile 0check_period 24x7normal_check_interval 5retry_check_interval 1max_check_attempts 4notification_period 24x7notification_options w,u,c,rcontact_groups admins
register 0 ; DONT REGISTER THIS DEFINITION }
define service{ name genericservice 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
notification_interval 0is_volatile 0check_period 24x7normal_check_interval 5retry_check_interval 1max_check_attempts 4notification_period 24x7notification_options w,u,c,rcontact_groups admins
register 0 ; DONT REGISTER THIS DEFINITION }
generic-service_nagios2.cfg
(Comentarios han sido removidos)
• Plantilla genérica de servicio
De nuevo, los valores por defecto se pueden sobrescritos para cada servicio
define service { host_name host1.campus1 service_description HTTP check_command check_http use genericservice contact_groups admins,managers max_check_attempts 3}
define service { host_name host1.campus1 service_description HTTP check_command check_http use genericservice contact_groups admins,managers max_check_attempts 3}
services_nagios2.cfg
• Sobrescribiendo valores por defecto
• Frecuentemente monitoreamos el mismo servicio en múltiples nodos.
• Para evitar la duplicación, es más conveniente definir un service check para todos los nodos en un hostgroup.
• Chequeos de servicio repetidos
define hostgroup { hostgroup_name httpservers alias HTTP servers members host1.campus1,host2.campus1}
define hostgroup { hostgroup_name sshservers alias SSH servers members host1.campus1,host2.campus1}
define hostgroup { hostgroup_name httpservers alias HTTP servers members host1.campus1,host2.campus1}
define hostgroup { hostgroup_name sshservers alias SSH servers members host1.campus1,host2.campus1}
hostgroups_nagios2.cfg
• Creando grupos de nodos (hostgroups)
define service { hostgroup_name httpservers service_description HTTP check_command check_http use genericservice}
define service { hostgroup_name sshservers service_description SSH check_command check_ssh use genericservice}
define service { hostgroup_name httpservers service_description HTTP check_command check_http use genericservice}
define service { hostgroup_name sshservers service_description SSH check_command check_ssh use genericservice} services_nagios2.cfg
Si el hostgroup “http-servers” contiene a host1.campus1 y host2.campus1 entonces Nagios crea chequeos de HTTP para cada nodo. Los chequeos de servicio se llaman “host1.campus1,HTTP” y “host2.campus1,HTTP”
• Monitorizando servicios en hostgroups
• “Este hostgroup contiene a estos Hosts”
• “Este Host pertenece a este hostgroup”
• No es necesaria la sección “members” en el archivo de hostgroups.
• Vista alternativa
o:
Nodos y servicios convenientemente definidos en el mismo sitio
• Membresía de grupo alternativa
define host {alias Host 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers
}
define host {alias Server 2 Campus 1host_name host2.campus1 address host2.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers}
define host {alias Host 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers
}
define host {alias Server 2 Campus 1host_name host2.campus1 address host2.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers}
Seleccionando iconos para el mapa de estado
• Otros usos de los hostgroups
define host {alias Host 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers,debian-servers}
define host {alias Host 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host hostgroups ssh-servers,http-servers,debian-servers}
extinfo_nagios2.cfg
define hostextinfo { hostgroup_name debian-servers notes Debian GNU/Linux servers icon_image base/debian.png statusmap_image base/debian.gd2}
define hostextinfo { hostgroup_name debian-servers notes Debian GNU/Linux servers icon_image base/debian.png statusmap_image base/debian.gd2}
servicegroups.cfg
● Los servicios se pueden agrupar usando un “servicegroup”
● De esta manera los servicios relacionados o dependientes se puedan ver juntos en la interfaz web
● Los servicios deben estar previamente definidos
• Opcional: Servicegroups
define servicegroup { servicegroup_name mail-services alias Services comprising the mail platform members web1,HTTP,web2,HTTP,mail1,IMAP,db1,MYSQL}
define servicegroup { servicegroup_name mail-services alias Services comprising the mail platform members web1,HTTP,web2,HTTP,mail1,IMAP,db1,MYSQL}
• Esto quiere decir que “host1.campus está conectado a bdr1.campus1”
• Si bdr1.campus1 se cae, host1.campus se marca como “unreachable” en lugar de “down”
• Evita una cascada de alarmas si se cae bdr1.campus1
• También permite que Nagios dibuje un mapa
• Configurar la topología
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host
parents bdr1.campus1}
define host {alias Server 1 Campus 1host_name host1.campus1 address host1.campus1.ws.nsrc.orguse generic-host
parents bdr1.campus1}
Nodo padre
• Otra vista de la configuración
transit1.nrendefine host { use generic-host host_name transit1.nren alias Transit Router 1 address transit1.nren.ws.nsrc.org }
bdr1.campus1define host { use generic-host host_name bdr1.campus1 alias Border Router 1, Campus 1 address bdr1.campus1.ws.nsrc.org parents transit1.nren }
core1.campus1define host { use generic-host host_name core1.campus1 alias Core Router 1, Campus1 address core1.campus1.ws.nsrc.org parents bdr1.campus1 }
host1.campus1…srv1.campus1… core1.campus1
dist1-b1.campus1… core1.campus1
Algo crítico a recordar: necesitamos un sistema de mensaje o SMS que no dependa de la red que estamos monitoreando.
Puede usar un teléfono celular conectado al servidor Nagios, o un dispositivo USB con tarjeta SIM
Puede usar herramientas como: gammu: http://wammu.eu/ gnokii: http://www.gnokii.org/ sms-tools:http://smstools3.kekekasvi.com/ Kannel*: http://www.kannel.org/
*puede ser usado en un Raspberry Pi
• Notificaciones fuera de banda
• Sitio web de Nagioshttp://www.nagios.org/
• Sitio web de plugins para Nagioshttp://www.nagiosplugins.org/
• Nagios System and Network Monitoring, by Wolfgang Barth. Buen libro sobre Nagios.
• Sitio web de plugins (no-oficial)http://nagios.exchange.org/
• Un tutorial de Nagios para Debianhttp://www.debianhelp.co.uk/nagios.htm
• Consultoría comercial de Nagioshttp://www.nagios.com/
• Referencias
• Diapositivas adicionales que pueden ser útiles o informativas…
• Detalles Adicionales
• Permite confirmar un evento.
- Un usuario puede añadir comentarios a través de la interfaz gráfica.
• Puede definir períodos de mantenimiento.
- Por dispositivo o grupo de dispositivos
• Mantiene estadísticas de disponibilidad y genera reportes
• Puede detectar cambios rápidos y suprimir notificaciones adicionales.
• Permite usar varios métodos de notificación:
- e-mail, buscapersonas, SMS, winpopup, audio, etc...
• Permite definir niveles de notificación
• Más Funcionalidades
Estado del Nodo:
Cuando configura un nodo, puede ser notificado bajo las siguientes condiciones:
–d: DOWN (caído)–u: UNREACHABLE (inalcanzable)–r: RECOVERY (recuperación)–f: FLAPPING (cambios rápidos) comienzo/fin–s: SCHEDULED DOWNTIME comienzo/fin–n: NONE (ninguno)
• Opciones de Notificación de Nodo
Estado del servicio:
Cuando configura un servicio, puede ser notificado bajo las siguientes condiciones:
–w:WARNING (advertencia)–c: CRITICAL–u: UNKNOWN (desconocido)–r: RECOVERY (recuperación)–f: FLAPPING (vaivén) comienzo/fin–s: SCHEDULED DOWNTIME (start/end)–n: NONE (ninguno)
• Opciones de Notificación de Servicio
• Ficheros de Configuración
Se encuentran en /etc/nagios3/
Ficheros importantes:• nagios.cfg Archivo de configuración principal.• cgi.cfg Controla la interfaz web y las opciones de
seguridad.• commands.cfg Los comandos que Nagios usa para las
notificaciones.• conf.d/* El resto de la configuración!
• Archivos de Configuración Debian/Ubuntu
Dentro de conf.d/*• contacts_nagios2.cfg usuarios y grupos
• extinfo_nagios2.cfg hace la IU bonita
• generic-host_nagios2.cfg plantilla de host por defecto
• generic-service_nagios2.cfg plantilla de servicio por defecto
• host-gateway_nagios3.cfg definición de router de salida
• hostgroups_nagios2.cfg grupos de nodos
• localhost_nagios2.cfg definición de host en nagios
• services_nagios2.cfg qué servicios conmprobar
• timeperiods_nagios2.cfg cuándo comprobar, a quién notificar
• Otros archivos de configuración
Dentro de conf.d/ otros posibles archivos de configuración:
• servicegroups.cfg Grupos de nodos y servicios
• pcs.cfg Ejemplo de definiciones de PCs (hosts)
• switches.cfg Definiciones de conmutadores (hosts)
• routers.cfg Definiciones de enrutadores (hosts)
• Otros Archivos de configuración
Parámetros globales
Archivo: /etc/nagios3/nagios.cfg• Dice dónde están archivos de configuración adicionales.• Comportamiento general de Nagios:
- Para grandes instalaciones debe ajustar su configuración usando este archivo.
- Ver: Tunning Nagios for Maximum Performance http://nagios.sourceforge.net/docs/3_0/tuning.html
• Detalles Configuración Principal
/etc/nagios3/cgi.cfg- Puede cambiar el directorio CGI, si lo desea- Autentificación y autorización en Nagios usa:
- Activar autentificación usando el mecanismo .htpasswd de Apache, o usando RADIUS o LDAP.
- Puede asignar derechos a los usuarios usando las siguientes variables: authorized_for_system_information authorized_for_configuration_information authorized_for_system_commands authorized_for_all_services authorized_for_all_hosts authorized_for_all_service_commands authorized_for_all_host_commands
• Configuración CGI
# '24x7'define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:0024:00 monday 00:0024:00 tuesday 00:0024:00 wednesday 00:0024:00 thursday 00:0024:00 friday 00:0024:00 saturday 00:0024:00 }
# '24x7'define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:0024:00 monday 00:0024:00 tuesday 00:0024:00 wednesday 00:0024:00 thursday 00:0024:00 friday 00:0024:00 saturday 00:0024:00 }
Define los períodos de tiempo en los que se permiten los chequeos, notificaciones, etc.
- Por defecto: 24 x 7
- Ajustar según se necesite, por ejemplo solamente horas de trabajo de Lunes a Viernes.
- Configurar un Nuevo periodo de tiempo para “fuera de horario regular”, etc.
• Períodos de Tiempo (ventanas)
define command { command_name check_ssh command_line /usr/lib/nagios/plugins/check_ssh '$HOSTADDRESS$’}
define command { command_name check_ssh_port command_line /usr/lib/nagios/plugins/check_ssh p '$ARG1$' '$HOSTADDRESS$’}
• Note que el mismo plugin se puede usar de distintas maneras (“commands”)• Comando y argumentos están separados por un símbolo de exclamación (!)• Por ejemplo, chequear SSH en un puerto no estándar:
define service { hostgroup_name sshservers2222 service_description SSH2222 check_command check_ssh_port!2222 use genericservice}
define service { hostgroup_name sshservers2222 service_description SSH2222 check_command check_ssh_port!2222 use genericservice}
/etc/nagios-plugins/config/ssh.cfg
Este es $ARG1$
• Configurar Chequeos de Servicio/Nodo
Use cualquier comando que desee!
Podemos usar lo siguiente para generar tickets en RT.# 'notify-by-email' command definitiondefine command{ command_name notify-by-email command_line /usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nIn: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $SHORTDATETIME$" | /bin/mail -s '$NOTIFICATIONTYPE$: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$' $CONTACTEMAIL$ }
From: [email protected]: router_group@localdomainSubject: Host DOWN alert for TLD1-RTR!Date: Thu, 29 Jun 2006 15:13:30 -0700
Host: gwIn: Core_RoutersState: DOWNAddress: 192.0.2.100Date/Time: 06-29-2006 15:13:30Info: CRITICAL - Plugin timed out after 6 seconds
• Comandos de Notificación
# check that ssh services are runningdefine service { hostgroup_name sshservers service_description SSH check_command check_ssh use genericservice notification_interval 0}
# check that ssh services are runningdefine service { hostgroup_name sshservers service_description SSH check_command check_ssh use genericservice notification_interval 0}
El parámetro “service_description” es importante si se planea crear un Grupo de Servicio (servicegroup). Este es un ejemplo de definición de Grupo de Servicio:
define servicegroup{ servicegroup_name Webmail alias webmtastorageauth members srvr1,HTTP,srvr1,SMTP,srvr1,POP, \ srvr1,IMAP,srvr1,RAID,srvr1,LDAP, \ srvr2,HTTP,srvr2,SMTP,srvr2,POP, \ srvr2,IMAP,srvr2,RAID,srvr2,LDAP}
define servicegroup{ servicegroup_name Webmail alias webmtastorageauth members srvr1,HTTP,srvr1,SMTP,srvr1,POP, \ srvr1,IMAP,srvr1,RAID,srvr1,LDAP, \ srvr2,HTTP,srvr2,SMTP,srvr2,POP, \ srvr2,IMAP,srvr2,RAID,srvr2,LDAP}
• Configuración de Grupo de Servicio
Otros ejemplos están disponibles en:
http://www.nagios.org/about/screenshots
• Otras vistas de la interfaz