manuales:nagios:capacitacion:implementacion_tecnica
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
manuales:nagios:capacitacion:implementacion_tecnica [2015/10/08 13:30] – cayu | manuales:nagios:capacitacion:implementacion_tecnica [2017/04/05 15:13] – [Caso concreto] cayu | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Implementación Técnica de Nagios ====== | ====== Implementación Técnica de Nagios ====== | ||
- | ===== Instalación de Nagios | + | ===== Instalación de Nagios ===== |
==== Dependencias para compilación y puesta en marcha ==== | ==== Dependencias para compilación y puesta en marcha ==== | ||
^Sistema Operativo|Debian GNU/Linux| | ^Sistema Operativo|Debian GNU/Linux| | ||
Línea 57: | Línea 57: | ||
Ejemplo de salida de ejecución del script configure : | Ejemplo de salida de ejecución del script configure : | ||
< | < | ||
+ | ./configure --enable-corewindow --enable-event-broker | ||
+ | ... | ||
+ | Creating sample config files in sample-config/ | ||
+ | |||
+ | |||
+ | *** Configuration summary for nagios 4.3.1 02-23-2017 ***: | ||
+ | |||
| | ||
| | ||
Línea 68: | Línea 75: | ||
Check result directory: | Check result directory: | ||
Init directory: | Init directory: | ||
- | Apache conf.d directory: | + | Apache conf.d directory: |
Mail program: | Mail program: | ||
Host OS: linux-gnu | Host OS: linux-gnu | ||
Línea 87: | Línea 94: | ||
==== Caso concreto ==== | ==== Caso concreto ==== | ||
^Sistema Operativo|Debian 8.1| | ^Sistema Operativo|Debian 8.1| | ||
- | ^Version de Nagios|4.1.1| | + | ^Version de Nagios|4.3.1| |
Desinstalar paquetes o cosas innecesarias del paquete base de debian netinst e instalar el compilador GCC, realizar pruebas con el FLAG O3 al momento de la compilación. | Desinstalar paquetes o cosas innecesarias del paquete base de debian netinst e instalar el compilador GCC, realizar pruebas con el FLAG O3 al momento de la compilación. | ||
- | < | ||
- | | ||
- | | ||
- | Nagios executable: | ||
- | Nagios user/ | ||
- | | ||
- | Event Broker: | ||
- | Install ${prefix}: | ||
- | Install ${includedir}: | ||
- | Lock file: ${prefix}/ | ||
- | Check result directory: | ||
- | Init directory: | ||
- | Apache conf.d directory: | ||
- | Mail program: | ||
- | Host OS: linux-gnu | ||
- | IOBroker Method: | ||
- | |||
- | Web Interface Options: | ||
- | | ||
- | HTML URL: http:// | ||
- | CGI URL: http:// | ||
- | | ||
- | </ | ||
make install-base | make install-base | ||
< | < | ||
Línea 185: | Línea 169: | ||
Nótese que no se realizó la instalación del servidor Web, lo máximo a dejar en el mismo servidor de Nagios es un **MTA** para notificaciones, | Nótese que no se realizó la instalación del servidor Web, lo máximo a dejar en el mismo servidor de Nagios es un **MTA** para notificaciones, | ||
+ | |||
+ | |||
+ | ===== Configuración ===== | ||
+ | |||
+ | Ahora nos referiremos a la configuración de los elementos instalados para su posterior // | ||
+ | |||
+ | |||
+ | ==== Implementación ==== | ||
+ | |||
+ | Para el correcto funcionamiento de Nagios, y asegurar escalabilidad con orden, se debe seguir una estructura de configuración y tener previamente planteados temas como: | ||
+ | |||
+ | |||
+ | * Definición una estructura de archivos y directorios acorde a la situación, haciéndolo a su vez mas entendible para su posterior administración | ||
+ | * Configurar Apache para su permitir su acceso via web por HTTP o HTTPS | ||
+ | * En la mayoría de los equipos a monitorear mientras fuera posible instalar y dejar corriendo los servicios de SNMP | ||
+ | * Configurar servicio de envío de emails | ||
+ | * Definir grupos de contactos a los cuales se les enviarían los avisos de notificaciones, | ||
+ | * Definir grupos de hosts y servicios, al tenerlos agrupados y verlos mas facilmente | ||
+ | |||
+ | |||
+ | //A continuación se detalla como llevar a cabo dichos pasos necesarios para su implementación.// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== En el servidor ==== | ||
+ | |||
+ | Configuraciones necesarias en el servidor de monitoreo. | ||
+ | |||
+ | ==== Nagios ==== | ||
+ | |||
+ | Algunos puntos basicos previos a la instalacion : | ||
+ | |||
+ | |||
+ | * **PATH** Esta es la ruta de instalación. Por defecto es / | ||
+ | * **Usuario** Usuario que va a usar nagios par ejecutarse. Debe crearse con adduser especificarle el PATH de Nagios como //su directorio home de inicio//, usualmente deberemos llamarlo nagios y debe estar dentro del grupo nagios | ||
+ | * **Grupo** Grupo de usuario que va a usar Nagios. Este grupo tendrá permisos sobre todos los ficheros y directorios de Nagios. Por defecto es nagios. Puede crearse con groupadd. | ||
+ | * **URL** Nagios utiliza una interfaz web para ejecutarse. Esta URL determina cual va a ser el directorio virtual que debe usar para instalarse. Por defecto /nagios, es decir, las peticiones irán dirigidas a http:// | ||
+ | |||
+ | |||
+ | |||
+ | == Estructura de archivos == | ||
+ | |||
+ | |||
+ | Una vez que compilamos e instalamos el paquete Nagios nos termina quedando una nomenclatura de directorios como la siguiente : | ||
+ | |||
+ | |||
+ | * **bin** | ||
+ | * //Aqui se almacenan los binarios ejecutables// | ||
+ | |||
+ | * **etc** | ||
+ | * //Guarda la configuracion de Nagios// | ||
+ | |||
+ | * **libexec** | ||
+ | * //Se almacenan los plugins que efectuaran los chequeos a monitorear// | ||
+ | |||
+ | * **sbin** | ||
+ | * //Dentro de este directorio se mantienen los ejecutables CGI de la interfaz web// | ||
+ | |||
+ | * **share** | ||
+ | * //Organiza el contenido web a mostrar, iconos, html, php etc// | ||
+ | |||
+ | * **var** | ||
+ | * //Guarda los datos de ejecucion del monitoreo, estado de servicios, hosts, y logs// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **bin** | ||
+ | |||
+ | Dentro de este directorio encontramos los ejecutable principales, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **etc** | ||
+ | |||
+ | Este directorio guarda la configuración de Nagios, sus componentes, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **libexec** | ||
+ | |||
+ | Alli se contienen lo ejecutables de los plugins que efectuan los chequeos, SNMP, SAP, Oracle, SSH, que pueden ser binarios, scripts en Perl, PHP, Shell, Java, etc. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **sbin** | ||
+ | |||
+ | Aqui se almacenan los ejecutables cgi que se ejecutaran para la visualizacion por web de la consola Nagios. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **share** | ||
+ | |||
+ | Aqui encontramos el contenido web, imagenes, logos, los aditivos como PNP, Nagvis y los datos que necesitan para funcionar estos. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **var** | ||
+ | |||
+ | Aqui se guardan los datos internos de Nagios, estadisticas de los chequeos, informacion de ejecucion actual, archivos de sockets, registros de logs, colas de ejecución de chequeos. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === Archivos de configuracion nagios/etc === | ||
+ | |||
+ | |||
+ | **cgi.cfg** | ||
+ | |||
+ | * //Definir archivo de configuracion principal de Nagios// | ||
+ | * main_config_file=/ | ||
+ | * //Ruta donde se ubican los archivos a mostrar via web// | ||
+ | * physical_html_path=/ | ||
+ | * //Ruta del url a donde ubicar Nagios desde el navegador// | ||
+ | * url_html_path=/ | ||
+ | * //Mostrar o no el icono de ayuda en la interfaz web// | ||
+ | * show_context_help=0 | ||
+ | * //Mostrar objetos pendientes de chequeo// | ||
+ | * use_pending_states=1 | ||
+ | * //Usar autenticacion para acceder a Nagios// | ||
+ | * use_authentication=1 | ||
+ | * //Tener usuario logueado por default (no recomendado, | ||
+ | * # | ||
+ | * //Usuarios con acceso permitido para ver la informacion de objetos (separados por comas)// | ||
+ | * authorized_for_system_information=nagiosadmin | ||
+ | * //Usuarios con acceso permitido para ver la informacion de configuracion (separados por comas)// | ||
+ | * authorized_for_configuration_information=nagiosadmin | ||
+ | * //Usuarios con acceso permitido ejecucion de comandos nagios (separados por comas)// | ||
+ | * authorized_for_system_commands=nagiosadmin | ||
+ | * //Usuarios permitidos a ver informacion de hosts y servicios (separados por comas)// | ||
+ | * authorized_for_all_services=nagiosadmin | ||
+ | * authorized_for_all_hosts=nagiosadmin | ||
+ | * //Usuarios permitidos para ejecutar comandos sobre hosts y servicios (separados por comas)// | ||
+ | * authorized_for_all_service_commands=nagiosadmin | ||
+ | * authorized_for_all_host_commands=nagiosadmin | ||
+ | * //Tasa de refresco para la interfaz web en segundos// | ||
+ | * refresh_rate=90 | ||
+ | |||
+ | |||
+ | **htpasswd.users** | ||
+ | |||
+ | * Archivo con passwords encriptadas de los usuarios que se autentificaran por HTTP | ||
+ | |||
+ | **nagios.cfg** | ||
+ | |||
+ | * Archivo de configuracion principal de Nagios, aqui se especifican los directorios de trabajo y se incluyen los archivos de configuracion extra a utilizar por Nagios | ||
+ | * Con diversos parametros : | ||
+ | * **log_file** se especifica el archivo de log a utilizar por Nagios | ||
+ | * **cfg_file** se especifica un archivo de configuracion extra a incluir en la ejecucion de Nagios | ||
+ | * **cfg_dir** | ||
+ | * **log_archive_path** path donde se alojaran los archivos de log | ||
+ | * **use_syslog** integracion con syslog | ||
+ | |||
+ | **ndo2db.cfg** | ||
+ | * Archivo de configuracion del daemon que se encarga de introducir las consultar generadas por el modulo ndomod | ||
+ | |||
+ | **ndomod.cfg** | ||
+ | * Modulo de Nagios que se encarga de traducir la informacion de ejecucion de Nagios en consultas MySQL, disponiendolas por medio de un socket | ||
+ | |||
+ | **resource.cfg** | ||
+ | * Archivo de configuracion donde se definen macros de ejecucion | ||
+ | Ejemplo de configuración teniendo en cuenta el ambiente mixto con plugins de paquetes Debian y compilados manualmente : | ||
+ | <code bash> | ||
+ | # Sets $USER1$ to be the path to the Debian plugins | ||
+ | $USER1$=/ | ||
+ | |||
+ | # Sets $USER2$ to be the path to the manual compiled plugins | ||
+ | $USER2$=/ | ||
+ | |||
+ | # Comunidad SNMP V1 | ||
+ | $USER3$=comunidad | ||
+ | # Usuario y Password SNMP V3 | ||
+ | $USER5$=nagios | ||
+ | $USER6$=ClaveDESNMP | ||
+ | </ | ||
+ | |||
+ | **objects/ | ||
+ | * Directorio de archivos generales de configuracion | ||
+ | |||
+ | **objects/ | ||
+ | * Definicion de comandos de ejecucion por default, con los alias que queremos usar | ||
+ | |||
+ | **objects/ | ||
+ | * Definicion de contactos de notificacion | ||
+ | |||
+ | **objects/ | ||
+ | * Plantilla inicial para el chequeo del host local | ||
+ | |||
+ | **objects/ | ||
+ | * Plantilla de ejemplo de chequeo de impresoras por SNMP | ||
+ | |||
+ | **objects/ | ||
+ | * Plantilla de ejemplo de chequeo de switch por SNMP | ||
+ | |||
+ | **objects/ | ||
+ | * Plantillas generales de host, contactos, y servicios | ||
+ | |||
+ | **objects/ | ||
+ | * Plantilla inicial para definir periodos de chequeos, aquí se definen los rangos de tiempo donde son válidos el envío de alertas y las verificaciones de los servicios que están funcionando | ||
+ | |||
+ | **objects/ | ||
+ | * Plantilla de ejemplo de chequeo de equipos Windows | ||
+ | |||
+ | **services/ | ||
+ | * Aqui vamos a definir los servicios que usaremos en los chequeos. Se define la métrica o el servicio a monitorizar y el host/grupo de hosts sobre el que se ejecuta | ||
+ | |||
+ | **var/rw/** | ||
+ | * Alli se encuentra un archivo special de socket que realiza la comunicacion de los comando y ordenes de la interfaz web hacia nagios, como cambiar horarios de chequeo, deshabilitar notificaciones etc. | ||
+ | * El archivo que alli se encuentra // | ||
+ | caída o el reinicio del propio Nagios, etcétera. Para poder ejecutar este tipo de comandos es | ||
+ | necesario también configurar el sistema de una forma un tanto especial. No hay que olvidar que | ||
+ | al configurar Nagios de este modo se está permitiendo desde la web activar o desactivar opciones que en principio sólo estaban disponibles desde la consola del sistema. Para configurar Nagios de esta forma, hay que | ||
+ | editar el fichero principal // | ||
+ | < | ||
+ | check_external_commands=1 | ||
+ | command_check_interval=-1 | ||
+ | command_file=/ | ||
+ | </ | ||
+ | Lo que hará que Nagios active el chequeo para buscar comandos externos, con tanta | ||
+ | frecuencia como sea posible por el sistema y buscará los comandos en el archivo // | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | En el siguiente gráfico detalla la organización recomendada de la configuración de Nagios. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | Si por ejemplo tenemos estos dos casos : | ||
+ | |||
+ | |||
+ | **Nagios un país multiples provincias o localidades** | ||
+ | |||
+ | |||
+ | * **Buenos Aires** | ||
+ | * Lanús | ||
+ | * Florencio Varela | ||
+ | * CABA | ||
+ | * Olavarria | ||
+ | * Bahia Blanca | ||
+ | * **Santa Fe** | ||
+ | * Rosario | ||
+ | * **Neuquén** | ||
+ | * Zapala | ||
+ | * San Martin | ||
+ | |||
+ | En este caso, simplemente deberemos tener templates para hosts y servicios, que se dividan por tipo. Si es un servidor, equipo de red, scada etc. | ||
+ | |||
+ | **Nagios múltiples países y multiples provincias o localidades** | ||
+ | |||
+ | * **Argentina** | ||
+ | * Buenos Aires | ||
+ | * Neuquen | ||
+ | * Tucuman | ||
+ | * **Brasil** | ||
+ | * Rio | ||
+ | * Cajati | ||
+ | * **Paraguay** | ||
+ | * Ciudad del este | ||
+ | * Villa hayes | ||
+ | * **Portugal** | ||
+ | * Lisboa | ||
+ | |||
+ | En este caso algo mas complejo, deberemos tener templates para hosts divididos para cada país, templates para servicios divididos para cada país, templates para contactos divididos para cada país. | ||
+ | |||
+ | |||
+ | Siempre debemos utilizar templates para todo, porque cuando debemos hacer un cambio en masa es mucho mas simple y con menos posibilidad a errores. | ||
+ | |||
+ | |||
+ | ==== En el Monitoreo ==== | ||
+ | |||
+ | |||
+ | |||
+ | ===== Creando directivas ===== | ||
+ | |||
+ | Debemos crear algunas entradas de configuración para especificar donde encontramos los servicios, grupos, contactos etc, las mismas debemos incluirlas en nuestro archivo de configuración nagios.cfg | ||
+ | |||
+ | < | ||
+ | # Directorio con la configuración de grupos de Hosts de los Servidores | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de grupos de servicios de los Servidores | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de contactos | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de grupos de contacto | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de servicios | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de los comandos | ||
+ | cfg_dir=/ | ||
+ | # Directorio con la configuración de los equipos a monitorear | ||
+ | cfg_dir=/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Con la directiva cfg_dir el indicamos Nagios que tome como configuración los archivos con extencion " | ||
+ | |||
+ | |||
+ | ==== Agregando Grupos de Servicios ==== | ||
+ | |||
+ | Los grupos de servicio se utilizan para denotar un variedad de servicios sobre otros, debemos tener asignado aunque sea un servicio a ese grupo por que si no de lo contrario el Nagios mostrara un error al arranque, para eso lo asignamos en la propiedad // | ||
+ | Ejemplo de una entrada de grupo de servicios: | ||
+ | |||
+ | < | ||
+ | define servicegroup{ | ||
+ | servicegroup_name | ||
+ | alias Lotus Reponse Services | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define servicegroup{ | ||
+ | servicegroup_name | ||
+ | alias | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Se deberá crear el archivo {nagios-dir}/ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Agregando Servicios ==== | ||
+ | |||
+ | A continuacion se muestra una tipica entrada de configuración de un servicio | ||
+ | |||
+ | < | ||
+ | define service { | ||
+ | use | ||
+ | host_name | ||
+ | hostgroup_name | ||
+ | service_description | ||
+ | servicegroups | ||
+ | is_volatile | ||
+ | check_period | ||
+ | max_check_attempts | ||
+ | normal_check_interval | ||
+ | retry_check_interval | ||
+ | contact_groups | ||
+ | notification_interval | ||
+ | notification_period | ||
+ | notification_options | ||
+ | check_command | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define service { | ||
+ | use | ||
+ | host_name | ||
+ | hostgroup_name | ||
+ | service_description | ||
+ | servicegroups | ||
+ | is_volatile | ||
+ | check_period | ||
+ | max_check_attempts | ||
+ | normal_check_interval | ||
+ | retry_check_interval | ||
+ | contact_groups | ||
+ | max_check_attempts | ||
+ | notification_interval | ||
+ | notification_period | ||
+ | notification_options | ||
+ | check_command | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **use** | ||
+ | |||
+ | Template de servicio a utilizar | ||
+ | |||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Nombre del o los host a los cuales esta asignado dicho servicio | ||
+ | |||
+ | |||
+ | **hostgroup_name** | ||
+ | |||
+ | Nombre del grupo de host en los cuales esta asignado dicho servicio, es útil para cuando se vuelve tedioso poner uno por uno los nombres de los hosts a los cuales se asigna el servicio | ||
+ | |||
+ | |||
+ | **service_description** | ||
+ | |||
+ | Alias descriptivo del nombre del servicio | ||
+ | |||
+ | |||
+ | **contact_groups** | ||
+ | |||
+ | Grupos de contacto a los que enviar las notificaciones | ||
+ | |||
+ | |||
+ | **max_check_attempts** | ||
+ | |||
+ | Maxima cantidad de chequeos a efectuar por Nagios, antes de enviar un OK como resultado | ||
+ | |||
+ | |||
+ | **normal_check_interval** | ||
+ | |||
+ | Intervalo de tiempo antes de programar un nuevo chequeo del servicio | ||
+ | |||
+ | |||
+ | **retry_check_interval** | ||
+ | |||
+ | Intervalo de tiempo antes de realizar un re-chequeo del servicio | ||
+ | |||
+ | |||
+ | **notification_interval** | ||
+ | |||
+ | Esta directiva se utiliza para definir el número de las “unidades del tiempo” para esperar antes de re-notificar a un contacto que este servidor todavía está abajo o inalcanzable. A menos que se haya cambiado la directiva interval_length del valor prefijado de 60, este número significará minutos. Si este valor se establece a 0, Nagios re-no notificará contactos sobre los problemas para este host - solamente una notificación del problema será enviada. | ||
+ | |||
+ | |||
+ | **notification_period** | ||
+ | |||
+ | Periodo de tiempo en el cualse envia notificacion y notificacion | ||
+ | |||
+ | |||
+ | |||
+ | **notification_options** | ||
+ | |||
+ | Esta directiva indica a Nagios en que momentos debe enviar notificaciones de estado | ||
+ | |||
+ | * d = DOWN cuando el host esta caido | ||
+ | |||
+ | * u = UNREACHABLE cuando el host no es visible o es inalcanzable | ||
+ | |||
+ | * r = RECOVERY (OK) cuando el host se recupero | ||
+ | |||
+ | * f = FLAPPING cuando es de estado cambiante | ||
+ | |||
+ | * n = NONE no enviar notificaciones | ||
+ | |||
+ | |||
+ | **check_command** | ||
+ | |||
+ | Comando para efectuar el chequeo de dicho servicio | ||
+ | |||
+ | |||
+ | //Se deberá crear el archivo {nagios-dir}/ | ||
+ | |||
+ | |||
+ | |||
+ | === Dependencia del estado del servicio por el estado de otro servicio === | ||
+ | |||
+ | En caso en los cuales el estado de un servicio dependa de la disponibilidad o el estado de otro, se pueden definir dependencias. Una entrada a modo ejemplo puede ser: | ||
+ | |||
+ | < | ||
+ | define servicedependency{ | ||
+ | host_name Host A | ||
+ | service_description Service A | ||
+ | dependent_host_name Host B | ||
+ | dependent_service_description Service D | ||
+ | execution_failure_criteria u | ||
+ | notification_failure_criteria n | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define servicedependency{ | ||
+ | host_name {host donde se ejecuta el servicio dependiente} | ||
+ | service_description {servicio dependiente} | ||
+ | dependent_host_name {host donde se ejecuta el servicio del cual se depende} | ||
+ | dependent_service_description {servicio del cual se depende} | ||
+ | execution_failure_criteria {criterio para establecer el estado} | ||
+ | notification_failure_criteria {notificar segun x estado} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Nombre del o los host dentro de los cuales se ejecuta el servicio dependiente | ||
+ | |||
+ | |||
+ | **service_description** | ||
+ | |||
+ | Descripcion del servicio dependiente, | ||
+ | |||
+ | |||
+ | **dependent_host_name** | ||
+ | |||
+ | Host donde se esta ejecutando el servicio del cual se depende | ||
+ | |||
+ | |||
+ | **dependent_service_description** | ||
+ | |||
+ | Nombre descriptivo que corresponde al servicio del cual se depende, debe ser igual al de su configuracion de servicio | ||
+ | |||
+ | |||
+ | **execution_failure_criteria** | ||
+ | |||
+ | Criterios para definir el estado del servicio | ||
+ | |||
+ | |||
+ | **notification_failure_criteria** | ||
+ | |||
+ | En base a que estado realizar las notificaciones, | ||
+ | |||
+ | |||
+ | |||
+ | === Informacion extendida de servicio === | ||
+ | |||
+ | En algunos casos podemos agregar un link informativo u externo haciendo referencia al servicio en ejecution | ||
+ | |||
+ | |||
+ | < | ||
+ | define serviceextinfo{ | ||
+ | host_name linux2 | ||
+ | service_description Carga del sistema Linux | ||
+ | notes Carga sistema | ||
+ | notes_url http:// | ||
+ | icon_image carga.png | ||
+ | icon_image_alt Alertas de carga | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | define serviceextinfo{ | ||
+ | host_name {nombre del host} | ||
+ | service_description {nombre descriptivo del servicio} | ||
+ | notes {nota descriptiva sobre la informacion extra} | ||
+ | notes_url {url donde se encuentra la informacion extra} | ||
+ | icon_image {imagen de icono} | ||
+ | icon_image_alt {texto alternativo de la imagen} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Host donde se ejecuta dicho servicio | ||
+ | |||
+ | |||
+ | **service_description** | ||
+ | |||
+ | Nombre descriptivo del servicio al cual corresponde la informacion extra | ||
+ | |||
+ | |||
+ | **notes** | ||
+ | |||
+ | Descripcion sobre "que es" o "a que corresponde" | ||
+ | |||
+ | |||
+ | **notes_url** | ||
+ | |||
+ | Url donde encontrar la informacion extra | ||
+ | |||
+ | |||
+ | **icon_image** | ||
+ | |||
+ | Icono a referenciar el link de la información extra | ||
+ | |||
+ | |||
+ | **icon_image_alt** | ||
+ | |||
+ | Texto alternativo del icono | ||
+ | |||
+ | ==== Agregando Grupos de Hosts ==== | ||
+ | |||
+ | Los host en nagios de puede agrupar mediante grupos y asi tener un listado aparte que los diferencia de los demas. por ejemplo tener por un lado los servidores SAP con Oracle y por otro los servidores Lotus, o Linux y Windows por separado etc. | ||
+ | |||
+ | Un archivo tipo de grupos de host se presenta a continuacion | ||
+ | |||
+ | < | ||
+ | define hostgroup { | ||
+ | hostgroup_name | ||
+ | alias | ||
+ | members | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | define hostgroup { | ||
+ | hostgroup_name | ||
+ | alias | ||
+ | members | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **hostgroup_name** | ||
+ | |||
+ | Nombre del grupo de hosts | ||
+ | |||
+ | |||
+ | **alias** | ||
+ | |||
+ | Alias descriptivo del grupo | ||
+ | |||
+ | |||
+ | **members** | ||
+ | |||
+ | Host que son miembros del grupo, debemos ingresar el host_name de cada uno separado por comas "," | ||
+ | |||
+ | //Se deberá crear el archivo {nagios-dir}/ | ||
+ | |||
+ | ==== Agregando Hosts ==== | ||
+ | |||
+ | Para configurar un host con o sin SNMP previamente instalado y configurado como lo indicado anteriormente, | ||
+ | |||
+ | |||
+ | Un tipico archivos hosts.cfg | ||
+ | |||
+ | < | ||
+ | define host{ | ||
+ | use | ||
+ | host_name | ||
+ | hostgroup_name | ||
+ | alias SAP SERVER | ||
+ | address | ||
+ | parents | ||
+ | contact_groups | ||
+ | max_check_attempts | ||
+ | notification_interval | ||
+ | notification_period | ||
+ | notification_options | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define host{ | ||
+ | use | ||
+ | host_name | ||
+ | hostgroup_name | ||
+ | alias | ||
+ | address | ||
+ | parents | ||
+ | contact_groups | ||
+ | max_check_attempts | ||
+ | notification_interval | ||
+ | notification_period | ||
+ | notification_options | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **use** | ||
+ | |||
+ | Template de host a utilizar | ||
+ | |||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Nombre del host | ||
+ | |||
+ | **hostgroup_name** | ||
+ | |||
+ | Grupos a los que pertenece este host | ||
+ | |||
+ | |||
+ | **address** | ||
+ | |||
+ | Direccion IP del host | ||
+ | |||
+ | |||
+ | **parents** | ||
+ | |||
+ | Host del que depende y que esta delante suyo, por ejemplo puede ser un router o un equipo que le brinde la conectividad etc, y en el mapa se dibujara como dependiente de ese nodo | ||
+ | |||
+ | |||
+ | **contact_groups** | ||
+ | |||
+ | Grupos de contacto a los que enviar las notificaciones | ||
+ | |||
+ | |||
+ | **max_check_attempts** | ||
+ | |||
+ | Maxima cantidad de chequeos a efectuar por Nagios, antes de enviar un OK como resultado | ||
+ | |||
+ | |||
+ | **notification_interval** | ||
+ | |||
+ | Esta directiva se utiliza para definir el número de las “unidades del tiempo” para esperar antes de re-notificar a un contacto que este servidor todavía está abajo o inalcanzable. A menos que se haya cambiado la directiva interval_length del valor prefijado de 60, este número significará minutos. Si este valor se establece a 0, Nagios re-no notificará contactos sobre los problemas para este host - solamente una notificación del problema será enviada. | ||
+ | |||
+ | |||
+ | |||
+ | **notification_period** | ||
+ | |||
+ | Periodo de tiempo en el cualse envia notificacion y notificacion | ||
+ | |||
+ | |||
+ | |||
+ | **notification_options** | ||
+ | |||
+ | Esta directiva indica a Nagios en que momentos debe enviar notificaciones de estado | ||
+ | |||
+ | * d = DOWN cuando el host esta caido | ||
+ | |||
+ | * u = UNREACHABLE cuando el host no es visible o es inalcanzable | ||
+ | |||
+ | * r = RECOVERY (OK) cuando el host se recupero | ||
+ | |||
+ | * f = FLAPPING cuando es de estado cambiante | ||
+ | |||
+ | * n = NONE no enviar notificaciones | ||
+ | |||
+ | //Se deberá crear el un subdirectorio correspondiente al nombre del host y segun corresponda ubicarlo en el directorio servers/ | ||
+ | |||
+ | === Informacion extendida de host === | ||
+ | |||
+ | La informacion extendida de host se utiliza para el look and feel de los host dentro de los mapas de estado, ya sea tanto el 2D como el 3D | ||
+ | |||
+ | < | ||
+ | define hostextinfo{ | ||
+ | host_name | ||
+ | notes | ||
+ | icon_image | ||
+ | icon_image_alt | ||
+ | vrml_image | ||
+ | statusmap_image oracle.gd2 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define hostextinfo{ | ||
+ | host_name | ||
+ | notes | ||
+ | icon_image | ||
+ | icon_image_alt | ||
+ | vrml_image | ||
+ | statusmap_image {logo para ver en el mapa 2D} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Nombre del host al cual corresponde la información dada | ||
+ | |||
+ | |||
+ | **notes** | ||
+ | |||
+ | Pequeña nota descriptiva de la informacion del host a presentar en los mapas de estado | ||
+ | |||
+ | |||
+ | **icon_image** | ||
+ | |||
+ | Icono a visualizar en el entorno html de la consola Nagios | ||
+ | |||
+ | |||
+ | **icon_image_alt** | ||
+ | |||
+ | Texto alternativo para mostrar al logo | ||
+ | |||
+ | |||
+ | **vrml_image** | ||
+ | |||
+ | Icono a visualizar en el mapa 3D | ||
+ | |||
+ | |||
+ | **statusmap_image** | ||
+ | |||
+ | Icono a visualizar en el mapa 2D | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | //Se deberá crear en el archivo hostextinfo.cfg dentro subdirectorio correspondiente al host con las entradas de configuración anteriormente explicadas. | ||
+ | Lo iconos se encuentran dentro del directorio {nagiosdir}share/ | ||
+ | |||
+ | Para convertir una imagen png comun a un icono gd2 (necesario para la generacion del grafico de statusmap 2D) debemos ejecutar el siguiente comando: | ||
+ | |||
+ | < | ||
+ | pngtogd2 mi-icono.png mi-icono.gd2 | ||
+ | </ | ||
+ | |||
+ | El primer parametro es mi ya existente imagen png, el segundo parametro es el nombre de archivo de salida en formato gd2, el parametro 1 se refiere a que la cree en formato raw (crudo), y el segudo parametro es para que lo cree sin compresion, todo esto se realiza dentro del directorio logos anteriormente explciado. | ||
+ | |||
+ | |||
+ | === Dependencia del estado de host por el estado de otro host === | ||
+ | |||
+ | En casos donde hay host donde su estado depende del estado de otro host, es posible especificar dependencias. Aqui vemos una entrada tipica | ||
+ | |||
+ | < | ||
+ | | ||
+ | host_name | ||
+ | dependent_host_name | ||
+ | notification_failure_criteria | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | | ||
+ | host_name | ||
+ | dependent_host_name | ||
+ | notification_failure_criteria | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **host_name** | ||
+ | |||
+ | Nombre del host al cual corresponde la información dada | ||
+ | |||
+ | |||
+ | **dependent_host_name** | ||
+ | |||
+ | Nombre del host del cual depende | ||
+ | |||
+ | |||
+ | **notification_failure_criteria** | ||
+ | |||
+ | Opciones de notificacion en caso de cada estado | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | //Se deberá crear en el archivo hostdependency.cfg dentro subdirectorio correspondiente al host con las entradas de configuración anteriormente explicadas.// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Definiendo tiempos de chequeo ==== | ||
+ | |||
+ | |||
+ | Dentro de Nagios se pueden establecer definiciones para controlar cuando diversos aspectos de la lógica de vigilancia y alerta sobre elementos monitoreador por ejemplo que tal servicio o host se chequee en ciertos intervalos de tiempo, por ejemplo si un host no debe ser chequeado los domingos o un servicio debe ser chequeado solo de lunes a viernes de 08:00 HS a 18:00 HS etc | ||
+ | |||
+ | |||
+ | A su ves las definiciones Timeperod pueden contener varios tipos de directivas, entre los días de semana, días del mes, y las fechas. El orden de precedencia de los distintos tipos de directivas (en orden descendente) es el siguiente: | ||
+ | |||
+ | * Fecha del calendario (2008-01-01) | ||
+ | * Mes específico fecha (1 de enero) | ||
+ | * Mes día genéricos (Día 15) | ||
+ | * Compensar los días de la semana de mes específico (2 º martes de diciembre) | ||
+ | * Compensar los días de la semana (3 º lunes) | ||
+ | * Normal del día de la semana (martes) | ||
+ | |||
+ | Ejemplos de las diferentes directivas timeperiod que podemos implementar : | ||
+ | |||
+ | |||
+ | |||
+ | //Chequeos las 24 horas los 7 dias de la semana// | ||
+ | < | ||
+ | define timeperiod{ | ||
+ | timeperiod_name 24x7 | ||
+ | alias 24 Hours A Day, 7 Days A Week | ||
+ | sunday | ||
+ | monday | ||
+ | tuesday | ||
+ | wednesday | ||
+ | thursday | ||
+ | friday | ||
+ | saturday | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | //Chequeos en las horas laborales lunes a viernes de 9 a 17// | ||
+ | < | ||
+ | define timeperiod{ | ||
+ | timeperiod_name workhours | ||
+ | alias | ||
+ | monday | ||
+ | tuesday | ||
+ | wednesday | ||
+ | thursday | ||
+ | friday | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | //Chequeos sin tiempos, o sea no chequea en ningún momento// | ||
+ | < | ||
+ | # ' | ||
+ | define timeperiod{ | ||
+ | timeperiod_name none | ||
+ | alias No Time Is A Good Time | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | //En ciertos dias feriados excluir el chequeo servicios, ej Navidad, Año nuevo etc// | ||
+ | < | ||
+ | define timeperiod{ | ||
+ | name us-holidays | ||
+ | timeperiod_name | ||
+ | alias U.S. Holidays | ||
+ | january 1 | ||
+ | monday -1 may | ||
+ | july 4 00: | ||
+ | monday 1 september | ||
+ | thursday -1 november | ||
+ | december 25 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | //Definimos un periodo de tiempo que chequee las 24 horas del dia los 7 dias de la semana, pero que incluya las excepciones anteriormente mostradas// | ||
+ | < | ||
+ | define timeperiod{ | ||
+ | timeperiod_name 24x7_sans_holidays | ||
+ | alias 24x7 Sans Holidays | ||
+ | use | ||
+ | sunday | ||
+ | monday | ||
+ | tuesday | ||
+ | wednesday | ||
+ | thursday | ||
+ | friday | ||
+ | saturday | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | //Otra manera de evitar tiempos de chequeo es con la directiva exclude// | ||
+ | |||
+ | // Como ejemplo podemos definir 3 timeperiods// | ||
+ | |||
+ | < | ||
+ | define timeperiod{ | ||
+ | name weekdays | ||
+ | timeperiod_name | ||
+ | monday | ||
+ | tuesday | ||
+ | wednesday | ||
+ | thursday | ||
+ | friday | ||
+ | } | ||
+ | define timeperiod{ | ||
+ | name weekends | ||
+ | timeperiod_name | ||
+ | saturday | ||
+ | sunday | ||
+ | } | ||
+ | define timeperiod{ | ||
+ | name holidays | ||
+ | timeperiod_name | ||
+ | january 1 | ||
+ | 2008-03-23 | ||
+ | 2009-04-12 | ||
+ | monday -1 may | ||
+ | july 4 00: | ||
+ | monday 1 september | ||
+ | thursday 4 november | ||
+ | december 25 | ||
+ | december 31 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | //Ahora definimos un timeperiod llamadas por ejemplo, incluya los dias de la semana, pero excluya los dias festivos// | ||
+ | |||
+ | < | ||
+ | define timeperiod{ | ||
+ | timeperiod_name llamadas | ||
+ | use weekdays ; | ||
+ | exclude holidays ; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | // | ||
+ | |||
+ | < | ||
+ | define timeperiod{ | ||
+ | timeperiod_name john-oncall | ||
+ | 2007-08-01 / 2 00: | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | //En la entrada del contacto deberemos especificarle los timeperiods para hosts y servicios// | ||
+ | < | ||
+ | define contact{ | ||
+ | contact_name john | ||
+ | ... | ||
+ | host_notification_period john-oncall | ||
+ | service_notification_period john-oncall | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Agregando Comandos ==== | ||
+ | |||
+ | En Nagios los encargados de recabar los datos del monitoreo, de mostrar alertas, de todas las tareas, son los comandos. | ||
+ | |||
+ | Los mismos se dividen en comandos de performance y en comandos de chequeo, los primeros son utilizados para algunos casos en particular. | ||
+ | |||
+ | Los comandos de chequeo no traen datos de los equipos a monitorear, como consumo de CPU, Memoria, Disco, procesos corriendo, puertos abiertos etc, es decir todos los datos necesarios de la monitoria. | ||
+ | |||
+ | Los comandos de performance se utilizan cuando hay que guardar ciertos datos o enviarlos a algún host externo etc, con información de algún servicio. | ||
+ | |||
+ | Una entrada en un archivo de configuración de comandos puede ser como la siguiente | ||
+ | |||
+ | < | ||
+ | define command{ | ||
+ | command_name check_snmp_mem | ||
+ | command_line $USER1$/ | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | define command{ | ||
+ | command_name {nombre del comando} | ||
+ | command_line {datos de ejecucion} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **command_name** | ||
+ | |||
+ | El nombre que el comando tendra para nuestra configuración personal de Nagios | ||
+ | |||
+ | |||
+ | **command_line** | ||
+ | |||
+ | Modo del cual Nagios ejecutara el comando en cuestión, con su ruta física y argumentos | ||
+ | Lo que vemos en entre signos $ son variables internas de nagios, llamadas macros, las mas comunes son: | ||
+ | |||
+ | **$USER1$** | ||
+ | |||
+ | **$HOSTADDRESS$** : Tiene la IP de hosts desde el cual se esta corriendo el servicio | ||
+ | |||
+ | **$ARG1$ $ARG2$ $ARG3$ $ARG4$** : Son los números en orden de argumentos que recibe el comando a ejecutar | ||
+ | |||
+ | |||
+ | Podemos definir nuestros propios macros seteando variables en el archivo resource.cfg | ||
+ | |||
+ | |||
+ | //Se deberán agregar al archivo {nagios-dir}/ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Manejadores de Eventos - Event Handler ==== | ||
+ | Cuando hablamos de **event handler** o **manejador de eventos**, nos referimos a funciones que responden a eventos que se producen, como pueden ser un cambio de estado. | ||
+ | |||
+ | ==== Configuración de alertas ==== | ||
+ | |||
+ | === Agregando Grupos de contacto === | ||
+ | |||
+ | Para que el Nagios envíe notificaciones sobre el estado de los servicios es necesario definir grupos a los cuales enviárselas, | ||
+ | |||
+ | |||
+ | A continuación podemos ver una configuración típica de un grupo de contactos | ||
+ | |||
+ | < | ||
+ | | ||
+ | contactgroup_name | ||
+ | alias | ||
+ | members | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | | ||
+ | contactgroup_name | ||
+ | alias | ||
+ | members | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **contactgroup_name** | ||
+ | |||
+ | Nombre que se le asignara al grupo de contacto | ||
+ | |||
+ | |||
+ | **alias** | ||
+ | |||
+ | Descripción corta para identificar al grupo | ||
+ | |||
+ | |||
+ | **members** | ||
+ | |||
+ | |||
+ | Miembros del grupo separados por comas | ||
+ | |||
+ | |||
+ | |||
+ | //Se deberá crear el archivo {nagios-dir}/ | ||
+ | |||
+ | |||
+ | === Agregando Contactos === | ||
+ | |||
+ | Para recibir las notificaciones de Nagios es necesario generar contactos que estén incluidos en diferentes grupos de contactos, una configuración simple para un contacto se ve como la siguiente entrada | ||
+ | |||
+ | |||
+ | < | ||
+ | | ||
+ | contact_name | ||
+ | alias Administrador Nagios | ||
+ | contactgroups | ||
+ | service_notification_period | ||
+ | host_notification_period | ||
+ | service_notification_options | ||
+ | host_notification_options | ||
+ | service_notification_commands | ||
+ | host_notification_commands | ||
+ | email root@localhost | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | | ||
+ | contact_name | ||
+ | alias {descripcion del contacto} | ||
+ | contactgroups | ||
+ | service_notification_period | ||
+ | host_notification_period | ||
+ | service_notification_options | ||
+ | host_notification_options | ||
+ | service_notification_commands | ||
+ | host_notification_commands | ||
+ | email {direccion de email del contacto} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **contact_name** | ||
+ | |||
+ | Nombre literal a asignarle al contacto | ||
+ | |||
+ | |||
+ | **alias** | ||
+ | |||
+ | Alias descriptivo del contacto, ej Administrador de Routers | ||
+ | |||
+ | |||
+ | **contactgroups** | ||
+ | |||
+ | Grupos de contactos a los cuales pertenece | ||
+ | |||
+ | |||
+ | **service_notification_period** | ||
+ | |||
+ | Periodo de tiempo en el cual recibir notificaciones sobre el estado de los servicios | ||
+ | |||
+ | |||
+ | **host_notification_period** | ||
+ | |||
+ | Periodo de tiempo en el cual recibir notificaciones sobre el estado de los hosts | ||
+ | |||
+ | |||
+ | **service_notification_options** | ||
+ | |||
+ | Opciones de cuando realizar una notificación sobre el estado de un servicio | ||
+ | |||
+ | |||
+ | **host_notification_options** | ||
+ | |||
+ | Opciones de cuando realizar una notificación sobre el estado de un host | ||
+ | |||
+ | |||
+ | **service_notification_commands** | ||
+ | |||
+ | Comando para realizar la notificación del estado del servicio, podemos definir múltiples comandos | ||
+ | |||
+ | |||
+ | **host_notification_commands** | ||
+ | |||
+ | Comando para realizar la notificacion del estado del host, podemos definir múltiples comandos | ||
+ | |||
+ | |||
+ | **email** | ||
+ | |||
+ | Email perteneciente al contacto en el cual recibira las notificaciones por email. Para que esto funcione se debe tener correctamente configurado el mail delivery local. | ||
+ | |||
+ | |||
+ | |||
+ | //Se deberá crear el archivo {nagios-dir}/ | ||
manuales/nagios/capacitacion/implementacion_tecnica.txt · Última modificación: 2017/07/21 15:54 por cayu