Herramientas de usuario

Herramientas del sitio


manuales:nagios

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
manuales:nagios [2009/12/03 18:05] cayumanuales:nagios [2015/09/15 17:47] (actual) – [Sitios de consultas] cayu
Línea 1: Línea 1:
 ====== Monitoria y análisis de Red con Nagios ====== ====== Monitoria y análisis de Red con Nagios ======
  
-Las redes de cómputo de las organizaciones, se vuelven cada vez más complejas y la exigencia de la operación es cada vez mas demandante. Las redes, cada vez mas, soportan aplicaciones y servicios estratégicos de las organizaciones. Por lo cual el análisis y monitoreo de redes se ha convertido en una labor cada vez mas importante y de carácter pro-activo para evitar problemas.+{{ :manuales:nagios:nagios_logo.png? |}}
  
 +{{ :varios:mapa_argentina_bandera.jpg|}}
  
-Para prevenir errores en un sistema existe podemos utilizar un equipo que se ocupe de estar "controlado y observando" el funcionamiento de la red, esto podemos realizarlo por medio de un software llamado Nagios.+Las redes de cómputo de las organizaciones, se vuelven cada vez más complejas y la exigencia de la operación es cada vez mas demandante. Las redes, cada vez mas, soportan aplicaciones y servicios estratégicos de las organizaciones. Por lo cual el análisis y monitoreo de redes se ha convertido en una labor cada vez mas importante y de carácter pro-activo para evitar problemas. Con el termino Monitoreo nos referimos a un sistema que constantemente monitorea una red de computadoras para detectar sistemas lentos o en mal funcionamiento y que notifica al administrador de la red en caso de falla vía correo electrónico, sms u otros medios. 
 + 
 +Para prevenir errores en un sistema podemos utilizar una aplicación que se ocupe de estar "controlado y observando" el funcionamiento de la red, esto podemos realizarlo por medio de un software llamado Nagios. Nagios es un sistema de monitoreo de servidores, aplicaciones y redes. Comprueba clientes y servicios, especificados alertando en caso de problemas como caídas de servicio ó restauración de los mismos.
  
  
Línea 31: Línea 34:
 El mismo, esta constituido por un Núcleo que construye la interfaz de usuario y por plugins los cuales representan los ojos y oídos de Nagios y por lo cual se encargan de recopilar información (bajo demanda). Los mismos pueden estar programados en diversos lenguajes como C, C++, Python, Perl, PHP, Java, Bash etc, ya que Nagios es independiente del lenguaje en el cual que se desarrolle el plugin y solo procesa los datos recibidos de este, para la posterior elaboración y envío de notificaciones a los encargados de la administración del sistema en cuestión. El mismo, esta constituido por un Núcleo que construye la interfaz de usuario y por plugins los cuales representan los ojos y oídos de Nagios y por lo cual se encargan de recopilar información (bajo demanda). Los mismos pueden estar programados en diversos lenguajes como C, C++, Python, Perl, PHP, Java, Bash etc, ya que Nagios es independiente del lenguaje en el cual que se desarrolle el plugin y solo procesa los datos recibidos de este, para la posterior elaboración y envío de notificaciones a los encargados de la administración del sistema en cuestión.
  
 +
 +{{ :manuales:nagios:screen_nagios.png?680 |}}
 +
 +{{ :manuales:nagios:screen_nagvis.png?680 |}}
  
  
Línea 36: Línea 43:
 ===== Objetivos y necesidades ===== ===== Objetivos y necesidades =====
  
-Conocer el estado de diferentes servicios brindados por equipos como servidores corriendo diferentes sistemas operativos, routers de los cuales dependen varios equipos. Obtener información de los mismos como //estado en red//, //tiempo arriba//, //puertos abiertos//, //servicios// y //procesos corriendo//, //carga de CPU//, carga de //memoria física//, carga de //memoria virtual//, //espacio en disco//, //interfaces de red activas//. Es posible conocer los estados y datos de estos diferentes equipos para una posterior elaboración de reportes etc, elaborando una configuración personalizada de Nagios para cada caso en particular, por medio de testeo de paquetes de red, o haciendo uso de diferentes funciones que provee el protocolo SNMP (Simple Network Management Protocol) que nos permite gestionar y/o supervisar datos de diferentes elementos y componentes de la red como routers, switches, servidores etc y al ser un protocolo standard es posible monitorizar una amplia variedad de casos en escenarios con sistemas ó equipos diferentes.+Conocer el estado de diferentes servicios brindados por un conjunto heterogéneo de dispositivos y equipos como servidores corriendo diferentes sistemas operativos, routers de los cuales dependen varios equipos, sistemas SCADA y sistemas de analizadores de humedad/temperatura/gases etc. Obtener información de los mismos como //estado en red//, //tiempo arriba//, //puertos abiertos//, //servicios// y //procesos corriendo//, //carga de CPU//, carga de //memoria física//, carga de //memoria virtual//, //espacio en disco//, //interfaces de red activas//.
  
 +Para poder tener esta información se debe establecer un control que asegure el mantenimiento de los dispositivos y se puedan efectuar acciones en forma preventiva o correctiva según corresponda en tiempo y forma ante eventuales anomalías de los servicios.
  
-Con lo cual podremos concluir si el sistema :+Es posible conocer los estados y datos de estos diferentes equipos para una posterior elaboración de reportes etc, elaborando una configuración personalizada de Nagios para cada caso en particular, por medio de testeo de paquetes de red, o haciendo uso de diferentes funciones que provee el protocolo SNMP (Simple Network Management Protocol) que nos permite gestionar y/o supervisar datos de diferentes elementos y componentes de la red como routers, switches, servidores etc y al ser un protocolo standard es posible monitorizar una amplia variedad de casos en escenarios con sistemas ó equipos diferentes.
  
 +
 +**Con lo cual podremos concluir si el sistema :**
  
     * Lleva a cabo eficazmente su finalidad     * Lleva a cabo eficazmente su finalidad
     * Utiliza eficientemente los recursos.     * Utiliza eficientemente los recursos.
  
 +**Para :**
  
 +    * Optimizar los Procesos
 +    * Reducir Costos Operativos
 +    * Llevar a cabo un mejoramiento del Control de Calidad
 +        * Minimizar Tiempos => $$$$
  
-Ya que podemos : +**Ya que podemos :**
  
     * Detectar de forma sistemática el uso de los recursos y los flujos de información dentro de una organización.     * Detectar de forma sistemática el uso de los recursos y los flujos de información dentro de una organización.
Línea 55: Línea 69:
     * Verificar el cumplimiento de Normativas.     * Verificar el cumplimiento de Normativas.
     * Revisión de la gestión de recursos.     * Revisión de la gestión de recursos.
 +
 +**Con esto podemos elaborar informes, responder ante evaluaciones externas y documentar la evaluación para reflejar el desarrollo y los resultados de la misma pero además vamos a :**
 +
 +    * Fortalecer bases de información para grupos y personas de apoyo que trabajan con los sistemas.
 +
 +**Puntos principales a tener en cuenta :**
 +
 +    * Aplicación estable para entornos productivos.
 +    * Licencia de código abierto.
 +    * Debe monitorear equipos idenpendientemente de sistemas operativos : Windows, Linux, Unix, CISCO iOS. 
 +    * Generar alertas cuando se identifican incidencias.
 +    * Los datos se deben poder exportar para su posterior análisis. 
 +    * El sistema debe poder trabajar tanto con agentes instalados en los equipos clientes como sin ellos.
 +    * Poder generar complementos (plugs in) independientemente del lenguaje de programación o ubicación de los mismos.
 +    * Documentación suficiente y clara disponible del sistema de monitoreo. 
 +    * El sistema debe tener una comunidad que lo respalde y preferentemente empresas.
 +    * El sistema debe ser muy conocido o utilizado. Existencia de empresas clientes o usuarios a los que se puede referenciar.
 +    * Actualizaciones regulares.
 +
 +**Como adicional debemos cubrir :**
 +
 +  * Necesidades de Automatización, Instrumentación y Optimización de los procesos industriales.
 +
 +**Gestión proactiva para alcanzar los objetivos organizacionales**
 +
 +Diseñar e implementar procesos operativos y administrativos eficaces aplicables a la Gestión de la Red de TI.
 +
 +La **Gestión de Problemas** puede ser:
 +
 +  * **Reactiva:** Analiza los incidentes ocurridos para descubrir su causa y propone soluciones a los mismos.
 +  * **Proactiva:** Monitorea la calidad de la infraestructura TI. Analiza los Registros de Incidentes y configuraciones utilizando datos de otros procesos de Gestión del Servicio de TI para identificar tendencias o problemas significativos con el objetivo de prevenir incidentes incluso antes de que estos ocurran.
 +
 +
 +El meta a llegar para mejorar la eficiencia de un Área de TI, es poder ir adoptando una metodología de gestión proactiva de recursos.
 +==== Relevamiento y diseño del modelo ====
 +
 +El relevamiento es la herramienta principal a desarrollar durante la fase de Planificación de un sistema integral de monitoreo, para que este a su vez pueda dar datos fieles de como se ven afectados los procesos tanto operativos y de apoyo, como los procesos esenciales de producción y de negocio.
 +
 +=== Infraestructura de equipamiento, software de base y comunicaciones ===
 +
 +Para conocer la base donde se apoyaran los servicios de TI se deberá analizar lo siguiente :
 +
 +  * Software de base, desarrollo y comunicaciones.
 +  * La capacidad del equipamiento para absorber, en situaciones de exigencia, las operaciones del proceso que están automatizadas y el crecimiento permitido para incorporar las faltantes.
 +  * Las comunicaciones instaladas y sus características técnicas (señalización, protocolos, software de red, etc.). Se relevarán las redes LAN y las WAN, como así también las posibilidades de instalación de áreas no cubiertas en  las que se ejecuten los procesos analizados.
 +  * Las ubicaciones geográficas y direcciones  de los distintos inmuebles en los  que se realizan los procesos con indicación de distancias entre ellos. 
 +    * Estado general de las instalaciones.
 +  * Los costos por servicios informáticos y de comunicaciones (Ej.: mantenimiento de hardware o software, comunicaciones, licencias de software de base, alquiler, leasing o financiamiento de equipamiento,  etc.
 +
 +=== Software de aplicación ===
 +
 +Se puede comenzar a partir de un un inventario del software o desarrollarlo contenga como mínimo :
 +
 +  * Denominación del sistema o subsistema.
 +  * Antigüedad promedio.
 +  * Cantidad de aplicaciones que lo integran.
 +  * Desarrollo propio o de terceros, indicando si la Organización tiene capacidad de automantenimiento.
 +  * Lenguaje de desarrollo.
 +  * Esfuerzo  de mantenimiento  exigido.
 +  * Objeto y alcance: eventos o actividades del proceso que automatiza.
 +  * Productos que brinda
 +  * Documentación funcional y técnica.
 +  * Estimación en equivalencia de tiempo completo de la cantidad de personas afectadas al desarrollo, mantenimiento y operación del sistema.
 +  * Costo de licencias y de mantenimiento, en caso de contratos con terceros.
 +
 +=== Capacidad de gestión de los servicios informáticos ===
 +
 +Capacidad de respuesta de los recursos humanos integrantes del servicio informático para afrontar los requerimientos de información que se plantean en la ejecución de los procesos estudiados.
 +
 +Se constatará  si existen normas, métodos, procedimientos y el nivel de retraso respecto de requerimientos de mantenimiento o nuevos sistemas.
 +
 +Estimar los costos de los servicios informáticos
 +
 +Los principales insumos para la determinación del costo de los servicios informáticos son:
 +
 +  * Contratos informáticos por alquiler, leasing o compra financiada de : equipamiento, software de base y comunicaciones.
 +
 +Si  la infraestructura es propiedad de la Organización se estimarán los costos de reposición para aplicar cuotas de amortización para un período de *n*  años (plazo que se estima razonable para la depreciación de un sistema de información automatizado) y su antigüedad actual promedio.
 +
 +  * Contratos de alquiler de licencias de software aplicativo.
 +  * Sueldos y costos operativos de los empleados del servicio informático.
 +  * Insumos mensuales consumidos por el equipo humano de trabajo de TI (impresiones, tarjetas de credito corporativas, gastos de transporte etc).
 +  * Servicios varios (aire acondicionado del datacenter, suministro eléctrio etc).
 +
 +Cada uno de los ítems relevados deberá ser prorrateado  conforme a la base de distribución que se considere más adecuada. Por ejemplo, para distribuir los costos de personal se puede utilizar el procedimiento equivalente de tiempo completo (ETC).  Si una persona que trabaja 200 horas mensuales le dedica el 10% de su tiempo a  mantener un sistema relacionado  al proceso en estudio, estará afectando el ETC de 20 horas de trabajo. Luego, si su sueldo más leyes sociales es de **$XX** por mes, resultará que el costo proporcional de dicha actividad es de **$NN**.
 +
 +En otras situaciones, como alquileres de inmuebles,  la base de prorrateo puede ser metros cuadrados ocupados.
 +
 +=== Identificar las soluciones informáticas desarrolladas por terceros ===
 +
 +  * Nivel de automatización de los procesos sometidos a análisis y grado de colaboración para  una solución integral de gestión..
 +  * Portabilidad de la solución respecto de plataformas de equipamientos y sistemas operativos.
 +  * Infraestructura de la empresa y cantidad de productos instalados.
 +  * Facilidad de instalación y requisitos de entrenamiento del personal que seguirá con el mantenimiento.
 +  * Nivel de parametrización.
 +  * Facilidad de uso.
 +  * Calidad de la documentación disponible.
 +  * Flexibilidad ante la necesidad de ajustes.
 +  * Frecuencia de aparición de nuevas versiones.
 +
 +=== Herramientas principales para el análisis ===
 +
 +  * Mapa de sistemas.
 +  * Relevamiento de infraestructura informática y de comunicaciones.
 +    * Inventario de infraestructura informática  y de comunicaciones  (Activos de TI, Hardware, Software, Aplicaciones etc).
 +  * Informe preliminar de  soluciones informáticas desarrolladas por terceros.
 +  * Informe de costos informáticos y de comunicaciones.
 +
 +=== Herramientas y productos principales a utilizar ===
 +
 +  * Gestión de Inventario
 +  * CMDB
 +  * Sistema de administración de Proyectos
 +
 +==== Análisis de costos y relación con Disponibilidad de Servicio - SLA ====
 +
 +A la hora de contratar un servicio de Data Center por lo general se hace para suplir varias carencias que se pueden dar en la organización que si bien a veces esa carencia es de infraestructura y de inversión monetaria, aunque muchas otras veces es por la imposibilidad de disponibilizar tiempo y recursos humanos en el proyecto de implementación del mismo.
 +
 +Cuando uno contrata un servicio de Data Center hay varios factores a tener en cuenta que deben ser provistos y desarrollados por el prestador del servicio y a la hora de ofrecer el mismo, esos factores suelen afectar directamente en su **costo** :
 +
 +  * Costo determinado por varios factores :
 +    * Disponibilidad
 +    * Redundancia
 +    * Escalabilidad
 +    * Eficiencia
 +  * Servicios extras con interdependencia y relación de unos con otros :
 +    * Backup administrador por el proovedor
 +    * Servicio manos y ojos
 +    * Alertas proactivas 7x24
 +  * Descuentos aleatorios
 +
 +Todos estos factores deben estar esclarecidos ya que no solo puede existir la necesidad de asegurarle y garantizarle efectivamente esto a los utilizadores externos, sino también a los internos, ya que la Disponibilidad es el factor determinante de la contratación del servicio. Por lo general se establecen acuerdos de Disponibilidad de Servicio - SLA, con diferentes niveles y con un accionar y escalamiento determinado para cada caso. 
 +
 +Lo comentado anteriormente en la mayoría de los casos y por lógica y sentido común suele encuadrarse dentro de un marco legal por medio de un contrato y dentro del mismo suele haber cláusulas por multas monetarias debido a tiempos de indisponibilidad o mal funcionamiento del servicio. El proceso de costeo para realizar la calificación de incidentes y su posterior valorización monetaria debe estar detallado en una norma que regle dicho procedimiento definido en la contratación del servicio.
 +
 +Por y para eso para nosotros es necesario como proovedores de servicio que somos y al estar abasteciendo a otras empresas con exigencias necesarias para el desarrollo de su actividad, **en este caso, la base material para correr su infraestructura informática** :
 +
 +<note warning>
 +Que tengamos un registro minucioso y reportado de eventos ya que estos pueden afectarnos directamente de forma legal y monetaria en el desarrollo de nuestras actividades sino llevamos control de los mismos. Para a su vez así poder justificar y definir el costo y alcance de la arquitectura empresarial de la metodología de gestión de servicios de negocio poniendo foco en las necesidades del cliente.
 +</note>
 +
 +=== Estimación de porcentaje de disponibilidad de servicio ===
 +
 +Hay variadas formas de calcular la **disponibilidad de servicio** :
 +
 +=== Ejemplo de cálculo SLA ===
 +
 +<note>
 +**D = A/B x 100**
 +
 +**A** es el número de horas en las cuales cada una de los servicios estuvieron disponibles. Este parámetro se verá disminuido con respecto a las horas que el sistema no funciona correctamente, es decir, cuando se ve afectado por cualquiera de los siguientes problemas:
 +  * Caída de cualquiera de los servicios.
 +  * Latencias superiores a **x** segundos.
 +  * Degradación del servicio, alterando los tiempos de respuesta.
 +  * Errores en la configuración.
 +  * Fallas humanas provocadas.
 +  * Cualquier otro factor que se considere pertinente.
 +**B** es el número de horas en que los servicios deberían estar disponibles, cuyo valor es setecientos veinte (720) horas mensuales;
 +
 +**D** es el porcentaje de Disponibilidad.
 +
 +**El incumplimiento de la Disponibilidad acordada, puede llevar a penalizaciones previamente acordadas**
 +
 +**Atención al Cliente**
 +Se debe prestar un servicio de soporte acordado mediante contrato.
 +En caso de que el cliente reporte una indisponibilidad o fallas en el servicio, nosotros una vez reportada la falla y entregado el ticket se deberá de informar al cliente el seguimiento y solución que se le haya dado, en intervalos definidos.
 +Todo esto definidos en :
 +  - Acuerdos de niveles de servicio
 +    - Tiempo de atención a fallas
 +    - Niveles de Escalamiento – aseguramiento para los servicios
 +    - Tiempo de atención al usuario.
 +
 +
 +**Punto de restauración de servicio**, se debe verificar con el Cliente por medio de **Pruebas de Aceptación del Servicio** a definir contractualmente que el Cliente contratante del servicio realizará a fin de acusar conformidad con la restauración de la disponibilidad del servicio.
 +</note>
 +
 +=== Calculando el costo por caída de Servicio ===
 +
 +Factores a tener en cuenta en un caso de ejemplo para una compañía muy dependiente de recursos de TI en el cual la indisponibilidad de servicio tiene mayor incidencia :
 +
 +  * **Coste de Inactividad de los empleados / Perdida de Productividad**
 +    * Básicamente es “Cuánto cuesta que nuestros empleados estén parados”, para ello, podemos utilizar el coste medio por hora de los empleados y lo multiplicaremos por el tiempo de inactividad y por el número de empleados afectados por la caída.
 +
 +<note>**Coste Medio de Inactividad** = Coste por hora de empleado * Nº de empleados afectados * Duración de la interrupción de servicio.</note>
 +
 +  * **Pérdida de Operaciones**
 +    * Este concepto hace referencia al número de operaciones que no se llevan a cabo por la caída de sistemas, ya sean ventas, transacciones, pedidos o cualquier otra operación objeto del negocio de la compañía. Por ejemplo, si nuestra compañía se dedica a vender productos por internet podemos determinar en función de las estadísticas de venta diarias cuanto nos cuesta tener parado nuestro portal web.
 +
 +  * **Incumplimientos de normativa, acuerdos o SLA.**
 +    * Nuestra compañía puede tener contratos de prestación de servicios con otras empresas en las cuales se recogen penalizaciones por incumplimiento del mismo. Una caída de nuestro sistema puede afectar a estas empresas ocasionándolos un agravio y por ende reclamarnos una compensación económica. Por otro lado, algunas empresas por el sector al que se dedican o por el tipo de servicio que prestan, están sujetas a normativas o leyes que ante una parada del sistema pueden acarrearles sanciones o multas.
 +
 +  * **Impacto en marca, pérdida de confianza.**
 +    * Esto es algo muy relativo y tiene un impacto según la cultura de la zona donde se preste el servicio, pero puede ser un parámetro a considerar a la hora de determinar el coste por caída de servicio. Muchas compañías emplean gran cantidad de recursos en campañas publicitarias, redes sociales, patrocinios etc., para afianzar y reforzar su marca en el mercado, una interrupción de servicio en los sistemas informáticos puede dañar su imágen o en algunos casos que el cliente desestime en ese momento utilizar sus productos o servicios.
 +
 +//Podemos determinar el costo en función del gasto económico que tiene que realizar la empresa para recuperar los niveles de confianza previos a la caída, pero para eso tenemos que establecer una ponderacíón de cada uno de los factores tenidos en cuenta para luego elaborar el cálculo de disponibilidad de servicio y el porcentaje de perjuicio a la metodología de provisión del servicio en la cuál se enmarca la empresa en cuestión.//
 +
 +=== Documentación de SLA ===
 +
 +La documentación de SLA posee la vida y desarrollo de versiones del servicio. El documento posee revisión y firmas entre las partes que dan fé de la evolución y modificación de los acuerdos.
 +
 +El documento debe contener las siguientes observaciones:
 +
 +  - **Histórico**
 +    - Ajuste de la revisión, fecha, descripción del histórico y autor de la revisión.
 +  - **Aprobaciones**
 +    - Nombre, Fecha, título, firma y dirección de correo electrónico.
 +  - **Alcance**
 +    - Audiencia
 +    - Propósito
 +    - Supuestos
 +    - Contactos
 +  - **Garantías y recomendaciones y del detalle del servicio**
 +    - Formatos de archivo
 +    - Envío y Expectativas
 +      - Tipo de archivo, frecuencia esperada
 +    - Acciones de escalamiento
 +    - Recursos para escalar
 +    - Tiempo para la solución de problemas
 +    - Histórico de desempeño
 +  - **Gestión de Problemas**
 +  - **Gestión del Desempeño**
 +  - **Funciones y Responsabilidades del Cliente**
 +  - **Terminación**
 +
 +  * Crear documentación de ayuda adicional
 +    * Información de contacto
 +      * Nombre función, teléfono, teléfono celular, etc
 +  * Definiciones, términos, acrónimos;
 +
 +=== Disposiciones legales ===
 +
 +Además con los datos proporcionados por Nagios en la mayoría de los casos se puede obtener una explicación de cuál es el problema que está experimentando en su infraestructura, aunque sea aparentemente invisible, además esta operatoria ayuda en nuestra estrategia implementación de **BS 10012:2009 Data Protection - Specification for a Personal Information Management System (PIMS)**, la cual por ejemplo en Mexico es necesaria para cumplir los requerimientos de la **LFPDPPP** (LEY FEDERAL DE PROTECCIÓN DE DATOS PERSONALES EN POSESIÓN DE LOS PARTICULARES), ya que necesitamos capacidad de monitoreo para rastrear cualquier cambio en la información y poder llegar a establecer quién está utilizando cuales datos y cómo lo hace.
 +
 +
 +==== Estrategias ====
 +
 +== Monitoreo Activo ==
 +
 +Este tipo de monitoreo se realiza enviando paquetes desde sl sistema de monitoreo a los clientes que necesitamos monitorear. Ya sea un PING o pedidos a determinadas 
 +aplicaciones en los mismos.
 +
 +  * Ventajas
 +    * No hay que instalar un agente especializado en el cliente. En algunos casos solo SNMP. Es una opción para casos en los que no es posible instalar aplicaciones en los clientes
 +  * Desventajas
 +    * Tiene métricas menos especificas por consiguiente se pueden realizar análisis menos detallados. Pueden ser afectadas por hechos que sucedan en la red..
 +
 +== Monitoreo Pasivo ==
 +
 +Esta estrategia se basa en la obtención de datos a partir desde los clientes a monitorear hacia el sistema de monitoreo. Este enfoque bien planificado puede ser mas perfomante a lo que trafico de red se refiere comparándolo con la técnica de Monitoreo Pasivo.
 +
 +  * Ventajas
 +    * Información más específica y más detallada. Mayor flexibilidad para realizar monitoreos personalizable. Posibilidad de crear soluciones de monitoreo que controlen estados de servicios o métricas no estándares sobre aplicaciones o hardware. El control de las aplicaciones y servicios se realiza directamente en el nodo monitoreado. Mayor seguridad en la red ya que se manejan protocolos encriptación. Menor riesgo de detección de inactividades.
 +  * Desventajas
 +    * Puede provocar mayor carga de actividad en el cliente. Se debe instalar el agente en todos los equipos que se van a monitorear.
 +
 +=== Capas a chequear ===
 +
 +  * **Aspectos generales**
 +    * Monitoreo de objetos o cajas negras con agentes o sin agentes
 +    * Reportes estadísticos
 +  * **Infraestructura / Funcionalidad de Hardware**
 +    * Uptime
 +    * Respuesta
 +    * **Infraestructura / Sistema Operativo**
 +      * Recursos
 +      * Procesos
 +      * Núcleo
 +      * **Servicios y aplicaciones**
 +        * Procesos
 +        * Tiempos de respuesta
 +        * Usuarios
 +  * **Notificaciones y alertas en caso de incidente**
 +
 +=== Que estrategía utilizar ===
 +
 +Por ejemplo, utilizamos una estrategia de Monitoreo Activo
 +
 +  - Si el servicio que tenemos depende de un enlace de red
 +    - Si ese servicio de conectividad de red esta caído y es el único acceso al servicio :
 +      - Podemos decir que el servicio esta caído por ser inaccesible, igualmente a la hora de elaborar un reporte se detallará la razón como caída de enlace de red.
 +    - Si ese servicio de conectividad no es el único modo de acceder al servicio o solo se cayó un nodo de la red WAN, ya sea una Unidad Organizativa, como una sucursal etc.
 +      - Solo se mostrará como caído ese nodo de red, ejemplo Sucursal 1. Pero el servicio seguira figurando correctamente.
 +
 +
 +==== Information Technology Infrastructure Library - ITIL ====
 +
 +ITIL es un conjunto de Mejores Prácticas en la Gestión de Servicios de TI. Es una guía, y no un manual de cómo han de hacerse las cosas.
 +
 +Situándonos en el marco ITIL (Biblioteca de Infraestructura de Tecnologías de Información) para la provisión de servicios TI con calidad, los tres objetivos claves de la Gestión de Servicios son:
 +
 +    * Alinear los servicios informáticos con las necesidades actuales y futuras
 +    * Mejorar la calidad de los servicios informáticos entregados 
 +    * Reducir el coste a largo plazo del suministro de servicios
 +
 +**Su objeto de aplicación parte de estas premisas**
 +
 +    * No se puede gestionar lo que no se puede controlar.
 +    * No se puede controlar lo que no se puede medir.
 +    * No se puede medir lo que no se puede definir.
 +
 +=== ¿Como encuandra Nagios en ITIL? ===
 +
 +En ITIL, los consultores acompañan a las empresas a diseñar y/o implementar sus procesos. También realizan GAPs para evaluar cuan cerca se encuentra la organización de las actividades que se recomiendan en las mejores prácticas y se recomiendan posibles mejoras para acercarse.
 +
 +Nagios cubre estas áreas de ITIL :
 +
 +    * Service Desk
 +    * Incident Management
 +    * Service Level Management
 +    * Capacity Management
 +    * IT Service Continuity Management
 +    * Availability Management
 +    * ICT infrastructure Management
 +
 +=== Gestión de la disponibilidad ===
 +
 +  * La disponibilidad “Availability Management” es un proceso del “Service Delivery”, definido en las especificaciones de ITIL. 
 +    * Su meta es asegurar que el nivel de disponibilidad requerido esté proporcionado. 
 +    * La supervisión y análisis de informes de la disponibilidad es una actividad clave para asegurar que los niveles del servicio se estén cumpliendo. 
 +    * En la base de la gestión se debe supervisar  contínuamente la disponibilidad de la Infraestructura, servicios y alertar a los administradores para iniciar los procedimientos oportunos. 
 +
 +=== Tiempo resolución de Incidencias ===
 +
 +  * El tiempo de identificación de un problema mejora notablemente con la utilización de Nagios
 +    * Su meta es asegurar que el administrador identifique el problema antes que lo hagan los usuarios.
 +    * La supervisión y análisis de todos los servicios críticos y la notificación correcta es clave para reducir el tiempo de resolución
 +    * Los informes de incidencias y performance ayudarán  en la  predicción de problemas y en identificar la necesidad de crecimientos. 
 +    * Mejorando la Gestion de capacidad, estando directamente conectado con el processo de ITIL “Capacity Management”
 +
 +**Ciclo de un incidente**
 +
 +{{:manuales:nagios:itil_incident.png?800|}}
 +
 +**Administracion de la capacidad**
 +
 +{{:manuales:nagios:itil_capacity.png?800|}}
 +
 +== Aplicando las normas ITIL ==
 +
 +  * Alinear los servicios de TI con las necesidades de la empresa (el negocio), actuales y futuras.
 +  * Mejorar la calidad de los servicios de TI.
 +  * Reducir los costos por la proveeduría de servicios de TI en el mediano y largo plazos.
 +  * Mejora de rendimiento de la inversión de TI.
 +  * Se mide el sistema de TI de la organización evaluando los procesos de Soporte Técnico y Entrega de Servicios comparándolos con las Mejores Prácticas.
 +
 +=== Objetivos ===
 +== Nuestras necesidades ==
 +
 +Estan en orden de prioridad, pero todas van atadas de la mano una con otra
 +
 +<note warning>Solución de Monitoreo Integral</note>
 +<note important>Registro y Correlación de Eventos, tanto en equipos de red como en servidores</note>
 +<note>Documentación Rápida, Participativa,Colaborativa\\ Debe ser vía Web, con edición individual de secciones y versionado</note>
 +
 +=== Objetivos a largo plazo ===
 +
 +**CMDB Biblioteca para organizar el servicio de TI**
 +
 +  * **Relaciones de muchos a muchos**
 +  * **Inventario de equipos**
 +    * Detalle de responsable técnico
 +    * IP
 +    * Software Instalado
 +  * **Base de IP**
 +    * Detalle de las subredes
 +    * Equipos asociados con sus ip y MAC si coresponde
 +  * **Listado de reglas de ruteo indivuales por equipo, en caso de que existan**
 +  * **Base de Certificados SSL**
 +    * Certificado con fecha de emisión y fecha de caducidad
 +    * Detalles tecnicos y equipos donde se utilizan los certificados
 +  * **Base de Proovedores, Contratos y Contactos**
 +    * Contactos determinados por tipo, y detalles de como contactarlos
 +    * Detalles de un proovedor que presta servicios y le compramos equipos
 +    * Contratos detallados, con servicios y equipos asociados a los que aplica
 +  * **Base de Usuarios y Contraseñas**
 +    * Nombre de Usuario, Contraseña y equipo u aplicación asociado
 +
 +  * **Necesario para enmarcar en ITIL**
 +    * Historico de modificaciónes
 +    * Inventario de los activos del Departamento de IT
 +    * Estructura del inventario y relaciones entre los diferentes elementos
 +    * Manejo de Licencias
 +    * Gestión de problemas, incidentes
 +      * Quejas y reclamos
 +    * Posibilidad de adjuntar documentación de cada item presente
 +    * SLA basados ​​en contratos y horarios
 +
 +== Inventariado y gestion de Incidencias ==
 +
 +**¿Como terminamos de cubrir los puntos anteriores?**
 +
 +  * Para la gestion de inventario y de incidencias presentadas con los equipos y servicios inventariados se puede implementar GLPI
 +    * Ademas se busca una herramienta que se integre y complemente al el sistema de ivnentario, como FusionInventory, que es una variante de OCS-Inventory, que se integra completamente con el Software GLPI
  
 =====  Descripción =====  =====  Descripción ===== 
  
 === Que se puede hacer con Nagios === === Que se puede hacer con Nagios ===
- 
  
   * Monitorización de servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP).    * Monitorización de servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP). 
-  * Monitorización de los recursos de un host (carga del procesador, uso de los discos, logs del sistema) en varios sistemas operativos, incluso Microsoft Windows con el plugin NRPE_NT. +  * Monitorización de los recursos de un host (carga del procesador, uso de los discos, logs del sistema) en varios sistemas operativos, incluso Microsoft Windows con el plugin NRPE_NT o también por medio del protocolo SNMP
   * Monitorización remoto, a través de túneles SSL cifrados o SSH.    * Monitorización remoto, a través de túneles SSL cifrados o SSH. 
   * Diseño simple de plugins, que permiten a los usuarios desarrollar sus propios chequeos de servicios dependiendo de sus necesidades, usando sus herramientas preferidas (Bash, C++, Perl, Ruby, Python, PHP, C#, Java, etc.).    * Diseño simple de plugins, que permiten a los usuarios desarrollar sus propios chequeos de servicios dependiendo de sus necesidades, usando sus herramientas preferidas (Bash, C++, Perl, Ruby, Python, PHP, C#, Java, etc.). 
Línea 68: Línea 474:
   * Posibilidad de definir la jerarquía de la red, permitiendo distinguir entre host caídos y host inaccesibles.    * Posibilidad de definir la jerarquía de la red, permitiendo distinguir entre host caídos y host inaccesibles. 
   * Notificaciones a los contactos cuando ocurren problemas en servicios o hosts, así como cuando son resueltos ( Vía email, pager, Jabber, SMS o cualquier método definido por el usuario junto con su correspondiente complemento).    * Notificaciones a los contactos cuando ocurren problemas en servicios o hosts, así como cuando son resueltos ( Vía email, pager, Jabber, SMS o cualquier método definido por el usuario junto con su correspondiente complemento). 
-  * Posibilidad de definir manejadores de eventos que ejecuten al ocurrir un evento de un servicio o host para resoluciones de problemas proactivas+  * Posibilidad de definir disparadores de eventos que se ejecuten al ocurrir una situación detectada dentro de un servicio o host para la resolución de problemas en forma proactiva.
   * Rotación automática del archivo de registro.    * Rotación automática del archivo de registro. 
   * Soporte para implementar hosts de monitores redundantes.    * Soporte para implementar hosts de monitores redundantes. 
Línea 83: Línea 489:
   * Areas relacionadas   * Areas relacionadas
  
-=== Como impacta  ===+=== Que se va a monitorear  === 
 + 
 +Hay que definir o acotar que niveles y aspectos se van a monitorear 
 + 
 +  * Sistema Operativo 
 +  * Utilización de red 
 +    * Trafico y consumo de ancho de banda 
 +    * Tiempos de respuesta 
 +  * Servicios (SAP, Web, Bases de datos, DHCP) 
 + 
 + 
 + 
 +=== Como impacta y para qué ===
  
   * Mejora de productividad   * Mejora de productividad
   * Antelacion de problemas   * Antelacion de problemas
 +    * Conocer de donde proviene el problema
   * Reporte y aviso de incidentes   * Reporte y aviso de incidentes
     * Agilidad en su tratamiento     * Agilidad en su tratamiento
 +    * Compartir datos sobre la disponibilidad y SLA
   * Mejor y mayor relacion e integracion de sectores adjuntos   * Mejor y mayor relacion e integracion de sectores adjuntos
 +  * Detectar las brechas de seguridad
 +  * Reducir y estimar periodos de inactividad y pérdidas empresariales
 +  * Planificar actualizaciones de TI - **Capacity Planning**
 +
 +=== Requerimientos Operativos ===
 +
 +  * Plan de acción bien diagramado
 +  * Personal con conocimiento medio/avanzado en redes
 +
 +{{:manuales:nagios:impacto_urgencia.png|}}
 +{{:manuales:nagios:impacto_urgencia.dia.gz|}}
 +
 +=== Recursos tecnológicos ===
 +
 +  * Hardware acorde a la inversion y criticidad de los datos
 +    * Si se van a monitorear >= 600 host y >= 2000 servicios hay que plantear bien esto, no sobrevaluar pero tampoco escatimar
 +
 +<note>
 +Ejemplo un vez tuve que monitorear una red con 700 hosts y 2000 servicios que a su vez guardaba estadisticas completas en un MySQL dentro del mismo equipo para luego generar informes SLA y mostrar datos en pantalla en una interfaz personalizada y disponia de un Intel Quad Core 2.8 GHz a 32 bits con un disco SATA de 320 GB y se quedo algo corto el hardware para los requerimientos
 +</note>
 +
 +=== Pasos específicos de Nagios === 
 +
 +Las tareas de la configuración son las siguientes:
 +
 +  * Definición de usuario para la ejecución de los //daemons//
 +  * Configuración de apache para la visualización de la consola. Generalmente se accede a la consola de Nagios utilizando vínculos cifrados, por lo que es necesario crear los certificados correspondientes.
 +  * Si el cliente posee un directorio donde centraliza todos sus usuarios, se podrá utilizar un usuario especialmente creado para consultar los perfiles de los usuarios que accederán a la consola de administración. Entre los directorios soportados se encuentra Microsoft Active Directory.
 +  * Configuración de servidor de correo (MTA) y de SMS para el envío de todas las alertas que genera el sistema.
 +  * Configuración de plugins básicos y de plugins específicos
 +  * Definición de Servicios a monitorear
 +  * Definición de dependencias de servicios (en aquellos servicios que dependan de la funcionalidad de otro servicio para poder ser monitoreados se deben configurar las dependencias, esto le indica a Nagios que no tiene que declarar fuera de línea un servicio si del que depende está caído).
 +  * Definición de Commandos (los comandos son la forma en que se verifican el estado de los servicios declarados)
 +  * Definición de HostGroups (los hostgroups son grupos de servidores que se monitorean, junto con el cliente de realiza la diagramación de estos grupos)
 +  * Definición de Contacts (los contacts son personas o más bien direcciones de email/sms que integrarán los ContactGroups)
 +  * Definición de ContactGroups (los contactgroups son grupos que se utilizarán para enviar las alertas que se generen en la monitoría)
 +  * Creación de directivas (especificación de dónde se encuentran varias definiciones de Nagios como Hostgroups, ContactGroups, Contacts, etc.)
 +  * Configuración de sistema de //parsing// de logs para producir las gráficas (históricas) de rendimiento de los servicios  
 +  * Adaptación de notificaciones (las notificaciones, el texto del correo electrónico, puede ser adaptado para una mejor identificación de problemas a los administradores)
 +
  
 ====== Tareas ====== ====== Tareas ======
Línea 99: Línea 559:
  
  
-^^Paquete^Descripción^Sitio web^^+^Paquete^Descripción^Sitio web^
 |Perl|Interprete para el lenguaje de script Perl|http://www.perl.org| |Perl|Interprete para el lenguaje de script Perl|http://www.perl.org|
 |Net::SNMP|Modulo de Perl para consultas SNMP|http://search.cpan.org/dist/Net-SNMP| |Net::SNMP|Modulo de Perl para consultas SNMP|http://search.cpan.org/dist/Net-SNMP|
 |Crypt::DES|Modulo de Perl para encripción DES, necesario para consultas SNMPv3|http://search.cpan.org/~dparis/Crypt-DES/| |Crypt::DES|Modulo de Perl para encripción DES, necesario para consultas SNMPv3|http://search.cpan.org/~dparis/Crypt-DES/|
 +|Digest::HMAC|Keyed-Hashing for Message Authentication|http://search.cpan.org/dist/Digest-HMAC/|
 +|Digest::SHA1|Perl interface to the SHA-1 algorithm|http://search.cpan.org/dist/Digest-SHA1/|
 |RRDTool|Utilitario para generación de gráficas de red y además\\ su módulo de integración con el lenguaje Perl|http://oss.oetiker.ch/rrdtool| |RRDTool|Utilitario para generación de gráficas de red y además\\ su módulo de integración con el lenguaje Perl|http://oss.oetiker.ch/rrdtool|
 |Zlib|Librería de compresión utilizada por las utilidades graficas|http://www.gzip.org/zlib/  | |Zlib|Librería de compresión utilizada por las utilidades graficas|http://www.gzip.org/zlib/  |
Línea 125: Línea 587:
 |Syslog-Ng|Logueo de eventos del sistema|http://www.balabit.com/network-security/syslog-ng/| |Syslog-Ng|Logueo de eventos del sistema|http://www.balabit.com/network-security/syslog-ng/|
 |SNARE|Agente Syslog para clientes Windows|http://www.intersectalliance.com/projects/index.html| |SNARE|Agente Syslog para clientes Windows|http://www.intersectalliance.com/projects/index.html|
 +|MK Livestatus|Aditivo para obtener los datos de Nagios \\ en Vivo via Socket (muy útil para abandonar NDO)|http://mathias-kettner.de/checkmk_livestatus.html|
 +|Gnokii|Aplicación de interfaz para celulares y modems 3G, \\ para la realización de llamadas y alertas SMS|http://gnokii.org|
 +|Thruk|Interfaz alternativa para Nagios, con muchas funciones extras, \\ basado en MK Livestatus|www.thruk.org|
 +|Interfacetable_v3t|Plugin para detectar y chequear las interfaces de un Router|[[http://www.tontonitch.com/tiki/tiki-index.php?page=Nagios%20plugins%20-%20interfacetable_v3t|http://www.tontonitch.com/]]|
 +|Check TSM|Plugin para hacer chequeos generales en Tivoli TSM|https://github.com/osklil/nagios-misc|
 +|Check Iostat|Estadisticas y alertas en base a los datos de iostat|http://sysengineers.wordpress.com/2010/05/27/check_iostat-pl-version-0-9-7/|
 +|Cliente Oracle\\ Basic\\ SQL*Plus|Cliente de Oracle para realizar los chequeos|http://www.oracle.com/technetwork/database/features/instant-client/|
 +|Eventdb|Integración de chequeos de Syslog|https://www.netways.org/projects/eventdb|
 +|Highchart for Nagios|Gráficos de PNP4Nagios en AJAX |http://sourceforge.net/projects/highchartfornag/|
  
 +Nota: 
 +
 +Hay algunos plugins que no estan mas disponibles en su sitio, aca los incluyo
 +
 +{{:manuales:nagios:nagios_lotus-blackberry.tgz|}}
 ==== Descarga y compilación ==== ==== Descarga y compilación ====
  
Línea 291: Línea 767:
 === NDOUtils === === NDOUtils ===
  
-El generador de graficas **Nagvis** necesita que **Nagios** almacene sus datos dentro de una base de datos **MySQL** ya que por defecto lo hace en archivos de texto, para que **Nagios** pueda hacer eso, deberemos instalar el modulo **NDO** que viene dentro del paquete **NDOUtils** descargable via el sitio web de **Nagios**. Este módulo es el que se encarga de generar las consultas en formato **MySQL**, que son cargadas sobre un socket El proceso **NDO2DB** corriendo como daemon lee de ese socket y carga los datos en una base de datos **MySQL**.+El generador de graficas **Nagvis** necesita acceder a los datos que **Nagios** genera, una de las formas de acceder a los mismos es que **Nagios** almacene sus datos dentro de una base de datos **MySQL** ya que por defecto lo hace en archivos de texto, para que **Nagios** pueda hacer eso, deberemos instalar el modulo **NDO** que viene dentro del paquete **NDOUtils** descargable via el sitio web de **Nagios**. Este módulo es el que se encarga de generar las consultas en formato **MySQL**, que son cargadas sobre un socket El proceso **NDO2DB** corriendo como daemon lee de ese socket y carga los datos en una base de datos **MySQL**.
  
 <code> <code>
Línea 373: Línea 849:
     * //De esta manera instalaremos la configuración inicial del daemon//     * //De esta manera instalaremos la configuración inicial del daemon//
  
 +== Configuración ==
 +
 +<code sql>
 +CREATE INDEX start_time_idx ON nagios_hostchecks (start_time);
 +CREATE INDEX start_time_idx ON nagios_servicechecks (start_time);
 +CREATE INDEX scheduled_time_idx ON nagios_timedeventqueue (scheduled_time);
 +CREATE INDEX start_time_idx ON nagios_hostchecks (start_time);
 +CREATE INDEX start_time_idx ON nagios_servicechecks (start_time);
 +CREATE INDEX scheduled_time_idx ON nagios_timedeventqueue (scheduled_time);
 +ALTER TABLE `nagios_configfilevariables` DROP INDEX `instance_id` ;
 +ADD INDEX `instance_id` ( `instance_id` , `configfile_id` );
 +</code>
 +
 +=== MK Livestatus ===
 +
 +La forma clásica de acceder a la informacion actual de sus hosts y servicios es mediante la lectura y análisis del archivo status.dat, que es creado por Nagios en una base regular. El intervalo de actualización se configura a través status_update_interval en nagios.cfg. Un valor típico es de 10 segundos. Si la instalación es cada vez más grande, usted podría tener que aumentar este valor con el fin de reducir al mínimo el uso de CPU y de E / S de disco. La interfaz web de Nagios utiliza status.dat para mostrar sus datos.
 +
 +Analizar status.dat no es muy popular entre los desarrolladores de addons. Así que muchos utilizan otro enfoque: NDO. Este es un módulo de ORC que se carga directamente en el proceso de Nagios y envía todas las actualizaciones de estado a través de un socket UNIX a un proceso de ayuda. Eso crea sentencias SQL y actualizaciones de varias tablas en una base de datos MySQL o PostgreSQL. Este enfoque tiene varias ventajas sobre status.dat:
 +
 +    * Los datos se actualizan de inmediato, no sólo cada 10 o 20 segundos.
 +    * Las solicitudes tienen acceso fácil a los datos a través de SQL. N analizador para status.dat es necesario.
 +    * En las grandes instalaciones el acceso de los addons a los datos es más rápida que la lectura status.dat.
 +
 +Lamentablemente, sin embargo, ha NDO también algunas deficiencias graves:
 +
 +    * Tiene una configuración compleja.
 +    * Se necesita una (creciente) base de datos para ser administrado.
 +    * Se alimenta de una parte significativa de sus Recursos de la CPU, solo con el fin de mantener la base estrictas disponibles.
 +    * Limpieza periódica de la base de datos puede colgar Nagios.
 +
 +El futuro
 +
 +Desde la versión 1.1.0, Check_MK ofrece un enfoque totalmente nuevo para acceder a datos de estado y también histórico: Livestatus. Así como NDO, Livestatus hacer uso de la API de Nagios evento Broker y carga un módulo binario en su proceso de Nagios. Pero luego otros NDO, Livestatus no realiza escribir datos. En su lugar, se abre un socket en la que pueden consultar los datos a demanda.
 +
 +La toma permite enviar una solicitud de los servicios u otros datos y obtener una respuesta inmediata. Los datos son directamente leídos de estructuras de datos internas de Nagios. Livestatus no crea su propia copia de esos datos. A partir de la versión 1.1.2 que también se pueden recuperar los datos históricos de los archivos de registro a través de Nagios Livestatus.
 +
 +Esto es no sólo un enfoque increíblemente simple, si no también muy rápido. Algunas ventajas son:
 +
 +    * Otro entonces NDO, utilizando Livestatus no impone una carga mensurable de su CPU para nada. Sólo en el tratamiento de las consultas de una cantidad muy pequeña de la CPU es necesario. Pero eso ni siquiera se bloqueará Nagios.
 +
 +    * Livestatus produce cero / S de disco cuando quering datos de estado.
 +    * Acceso a los datos es mucho más rápido que analizar status.dat o consultar una base de datos SQL.
 +    * No se necesita configuración, base de datos no es necesaria. Ninguna administración es necesario.
 +    * Livestatus escalas bastante bien a las grandes instalaciones, incluso más allá de 50,000 servicios.
 +    * Livestatus le da acceso a los datos específicos de Nagios no se dispone de ningún otro método disponible acceder al estado - por ejemplo, la información del tiempo una multitud se encuentra actualmente en período de notificación.
 +
 +En el mismo tiempo, ofrece a sus Livestatus propio lenguaje de consulta que es simple de entender, ofrece la mayoría de la flexibilidad de SQL e incluso más en algunos casos. Es un protocolo rápido, ligero y no necesita un cliente binario. Incluso, pueden obtener acceso a los datos sin ningún tipo de software especial de ayuda. 
 +
 +
 +Proceso de compilación
 +
 +<code>
 +root@linux# wget 'http://www.mathias-kettner.de/download/mk-livestatus-1.1.2.tar.gz'
 +root@linux# tar xzf mk-livestatus-1.1.2.tar.gz
 +root@linux# cd mk-livestatus-1.1.2
 +root@linux#
 +root@linux# ./configure
 +checking for a BSD-compatible install... /usr/bin/install -c
 +checking whether build environment is sane... yes
 +checking for a thread-safe mkdir -p... /bin/mkdir -p
 +checking for gawk... gawk
 +checking whether make sets $(MAKE)... yes
 +checking for g++... g++
 +checking for C++ compiler default output file name... a.out
 +checking whether the C++ compiler works... yes
 +checking whether we are cross compiling... no
 +checking for suffix of executables...
 +checking for suffix of object files... o
 +checking whether we are using the GNU C++ compiler... yes
 +checking whether g++ accepts -g... yes
 +...
 +configure: creating ./config.status
 +config.status: creating Makefile
 +config.status: creating src/Makefile
 +config.status: creating config.h
 +config.status: config.h is unchanged
 +config.status: executing depfiles commands
 +root@linux# make
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-AndingFil...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-ClientQue...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-Column.o ...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-ColumnsCo...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-ContactsC...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-CustomVar...
 +g++ -DHAVE_CONFIG_H -I. -I..    -I../nagios -fPIC -g -O2 -MT livestatus_so-CustomVar...
 +....
 +root@linux# make install
 +Making install in src
 +make[1]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
 +make[2]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
 +test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
 +  /usr/bin/install -c 'unixcat' '/usr/local/bin/unixcat'
 +test -z "/usr/local/lib/mk-livestatus" || /bin/mkdir -p "/usr/local/lib/mk-livestatus"
 + /usr/bin/install -c -m 644 'livestatus.so' '/usr/local/lib/mk-livestatus/livestatus.so'
 + ranlib '/usr/local/lib/mk-livestatus/livestatus.so'
 +/bin/sh /d/nagvis-dev/src/mk-livestatus-1.1.2/install-sh -d /usr/local/lib/mk-livestatus
 +/usr/bin/install -c livestatus.o /usr/local/lib/mk-livestatus
 +rm -f /usr/local/lib/mk-livestatus/livestatus.so
 +make[2]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
 +make[1]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
 +make[1]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
 +make[2]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
 +make[2]: Nothing to be done for `install-exec-am'.
 +make[2]: Nothing to be done for `install-data-am'.
 +make[2]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
 +make[1]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
 +</code>
 +
 +
 +Despues tenemos que especificar que Nagios cargue el archivo objeto compilado //livestatus.o//, para eso debemos agregar a nagios.cfg: 
 +
 +<code>
 +broker_module=/usr/local/lib/mk-livestatus/livestatus.o /var/lib/nagios/rw/live
 +event_broker_options=-1
 +</code>
 +
 +Y dentro del log de Nagios vamos a ver algo similar a esto 
 +
 +<code>
 +[1256144866] livestatus: Version 1.1.2 initializing. Socket path: '/var/lib
 +/nagios/rw/live'
 +[1256144866] livestatus: Created UNIX control socket at /var/lib/nagios/rw/
 +live
 +[1256144866] livestatus: Opened UNIX socket /var/lib/nagios/rw/live
 +[1256144866] livestatus: successfully finished initialization
 +[1256144866] Event broker module '/usr/local/lib/mk-livestatus/livestatus.o' initializ
 +ed successfully.
 +[1256144866] Finished daemonizing... (New PID=5363)
 +[1256144866] livestatus: Starting 10 client threads
 +[1256144866] livestatus: Entering main loop, listening on UNIX socket
 +</code>
 +
 +
 +Opciones del módulo
 +
 +^Opción^Valor por default^Que significa^
 +|debug|0|Set this to 1 in order to make Livestatus log each query it executes in nagios.log|
 +|max_cached_messages|500000|Livestatus' access to Nagios logfiles caches messages in-memory. Here you can set the maximum number of cached messages. Each message takes about 250 bytes (in the current implementation)|
 +|max_response_size|104857600|Livestatus constructs each response in-memory before sending it to the clients. In order to avoid a crash in case of extensive queries, the maximum response size is limited. The default limit is 100 MB|
 +|num_client_threads|10|Livestatus needs one thread for each concurrent client connection. A fixed number of threads is created when Nagios starts|
 +|thread_stack_size|65536|This parameter sets the size of the stack of each client thread. In versions before 1.1.4, the stack size was set to 8 MB (pthread default). The new default value is 64 KB. A small stack reduces virtual memory usage and also save CPU ressources. A too small value will probably crash your Nagios process, though. You have been warned|
 +|query_timeout|10000|This value is in ms. In order to avoid being hung by broken clients, Livestatus imposes a limit on the time for reading the query from the client. A value of 0 disables the timeout|
 +|idle_timeout|300000|This value is in ms. Livestatus is waiting at most that much time for the next query. A value of 0 disables the timeout|
 +
 +
 +Ejemplo de como agregar opciones
 +
 +<code>
 +broker_module=/usr/local/lib/mk-livestatus/livestatus.o /var/run/nagios/rw/live debug=1
 +</code>
 +
 +Ejemplo de como dejar MK Livestatus escuchando en un socket tcp para consultarlo por red, por ejemplo por un sistema de reportes al estilo Jasper Reports o alguna interfaz alternativa como Thruk.
 +
 +<code>
 +service livestatus
 +{
 + type = UNLISTED
 + port = 6557
 + socket_type = stream
 + protocol = tcp
 + wait = no
 +# limit to 100 connections per second. Disable 3 secs if above.
 + cps             = 100 3
 +# set the number of maximum allowed parallel instances of unixcat.
 +# Please make sure that this values is at least as high as
 +# the number of threads defined with num_client_threads in
 +# etc/mk-livestatus/nagios.cfg
 +        instances       = 500
 +# limit the maximum number of simultaneous connections from
 +# one source IP address
 +        per_source      = 250
 +# Disable TCP delay, makes connection more responsive
 + flags           = NODELAY
 + user = nagios
 + server = /usr/local/nagios/bin/unixcat
 + server_args     = /usr/local/nagios/var/rw/live
 +# configure the IP address(es) of your Nagios server here:
 +# only_from       = 127.0.0.1 10.0.20.1 10.0.20.2
 + disable = no
 +}
 +</code>
  
 === Nagvis === === Nagvis ===
  
-Nagvis es un addon para Nagios, con el cual podemos tener gráficos a modo de diagrama estructural de red, dinámicos, con lo cual podemos conocer el estado actual de la red mirando un gráfico amigable al usuario final.+Nagvis es un addon para Nagios, con el cual podemos tener gráficos a modo de diagrama estructural de red, dinámicos, con lo cual podemos conocer el estado actual de la red mirando un gráfico amigable al usuario final para que pueda tomar acciones y/o informar sobre el estado de los mismos a personal responsable. 
 + 
 +Se pueden utilizar imágenes propias de fondo (denominadas mapas) y luego integrarle iconos representativos de las máquinas y servicios de la red que muestren el estado actual de los mismos. 
 + 
 +{{:manuales:nagios:c_by_dave_rearden_2.png|}} 
 + 
 +{{:manuales:nagios:nagvis_map_2.png|}}
  
 Deberemos bajar el paquete Nagvis desde su sitio web, y descomprimirlo y copiarlo a un directorio visible desde la interfaz web de Nagios. Deberemos bajar el paquete Nagvis desde su sitio web, y descomprimirlo y copiarlo a un directorio visible desde la interfaz web de Nagios.
Línea 405: Línea 1068:
  
  
 +**Nota Nagvis 1.5 y template integrada con PNP**
 +
 +Modificar el archivo //nagvis/share/userfiles/templates/default.hover.html// de la siguiente manera, agregando solo las dos lineas donde especificamos el tag img.
 +
 +<code html>
 +<table class="hover_table">
 + <tr><th colspan="2">[lang_obj_type] ([lang_last_status_refresh]: [last_status_refresh])</th></tr>
 + <tr><td class="label"><label>[lang_name]</label></td><td>[obj_name]</td></tr>
 + <!-- BEGIN service -->
 + <tr><td class="label"><label>[lang_service_description]</label></td><td>[service_description]</td></tr>
 + <!-- END service -->
 + <tr><td class="label"><label>[lang_alias]</label></td><td>[obj_alias]</td></tr>
 + <!-- BEGIN host -->
 + <tr><td colspan="2" style="text-align:center;"><img src="/nagios/pnp/index.php?host=[obj_name]&srv=_HOST_&source=1&view=0&display=image" with="300px" height="94px"></td></tr>
 + <tr><td class="spacer" colspan="2"></td></tr>
 + <tr><td class="label[obj_state]"><label>[lang_state] ([lang_state_type])</label></td><td class="state[obj_state]">[obj_state] ([obj_state_type])[obj_in_downtime][obj_acknowledged]</td></tr>
 + <tr><td class="label"><label>[lang_output]</label></td><td>[obj_output]</td></tr>
 + <tr><td class="label"><label>[lang_perfdata]</label></td><td>[obj_perfdata]</td></tr>
 + <tr><td class="label"><label>[lang_current_attempt]</label></td><td>[obj_current_check_attempt]/[obj_max_check_attempts]</td></tr>
 + <tr><td class="label"><label>[lang_last_check]</label></td><td>[obj_last_check]</td></tr>
 + <tr><td class="label"><label>[lang_next_check]</label></td><td>[obj_next_check]</td></tr>
 + <tr><td class="label"><label>[lang_last_state_change]</label></td><td>[obj_last_state_change]</td></tr>
 + <!-- END host -->
 + <tr><td class="spacer" colspan="2"></td></tr>
 + <tr><td class="label[obj_summary_state]"><label>[lang_summary_state]</label></td><td class="state[obj_summary_state]">[obj_summary_state] [obj_summary_in_downtime][obj_summary_acknowledged]</td></tr>
 + <tr><td class="label"><label>[lang_summary_output]</label></td><td>[obj_summary_output]</td></tr>
 + <!-- BEGIN service -->
 + <tr><td colspan="2" style="text-align:center;"><img src="/nagios/pnp/index.php?host=[obj_name]&srv=[service_description]&source=1&view=0&display=image" with="300px" height="94px"></td></tr>
 + <tr><td class="label"><label>[lang_perfdata]</label></td><td>[obj_perfdata]</td></tr>
 + <tr><td class="label"><label>[lang_current_attempt]</label></td><td>[obj_current_check_attempt]/[obj_max_check_attempts]</td></tr>
 + <tr><td class="label"><label>[lang_state_type]</label></td><td>[obj_state_type]</td></tr>
 + <tr><td class="label"><label>[lang_last_check]</label></td><td>[obj_last_check]</td></tr>
 + <tr><td class="label"><label>[lang_next_check]</label></td><td>[obj_next_check]</td></tr>
 + <tr><td class="label"><label>[lang_last_state_change]</label></td><td>[obj_last_state_change]</td></tr>
 + <!-- END service -->
 + <!-- BEGIN childs -->
 + <tr><td class="spacer" colspan="2"></td></tr>
 + <tr><td colspan="2">
 + <table width="100%">
 + <tr>
 + <!-- BEGIN servicegroup --><td class="label"><label>[lang_child_name1]</label></td><!-- END servicegroup --><td class="label"><label>[lang_child_name]</label></td><td class="label"><label>[lang_state]</label></td><td class="label"><label>[lang_output]</label></td>
 + </tr>
 + <!-- BEGIN loop_child -->
 + <tr><!-- BEGIN servicegroup_child --><td>[obj_name1]</td><!-- END servicegroup_child --><td>[obj_name]</td><td class="state[obj_summary_state]">[obj_summary_state][obj_summary_in_downtime][obj_summary_acknowledged]</td><td>[obj_summary_output]</td></tr>
 + <!-- END loop_child -->
 + </table>
 + </td></tr>
 + <!-- END childs -->
 +</table>
 +</code>
 === MySQL === === MySQL ===
  
Línea 802: Línea 1515:
 En el siguiente gráfico detalla la organización recomendada de la configuración de Nagios. En el siguiente gráfico detalla la organización recomendada de la configuración de Nagios.
  
-{{manuales:nagios:funcionamiento_nagios2.png?900x621|}}+{{ :manuales:nagios:funcionamiento_nagios2.png }}
  
 +{{ :manuales:nagios:diagrama_nagios.dia.gz }}
  
 +
 +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.
 +==== SNMP Traps ====
 +
 +Una trap es generado por el agente snmp en el dispositivo a monitorear para reportar ciertas condiciones y cambios de estado en un procesp
 +
 +  * Se “cae” un servicio
 +  * Hay un problema de memoria o de hardware
 +  * La carga de procesos excede un límite 
 +  * Se llena una partición de disco 
 +
 +En debian para instalar el manejador de traps SNMP deberemos ejecutar los siguiente :
 +<code>
 +apt-get install snmptt
 +</code>
 +
 +
 +**/etc/snmp/snmptt.ini**
 +<code>
 +mode = daemon
 +log_system_enable = 1
 +unknown_trap_log_enable = 1
 +
 +mysql_dbi_enable = 1
 +mysql_dbi_host = localhost
 +mysql_dbi_port = 3306
 +mysql_dbi_database = snmptt
 +mysql_dbi_table = snmptt
 +mysql_dbi_table_unknown = snmptt_unknown
 +mysql_dbi_table_statistics = snmptt_statistics
 +mysql_dbi_username = snmptt
 +mysql_dbi_password = mytrap
 +</code>
 +
 +**/etc/snmp/snmptt.conf**
 +<code>
 +EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Critical
 +</code>
 +
 +**/etc/snmp/snmptrapd.conf**
 +<code>
 +disableAuthorization yes
 +traphandle default /usr/sbin/snmptthandler
 +</code>
 +
 +Configuración de permisos :
 +<code bash>
 +usermod -a -G nagios snmptt 
 +</code>
 +
 +**/etc/default/snmpd**
 +<code>
 +TRAPDRUN=yes
 +</code>
 +
 +Schema MySQL
 +<code sql>
 +CREATE DATABASE snmptt;
 +USE snmptt;
 +
 +DROP TABLE snmptt;
 +CREATE TABLE snmptt (
 +id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +eventname VARCHAR(50),
 +eventid VARCHAR(50),
 +trapoid VARCHAR(100),
 +enterprise VARCHAR(100),
 +community VARCHAR(20),
 +hostname VARCHAR(100),
 +agentip  VARCHAR(16),
 +category VARCHAR(20),
 +severity VARCHAR(20),
 +uptime  VARCHAR(20),
 +traptime VARCHAR(30),
 +formatline VARCHAR(255));
 +
 +USE snmptt;
 +
 +DROP TABLE snmptt_unknown;
 +CREATE TABLE snmptt_unknown (
 +trapoid VARCHAR(100),
 +enterprise VARCHAR(100),
 +community VARCHAR(20),
 +hostname VARCHAR(100),
 +agentip  VARCHAR(16),
 +uptime  VARCHAR(20),
 +traptime VARCHAR(30),
 +formatline VARCHAR(255));
 +
 +USE snmptt;
 +
 +DROP TABLE snmptt_statistics;
 +CREATE TABLE snmptt_statistics (
 +stat_time VARCHAR(30),
 +total_received BIGINT,
 +total_translated BIGINT,
 +total_ignored BIGINT,
 +total_unknown BIGINT);
 +</code>
 +
 +Reiniciamos los servicios SNMP :
 +<code>
 +/etc/init.d/snmptt
 +/etc/init.d/snmpd
 +</code>
 +
 +{{ :manuales:nagios:nagios_snmptraps.png }}
 +
 +Ref.: http://exchange.nagios.org/directory/Addons/SNMP/Nagios-SNMP-Trap-Interface-%28NSTI%29/details
 ==== Apache ==== ==== Apache ====
  
Línea 1004: Línea 1865:
 daemon_directory = /usr/lib/postfix daemon_directory = /usr/lib/postfix
 mail_owner = postfix mail_owner = postfix
-myhostname = lnlxnagios +myhostname = nagios 
-mydomain = loma.gcf.net+mydomain = midominio.net
 inet_interfaces = $myhostname inet_interfaces = $myhostname
 unknown_local_recipient_reject_code = 550 unknown_local_recipient_reject_code = 550
Línea 1057: Línea 1918:
 ==== PNP4Nagios ==== ==== PNP4Nagios ====
  
-Para la ejecución de almacenamiento de gráficas deberemos configurar ciertos comandos que obtengan los resultados de la ejecución de comandos y servicios, para ellos deberemos agregar y/o modificar en la configuración de Nagios+{{ :manuales:nagios:pnp4nagios.jpg }}
  
-**Modo simple**+Para la ejecución de almacenamiento de gráficas deberemos configurar ciertos comandos que obtengan los resultados de la ejecución de comandos y servicios, para ellos deberemos agregar y/o modificar en la configuración de Nagios ciertos parámetros :
  
-//Se ejecutara el procesamiento de perfdata, por la ejecucion de cada comando.// 
  
  
-**nagios.cfg**+**Modo Síncrono** 
 + 
 +//El modo síncrono es la forma más fácil de integrar en nagios el recolector de datos process_perfdata.pl. Cada evento dispara la ejecución de process-service-perfdata.// 
 <code> <code>
 enable_environment_macros=1 enable_environment_macros=1
Línea 1070: Línea 1933:
 host_perfdata_command=process-host-perfdata host_perfdata_command=process-host-perfdata
 </code> </code>
- 
-**commands.cfg** 
  
 <code> <code>
 define command { define command {
-  command_name    process-service-perfdata +       command_name    process-service-perfdata 
-  command_line    /usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl+       command_line    /usr/bin/perl /usr/local/nagios/pnp4nagios/libexec/process_perfdata.pl
 } }
  
 define command { define command {
-  command_name    process-host-perfdata +       command_name    process-host-perfdata 
-  command_line    /usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl -d HOSTPERFDATA+       command_line    /usr/bin/perl /usr/local/nagios/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
 } }
 </code> </code>
  
-**Modo avanzado**+**Modo Masivo** 
 + 
 + 
 + 
 +//En el modo masivo, Nagios escribe los datos a un fichero temporal en un formato predefinido. Este fichero se procesa mediante process_perfdata.pl a intervalos regulares. Nagios controla el arranque y ejecución periódica del recolector de datos. .// 
 + 
 + 
 +**commands.cfg** 
 + 
 +<code> 
 +define command{ 
 +       command_name    process-service-perfdata-file 
 +       command_line    /usr/local/nagios/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/nagios/pnp4nagios/var/service-perfdata 
 +
 + 
 +define command{ 
 +       command_name    process-host-perfdata-file 
 +       command_line    /usr/local/nagios/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/nagios/pnp4nagios/var/host-perfdata 
 +
 +</code> 
 + 
 + 
 +**Modo Masivo con NPCD**
  
 //Se vuelca la informacion de perfdata en una cola para luego ser procesada por un proceso en segundo plano, lo cual libera gran carga del CPU.// //Se vuelca la informacion de perfdata en una cola para luego ser procesada por un proceso en segundo plano, lo cual libera gran carga del CPU.//
Línea 1111: Línea 1994:
 host_perfdata_file_processing_command=process-host-perfdata-file host_perfdata_file_processing_command=process-host-perfdata-file
 </code> </code>
- 
-**Directivas** 
- 
-  * **service_perfdata_file**  
-    * Ruta al archivo temporal que debe contener los datos de rendimiento. 
-  * **service_perfdata_file_template** 
-    * Formato del archivo temporal. Los datos se definen utilizando Nagios macros. 
-  * **service_perfdata_file_mode** 
-    * Opción "a" especifica que los datos se insertan como anexo. 
-  * **service_perfdata_file_processing_interval** 
-    * El intervalo de procesamiento es de 15 segundos 
-  * **service_perfdata_file_processing_command** 
-    * El comando que habrá de ejecutarse durante dicho intervalo. 
- 
- 
- 
- 
  
 **commands.cfg** **commands.cfg**
Línea 1142: Línea 2008:
  }  }
 </code> </code>
 +
 +Y luego ejecutar :
 +<code>
 +/etc/init.d/npcd start
 +</code>
 +
 +=== Datos de configuración ===
 +
 +  * **service_perfdata_file** 
 +    * Ruta al archivo temporal que debe contener los datos de rendimiento.
 +  * **service_perfdata_file_template**
 +    * Formato del archivo temporal. Los datos se definen utilizando Nagios macros.
 +  * **service_perfdata_file_mode**
 +    * Opción "a" especifica que los datos se insertan como anexo.
 +  * **service_perfdata_file_processing_interval**
 +    * El intervalo de procesamiento es de 15 segundos
 +  * **service_perfdata_file_processing_command**
 +    * El comando que habrá de ejecutarse durante dicho intervalo.
  
  
Línea 1147: Línea 2031:
  
  
-Nota: en modo avanzado con NPCD se puede deshabilitar la opcion //enable_environment_macros// para ahorrar carga de CPU, ya que en este modo esta ya no es requerida.+<note tip>En modo masivo con NPCD se puede deshabilitar la opcion //enable_environment_macros// para ahorrar carga de CPU, ya que en este modo esta ya no es requerida. 
 + 
 +Si en algún momento se llega a colgar el demonio NPCD o si por algo falla el procesamiento de los archivos de perfdata, reiniciamos NPCD y va a reprocesar los archivos en el spool de perfdata para volver a incluir la información faltante en RRD.</note> 
  
  
Línea 1156: Línea 2043:
 **Para los hosts** **Para los hosts**
 <code> <code>
-action_url /nagios/pnp/index.php?host=$HOSTNAME$+action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$
 </code> </code>
  
 **Para los servicios** **Para los servicios**
 <code> <code>
-action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$+action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
 </code> </code>
  
 +{{ :manuales:nagios:nagios_pnp.png }}
 +
 +{{:manuales:nagios:nagios_pnp.dia.gz|}}
 ==== En los clientes ==== ==== En los clientes ====
  
 +Podemos elegir monitorear los clientes por medio del protocolo ICMP, SNMP o de mecanismos como ver si tenemos x puerto abierto, o ciertos mensajes de respuesta, aqui se comentan los protocolos mas comunes para monitorear estados de equipos (ICMP/SNMP) o servicios (SNMP).
 +
 +=== ICMP ===
 +
 +El protocolo ICMP (//Internet Control Message Protocol//) puede ser considerado como parte de la capa IP. La especificación completa de este protocolo se encuentra en [[http://www.ietf.org/rfc/rfc792.txt|RFC 792]]. Aunque sus mensajes son encapsulados en datagramas IP como cualquier otro protocolo de capa superior, su uso corresponde a mensajes especiales de la propia capa de red, aunque también pueden acceder a él las propias aplicaciones (por ejemplo el programa ping).
 +
 +
 +Algunos ejemplos de uso de ICMP son: obtención de máscaras de red (solicitud y respuesta), obtención de marcas de tiempo (solicitud y respuesta), condiciones de error del tipo “port unreachable” o “se necesita fragmentar el datagrama habiéndose solicitado la no-fragmentación", petición y respuesta de eco para comprobar la actividad de otro host, información sobre el estado de las comunicaciones en una red, etc.
 +
 +== Algunas consultas ICMP ===
 +
 +
 +Los mensajes de query incluyen tras la cabecera 2 bytes de identificación, para que el cliente distinga las respuestas dirigidas a él de las dirigidas a otros procesos, y 2 btes de número de secuencia, para que el cliente pueda identificar 'requests' con 'replays'. La generación de replys suele correr a cargo del kernel (no es un proceso de usuario). Los mensajes ICMP de 'query' más importantes son:
 +  * //**Petición/respuesta de máscara**//: Aunque normalmente se usa [[DHCP]], también es posible para el host hacer una petición durante el proceso de arranque para obtener la máscara y una petición [[ARP#RARP]] para obtener su IP. La petición de máscara suele enviarse en difusión. Un servidor de máscaras se encarga de contestar.
 +  * //**Petición/respuesta de marca de tiempo**//: Se utiliza para conocer el tiempo que un host tarda en procesar un mensaje y contestarlo o para sincronizar relojes entre hosts. Los tiempos se ponen en milisegundos desde las 0h UTC (Tiempo Coordinado Universal). Se proveen tres campos, a parte de los anteriormente citados para este tipo de mensajes. 'Marca de tiempo de generación', a rellenar por el emisor, y 'Marca de tiempo de recepción', y 'Marca de tiempo de transmisión', a rellenar por el receptor. Los significados de los campos resultan evidentes.
 +  * //**Solicitud/anuncio de router**//: Se trata de una forma de inicializar la tabla de enrutamiento. Tras el arranque, un host envía en broadcast o multicast un mensaje de solicitud de router. Uno o más routers responderán con mensajes de anuncio de router. Esto lo podrán hacer periódicamente permitiendo a los hosts actualizar sus tablas de enrutamiento.
 +  * //**Petición/respuesta de eco**//: Se utiliza para conocer si un host está en red. El mensaje ICMP contiene unos datos OPCIONALES cuyo contenido es irrelevante. Muchos SO implementan este mensaje mediante el programa ping. En las implementaciones UNIX de ping el campo identificador suele asociarse con el ID del proceso que envía el request. Esto permite identificar las respuestas si hubiera varias instancias de ping corriendo en el mismo host. En el campo de secuencia, se suele llevar un contador que permite ver si se han perdido, duplicado o desordenado paquetes, cosa típica en la capa IP sobre la que se encapsulan los mensajes ICMP.
 +Veamos un ejemplo de la salida del programa ping.
 +
 +<code>[deivid@localhost ~]$ ping www.virtuamanager.com
 +PING virtuamanager.com (213.194.149.188) 56(84) bytes of data.
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=1 ttl=56 time=42.6 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=2 ttl=56 time=41.8 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=3 ttl=56 time=41.6 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=4 ttl=56 time=43.7 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=5 ttl=56 time=42.7 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=6 ttl=56 time=42.2 ms
 +64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=7 ttl=56 time=46.2 ms
 +
 +--- virtuamanager.com ping statistics ---
 +7 packets transmitted, 7 received, 0% packet loss, time 6005ms
 +rtt min/avg/max/mdev = 41.666/43.038/46.270/1.477 ms
 +</code>
 +
 +== ALGUNOS ICMP'S DE ERROR ==
 +
 +Ya se ha dicho que el formato de los mensajes de error tan sólo incluye, además de la cabecera, una copia de la cabecera IP del datagrama que generó el error y los 8 primeros bytes del datagrama. En algunos de los ejemplos que siguen veremos la razón de ser de este formato:
 +  * //**Destination unreachable**//: Este tipo de mensajes de error se generan cuando por alguna razón, el datagrama no pudo alcanzar su destino (puerto, host, red inalcanzable, necesidad de fragmentar con bit DF activado...). La forma de comunicar este error a la capa superior es copiando la cabecera IP en el propio mensaje de error. Gracias al campo 'protocolo' el módulo ICMP que lo reciba sabrá asociarlo con el protocolo adecuado. Supongamos que se produce un 'port unreachable' en el envío de un datagrama UDP. La cabecera IP permite identificar que el error se produjo en el protocolo UDP, y además esto sirve para interpretar los 8 bytes adicionales, que pertenecerán a la cabecera UDP. Estos contendrán los puertos origen y destino (ver tema UDP). El puerto de origen puede servir para asociar el error con un determinado proceso de usuario (ej. puerto 2924 asociado a un cliente tftp), mientras que el destino nos indica qué puerto originó el error 'port unreachable'.
 +   Otro ejemplo, al intentar hacer ping al otro equipo de la red, que está apagado, se obtiene lo siguiente:
 +<code>[deivid@localhost ~]$ ping 192.168.1.2
 +PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
 +From 192.168.1.100 icmp_seq=2 Destination Host Unreachable
 +From 192.168.1.100 icmp_seq=3 Destination Host Unreachable
 +From 192.168.1.100 icmp_seq=4 Destination Host Unreachable
 +From 192.168.1.100 icmp_seq=6 Destination Host Unreachable
 +From 192.168.1.100 icmp_seq=7 Destination Host Unreachable
 +From 192.168.1.100 icmp_seq=8 Destination Host Unreachable
 +
 +--- 192.168.1.2 ping statistics ---
 +9 packets transmitted, 0 received, +6 errors, 100% packet loss, time 8002ms
 +, pipe 3</code>
 + 
 +Se han producido mensajes ICMP de error en respuesta a mensajes ICMP de query, lo cual SI está permitido, como ya se ha dicho. 
 +
 +  * //**Source quench**//: Este tipo de mensaje es generado por un router con problemas de congestión para avisar al host fuente de que reduzca el flujo de transmisión. Es muy poco usado, normalmente los routers se limitan a tirar  paquetes y a intentar solucionar la congestión mediante algoritmos de enrutamiento.
 +  * //**Parameter problem**//: Si un router intermedio o el host destino encuentran un problema en la cabecera IP que le obliga a desecharlo, puede enviar un mensaje ICMP de este tipo al host fuente. Si el código es cero, un puntero marca el lugar de la cabecera en el que se produjo el error.
 +  * //**Redirección**//: Son enviados por un router al remitente de un datagrama IP cuando éste debería haber sido enviado a través de otro router. 
 +  * //**Time Exceeded**//: Son enviados al remitente de un datagrama IP cuando se cumple el tiempo de vida máximo del paquete. Esto puede ocurrir porque el campo TTL del datagrama se haya puesto a 0 en un router, o bien el tiempo de reensamblado de fragmentos se haya cumplido en el destino. Basándose en este mensaje, y variando el campo TTL de un mensaje de petición de eco es posible obtener la ruta a un destino. Si el TTL es insuficiente, se recibirá un mensaje de tiempo excedido por cada router donde al recalcular el TTL valga 0, y un mensaje de respuesta de eco cuando el TTL sea suficiente para llegar al destino. El comando ''tracert'' de windows se basa en este algoritmo.
 +
 +
 +
 +=== SNMP (Simple Network Management Protocol) ===
 Protocolo Simple de Administración de Red o SNMP es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a los administradores supervisar el desempeño de la red, buscar y resolver sus problemas, y planear su crecimiento. Podemos conocer datos internos de dispositivos a monitorear, ej uso de CPU, Memoria, Disco, Uptime etc. Protocolo Simple de Administración de Red o SNMP es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a los administradores supervisar el desempeño de la red, buscar y resolver sus problemas, y planear su crecimiento. Podemos conocer datos internos de dispositivos a monitorear, ej uso de CPU, Memoria, Disco, Uptime etc.
 +
 + 
 +Se basa entre gestor y agentes.
 +
 +Los agentes se centran en recopilar cierta información y mantenerla organizada para que el gestor pueda acceder a ella cuando lo necesite. El agente también puede mandar notificaciones al gestor sobre problemas o información relevante sin que el gestor se lo solicite.
 +
 +El gestor controla y actúa sobre los elementos de la red, controlando la información que recopilan los agentes se pueden tomar decisiones y actuar sobre la red para mejorar los aspectos que se necesiten.
 +Para ello se basa en tres elementos:
 +
 +  * **SNMP**: Es el protocolo entre el gestor y el elemento de red, se suele utilizar UDP
 +  * **SMI**: (Structure of Management Information): conjunto de estructuras y esquemas de identificación para definir las MIB´s
 +  * **MIB**: (Management Information Base): especifica qué variables mantienen los elementos de la red (agentes)
 + 
 +
 +
 +
 +== SMI (Structure of Management Information) ==
 +SMI es el conjunto de estructuras y esquemas para definir elementos de las MIB. Dichas estructuras están formateadas en ASN.1 (Abstract Synstax Notation One), indicando cómo debe ser el nombre, la sintaxis y el método de codificación de los datos para su transmisión por la red.
 +
 +Un objeto en SMI consta de los siguientes campos:
 +
 +  * Objeto: Literal (Object descriptor) con la etiqueta que identifica el objeto
 +
 +  * Sintaxis: Puede ser alguno de los siguientes tipos ASN.1:
 +    * SimpleSyntax (INTEGER, OCTET STRING, OBJECT IDENTIFIER, NULL)
 +    * ApplicationSyntax (NetworkAddress (direcciones ip de 32 bits), Counter (enteros no negativos de tamaño 32bits), Gauge (contadores que mantienen el maximo valor alcanzado, pueden decrementarse en algun momento), TimeTicks (centésimas de segundo desde el evento deseado), Opaque (información arbitraria))
 +    * Otros tipos (RFC 1155).
 +  * Acceso: Puede ser: read-only, read-write, write-only, not-acessible. SMIv2 incluye además read-create, y deja de usar write-only
 +  * Status: Puede ser: mandatory (en SMIv2 se indica como current), que tienen que ser implementadas por cualquier versión de la MIB que incluya ese modulo, optional, que pueden faltar sin que eso cause ningún problema ( en vez de optional, SMIv2 incluye deprecated, para objetos que ya no se usan, y que por tanto, no tienen por qué estar implementados), u obsolete, que han dejado de mantenerse y revisarse. 
 +  * Descripción: Definición textual de la semántica del tipo de objeto. No es codificable mediante una computadora, es una descripción para programadores y administradores que pueden leerla para entender el funcionamiento de la MIB.
 +La definición termina indicando bajo qué nodo del árbol de OIDs (ver la siguiente sección) debe situarse y con qué número a efectos de identificación
 +
 +== MIB: (Management Information Base) ==
 + 
 +La información requerida de un sistema se almacena en las MIBs usando una estructura jerárquica que contiene los identificadores de objeto descritos mediante ASN.1.
 +
 +Esta jerarquía de árbol contiene los elementos que pueden ser de tipo escalar o tablas de datos. Estos objetos cuelgan en el árbol de la MIB de la rama correspondiente a la organización que mantiene dicha estructura. Se nombra a los ejemplares de la MIB mediante su identificador de objeto que es una cadena de enteros que representa como cuelga el objeto del nodo raíz. Por ejemplo IP es el (1.3.6.1.2.1.4.)
 +
 +
 +Esta es la estructura de la MIB-II (RFC 1213) y sus diferentes subgrupos.  Estas son algunas de las variables que se mantienen en cada grupo:
 +
 +  * Grupo system: Descripción de la entidad, identificador, tiempo desde arranque, nombre del administrador, localización física, servicios ofrecidos
 +  * Grupo interfaces: Número de interfaces del sistema
 +  * Grupo at: Número de interfaz, Dirección física, Dirección IP
 +  * Grupo ip: Si el sistema hace forward, valor del TTL, número de datagramas recibidos y enviados, errores, datagramas con protocolo no válido, etc. 
 +  * Grupo icmp: cuatro contadores generales: número total de mensajes ICMP de entrada y salida con o sin errores y 22 contadores para los diferentes mensajes ICMP
 +  * Grupo tcp: Algoritmo de retransmisión, timeout en milisegundos, número de conexiones TCP, número de transiciones entre los diferentes estados de TCP, número de segmentos recibidos y enviados, número de segmentos retransmitidos, con error y con el flag RST activado. 
 +  * Grupo udp: Número de datagramas enviados y recibidos, datagramas sin proceso receptor
 +  * Grupo egp: Número de mensajes de encaminamiento recibidos con y sin error, número de mensajes generados en el sistema, estado del sistema. 
 +
 +== Funcionamiento del protocolo ==
 +
 +
 +Como sigue el paradigma gestor-agente la los comandos son para solicitar, modificar o devolver información de la MIB, así como envíar notificaciones (traps). Las operaciones disponibles en SNMPv1 son:
 +
 +  * Get-request : Solicitar el valor de una o varias variables
 +  * Get-next-request : Solicitar el valor de la siguiente variable o grupo de variables. Se utiliza para recorrer tablas, celda a celda.
 +  * Set-request : Dar valor a una variable
 +  * Get-response : Devolver el valor de una o varias variables
 +  * Trap : El agente notifica al gestor de alguna situación especial sucede en el elemento de red. Reinicialización, fallo y recuperación en un enlace 
 +    Posteriormente, a partir de la versión 2 se introdujo la operación de get-bulk-request, que permite realizar varios get-next seguidos sin tener que hacer varias peticiones. También se introdujo la operación de inform, para que distintos gestores puedan intercambiarse notificaciones.
 +
 +
  
 **SNMPv1** **SNMPv1**
Línea 1202: Línea 2217:
 //snmpget -v 3 -u nagios  -l authNoPriv -a MD5 -A  ClaV3RfsTtD2 127.0.0.1 sysUpTime.0// //snmpget -v 3 -u nagios  -l authNoPriv -a MD5 -A  ClaV3RfsTtD2 127.0.0.1 sysUpTime.0//
  
 +
 +**TIPS**
  
 NOTA: En Debian deberemos editar el archivo ///etc/default/snmpd//, modificando la siguiente linea  NOTA: En Debian deberemos editar el archivo ///etc/default/snmpd//, modificando la siguiente linea 
Línea 1218: Línea 2235:
 Para que el servicio se accesible por red. Para que el servicio se accesible por red.
  
 +
 +A veces por causa de tener montados filesystems remotos NFS o CIFS, cuando tenemos retrasos en la conexion con ellos se puede colgar el servicio SNMP, para prevenir esto deberemos agregar la siguiente opción en el archivo de configuración //snmpd.conf//.
 +
 +<code>
 +skipNFSInHostResources yes
 +</code>
 +
 +== Agregar variables a SNMP ==
 +
 +Por ejemplo si queremos obtener desde SNMP la información de un script
 +
 +**/usr/local/bin/var.sh**
 +<code bash>
 +echo "hola"
 +echo "chau"
 +</code>
 +
 +En el snmpd.conf le agregamos la siguiente configuración:
 +
 +<code>
 +exec .1.3.6.1.4.1.2021.555 /bin/sh /usr/local/bin/var.sh
 +</code>
 +
 +Si corremos esta consulta **snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.555**
 +Obtendremos :
 +<code>
 +UCD-SNMP-MIB::ucdavis.555.1.1 = INTEGER: 1
 +UCD-SNMP-MIB::ucdavis.555.2.1 = STRING: "/bin/sh"
 +UCD-SNMP-MIB::ucdavis.555.3.1 = STRING: "/tmp/bar.sh"
 +UCD-SNMP-MIB::ucdavis.555.100.1 = INTEGER: 0
 +UCD-SNMP-MIB::ucdavis.555.101.1 = STRING: "hola"
 +UCD-SNMP-MIB::ucdavis.555.101.2 = STRING: "chau"
 +UCD-SNMP-MIB::ucdavis.555.102.1 = INTEGER: 0
 +UCD-SNMP-MIB::ucdavis.555.103.1 = ""
 +</code>
  
 **SNMPv1 en Windows** **SNMPv1 en Windows**
Línea 1258: Línea 2310:
  
  
 +Ref.: http://support.microsoft.com/kb/324263/es
 +
 +=== NRPE ===
 +
 +=== NSClient++ ===
 +
 +<file ini nsclient.ini>
 +[/settings/external scripts/scripts]
 +check_pagefile="C:\Program Files\Nagios Plugin Collection\check_pagefile.exe"
 +</file>
 +{{ :manuales:nagios:nsclient.gif }}
 ==== En el Monitoreo ==== ==== En el Monitoreo ====
  
Línea 1289: Línea 2352:
  
  
-==== Agregando Grupos de contacto ====+==== 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, y dentro de ellos estarán los miembros a cuales enviarlos Para que el Nagios envíe notificaciones sobre el estado de los servicios es necesario definir grupos a los cuales enviárselas, y dentro de ellos estarán los miembros a cuales enviarlos
Línea 1333: Línea 2398:
  
  
- +=== Agregando Contactos ===
-==== 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 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
Línea 1407: Línea 2471:
 **service_notification_commands** **service_notification_commands**
  
-Comando para realizar la notificación del estado del servicio+Comando para realizar la notificación del estado del servicio, podemos definir múltiples comandos
  
  
 **host_notification_commands** **host_notification_commands**
  
-Comando para realizar la notificacion del estado del host+Comando para realizar la notificacion del estado del host, podemos definir múltiples comandos
  
  
Línea 1422: Línea 2486:
  
 //Se deberá crear el archivo {nagios-dir}/etc/contacts/{nombredecontacto.cfg} con las entradas correspondientes anteriormente explicadas.// //Se deberá crear el archivo {nagios-dir}/etc/contacts/{nombredecontacto.cfg} con las entradas correspondientes anteriormente explicadas.//
 +
 +=== Alertas en formato HTML ===
 +
 +Podemos estilizar nuestras alertas por email de nagios con colores, símbolos eh imágenes.
 +
 +Aquí adjunto dos scripts descargados de nagiosexchange que están modificados por mi :
 +
 +{{:manuales:nagios:nagios_send_host_mail.pl.gz|}} {{:manuales:nagios:nagios_send_service_mail.pl.gz|}}
 +
 +=== Alertas por SMS ===
 +
 +Podemos configurar alertas SMS de forma muy simple con el software Gnokii.
 +
 +Ejemplo de archivo de configuración de Gnokii
 +
 +<code ini>
 +[global]
 +port = /dev/ttyUSB2
 +model = AT
 +initlength = default
 +connection = serial
 +use_locking = yes
 +serial_baudrate = 19200
 +smsc_timeout = 10
 +
 +[connect_script]
 +TELEPHONE = 12345678
 +[disconnect_script]
 +[fake_driver]
 +[flags]
 +[gnokii]
 +[gnokiid]
 +[logging]
 +debug = on
 +rlpdebug = off
 +xdebug = off
 +</code>
 +
 +Modo de uso :
 +
 +**echo "Hola mundo" | sudo gnokii --sendsms 1155667798**
 +
 +Definición como comando de notificación, (podemos agregarlo como comando extra al contacto, para que ademas del comando común de notificación por email tambien se ejecute este para el envío de la alerta por sms).
 +
 +Notemos que lo ejecutamos por ssh, es para una situación hipotética de que el modem USB 3G de nuestro proovedor de telefonía celular este enchufado en otra maquina de nuestra red.
 +
 +<code>
 +define command {
 + command_name    host-notify-by-sms
 + command_line    ssh nagios@10.15.99.11 "echo "Host '$HOSTNAME$' esta $HOSTSTATE$ $HOSTOUTPUT$" | sudo gnokii --sendsms $CONTACTPAGER$"
 +}
 +</code>
 +
 +<code>
 +define command {
 + command_name    service-notify-by-sms
 + command_line    ssh nagios@10.15.99.11 "echo 'Servicio $SERVICEDESC$ en Host $HOSTNAME$ IP $HOSTADDRESS$ State $SERVICESTATE$ Info $SERVICEOUTPUT$' | sudo gnokii --sendsms $CONTACTPAGER$"
 +}
 +</code>
  
  
 +{{ :manuales:nagios:nagios_sms.png |}}
  
 +{{:manuales:nagios:nagios_sms.svg.gz|}}
 ==== Agregando Comandos ==== ==== Agregando Comandos ====
  
Línea 1746: Línea 2871:
 <code> <code>
 define hostgroup { define hostgroup {
-    hostgroup_name                      ramallo +    hostgroup_name                      florencio_varela 
-    alias                               Equipos de Ramallo +    alias                               Equipos de Florencio Varela 
-    members                             ramallo,slnra01,srvrmlofs+    members                             varela01,router-flv-1,srvfvl001
 } }
 </code> </code>
Línea 1776: Línea 2901:
  
 Host que son miembros del grupo, debemos ingresar el host_name de cada uno separado por comas ","  Host que son miembros del grupo, debemos ingresar el host_name de cada uno separado por comas "," 
- 
  
 //Se deberá crear el archivo {nagios-dir}/etc/hostgroups/{nombregrupodehosts.cfg} con las entradas correspondientes anteriormente explicadas.// //Se deberá crear el archivo {nagios-dir}/etc/hostgroups/{nombregrupodehosts.cfg} con las entradas correspondientes anteriormente explicadas.//
- 
- 
- 
- 
- 
- 
- 
- 
- 
  
 ==== Agregando Hosts ==== ==== Agregando Hosts ====
Línea 2160: Línea 3275:
 </code> </code>
  
 +==== 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.
 ==== Programando plugins ==== ==== Programando plugins ====
  
Línea 2170: Línea 3288:
 Luego deberemos reflejar esos estados en su código de retorno o Exit status, dependiendo del código del mismo Nagios entenderá que debe mostrar. Luego deberemos reflejar esos estados en su código de retorno o Exit status, dependiendo del código del mismo Nagios entenderá que debe mostrar.
  
-^^Exit status^Estado de Servicio^Estado de Host^Descripcion^^+^Exit status^Estado de Servicio^Estado de Host^Descripcion^
 |0|OK|UP|El plugin es capaz de verificar el servicio y que parece estar funcionando correctamente| |0|OK|UP|El plugin es capaz de verificar el servicio y que parece estar funcionando correctamente|
 |1|WARNING|UP/DOWN/UNREACHABLE|El plugin es capaz de verificar el servicio, pero que parecía estar por encima de un umbral de "advertencia" o parece no estar funcionando correctamente| |1|WARNING|UP/DOWN/UNREACHABLE|El plugin es capaz de verificar el servicio, pero que parecía estar por encima de un umbral de "advertencia" o parece no estar funcionando correctamente|
Línea 2284: Línea 3402:
 === Ejemplo de consulta SNMP con Perl por medio de Net::SNMP === === Ejemplo de consulta SNMP con Perl por medio de Net::SNMP ===
  
-Ejemplo simple de como consultar una variable SNMP, igualmente se pueden consultar mas de una variable por sesion. En este caso estamos consultado la variable extOutput.1 para ver la salida del primer comando.+Ejemplo simple de como consultar una variable SNMPv1. 
 + 
 +<code perl> 
 +#!/usr/local/bin/perl 
 +use strict; 
 +use warnings; 
 +use Net::SNMP
 + 
 +my $OID_sysUpTime = '1.3.6.1.2.1.1.3.0'; 
 + 
 +my ($session, $error) = Net::SNMP->session( 
 +    -hostname  => shift || '127.0.0.1', 
 +    -community => shift || 'public', 
 +); 
 + 
 +if (!defined $session) { 
 +    printf "ERROR: %s.\n", $error; 
 +    exit 1; 
 +
 + 
 +my $result = $session->get_request(-varbindlist => [ $OID_sysUpTime ],); 
 + 
 +if (!defined $result) { 
 +    printf "ERROR: %s.\n", $session->error(); 
 +    $session->close(); 
 +    exit 1; 
 +
 + 
 +printf "The sysUpTime for host '%s' is %s.\n", 
 +$session->hostname(), $result->{$OID_sysUpTime}; 
 + 
 +$session->close(); 
 + 
 +exit 0; 
 +</code> 
 + 
 +Ejemplo simple de como consultar una variable SNMPv3, igualmente se pueden consultar mas de una variable por sesion. En este caso estamos consultado la variable extOutput.1 para ver la salida del primer comando.
  
 <code perl> <code perl>
Línea 2321: Línea 3475:
 </code> </code>
  
-== Plugin consultando MySQL ==+=== Ejemplo de consulta de un puerto TCP con Perl por medio de IO::Socket::INET === 
 + 
 +**check_port.pl $HOSTADDRESS$ $ARG1$** 
 + 
 +<code perl> 
 +#!/usr/bin/perl 
 + 
 +use IO::Socket::INET; 
 +my $IP = $ARGV[0]; 
 +my $PORT = $ARGV[1]; 
 +my $STATUS = "0";  
 +my $sock = new IO::Socket::INET->new( 
 +         PeerAddr => $IP, 
 +         PeerPort => $PORT, 
 +         Proto => 'tcp', 
 +         ); 
 +         $sock or $STATUS = "2"; 
 + 
 +if ( $STATUS eq 0 ) { 
 +   print "El puerto $ARGV[1] esta OK"; 
 +   exit 0; 
 +} else { 
 +   print "No puedo abrir el puerto $ARGV[1] WARNING"; 
 +   exit 2; 
 +   die; 
 +}  
 +</code> 
 + 
 +=== Ejemplo de consultas MySQL ===
  
 Podemos realizar plugins que dependan de la salida de otros plugins sin necesidad de consultar o ejecutar nuevamente estos, uilizando los datos contenidos en la base de datos MySQL Podemos realizar plugins que dependan de la salida de otros plugins sin necesidad de consultar o ejecutar nuevamente estos, uilizando los datos contenidos en la base de datos MySQL
Línea 2422: Línea 3604:
 Resultando en una tabla como esta Resultando en una tabla como esta
  
-^^display_name^current_state^^+^display_name^current_state^
 |firewall|0| |firewall|0|
 |apache|1| |apache|1|
Línea 2448: Línea 3630:
 Resultando en una tabla como esta Resultando en una tabla como esta
  
-^^host_name^service_object_id^service_description^current_state^^+^host_name^service_object_id^service_description^current_state^
 | concentrador_mpls | 18 | HTTP | 0 | | concentrador_mpls | 18 | HTTP | 0 |
 | router-vpn | 23| HTTP | 1| | router-vpn | 23| HTTP | 1|
Línea 2484: Línea 3666:
 Resultando en una tabla como esta Resultando en una tabla como esta
  
-^^states^number^^+^states^number^
 |OK|1754| |OK|1754|
 |WARNING|13| |WARNING|13|
 |CRITICAL|84| |CRITICAL|84|
 |UNKNOWN|20| |UNKNOWN|20|
 +
 +Consulta simple para obtener un conteo general de los estados generales ordenados por meses de un  año determinado.
 +
 +<code sql>
 +SELECT
 + CONCAT('',DATE_FORMAT(nagios_statehistory.state_time,'%M')) AS TEMPS,
 + ELT(nagios_statehistory.state+1,'OK','WARNING','CRITICAL','UNKNOWN') AS ETAT,
 + CONCAT('',COUNT(nagios_statehistory.state)) AS QUANTITE
 +FROM
 + `nagios_statehistory`
 + LEFT JOIN nagios_objects AS obj1 ON nagios_statehistory.object_id=obj1.object_id
 + LEFT JOIN nagios_instances ON nagios_statehistory.instance_id=nagios_instances.instance_id
 +WHERE
 + obj1.objecttype_id='2'
 + AND nagios_statehistory.state_type = 1
 + AND DATE_FORMAT(nagios_statehistory.state_time,'%Y') = 2010
 +GROUP BY
 + TEMPS, ETAT
 +ORDER BY
 + DATE_FORMAT(nagios_statehistory.state_time,'%m'),nagios_statehistory.state
 +</code>
 +
 +Resultando en una tabla como esta
 +
 +^TEMPS^ETAT^QUANTITE^
 +|November|OK|1754|
 +|November|WARNING|13|
 +|November|CRITICAL|84|
 +|November|UNKNOWN|20|
 +
 +Trigger para guardar el último estado de los objetos
 +
 +Nagios no guarda en ninguna tabla de MySQL el último estado de los objetos, pero guarda los cambios de estado en la tabla nagios_statehistory. Para mantener el último estado se puede usar un trigger:
 +
 +<code sql>
 +create table last_state (object_id int(11), state int(6));
 +
 +create trigger last_state after insert on nagios_statehistory
 +for each row  
 +begin 
 +  if new.state_change = 1 then 
 +    update last_state set state = new.state where object_id new.object_id;
 +  end if;                                                                         
 +end;// 
 +</code>
 +
 +Ese trigger hace un update así que hay que cronear esto para mantener al día con los objetos la tabla.
 +
 +<code sql>
 +insert into last_state
 +        select obj.object_id, 0
 +        from nagios.nagios_objects as obj
 +        where obj.object_id not in
 +                (select object_id from last_state);
 +</code>
 +
 +
  
 Luego estas consultas podemos integrarlas en PHP o Perl, y obtener resultados que necesitemos para reflejarlos en un visor web, o en los resultados de un plugin. Luego estas consultas podemos integrarlas en PHP o Perl, y obtener resultados que necesitemos para reflejarlos en un visor web, o en los resultados de un plugin.
Línea 2644: Línea 3883:
  
  
-===== Objetivos =====+==== Objetivos ====
  
 Simplificar y optimizar la administración de diferentes servicios para conocer su estado minuto a minuto, y elaborar planes de acción. A su vez el sistema debe ser simple de utilizar por el administrador, y ser posible de ver via web los registros del sistema, realizar busquedas etc. Simplificar y optimizar la administración de diferentes servicios para conocer su estado minuto a minuto, y elaborar planes de acción. A su vez el sistema debe ser simple de utilizar por el administrador, y ser posible de ver via web los registros del sistema, realizar busquedas etc.
Línea 2684: Línea 3923:
  
  
-{{:notas:syslog-ng.png|}}+{{ :notas:syslog-ng.png |}}
  
 Osea tengo en primer lugar opciopnes generales, luego fuentes de donde obtener datos de los registros, ya sean locales, externos por red (udp, tcp, archivos de texto), y luego tenemos destinos y filtros configurados, uniendolos forman los registros de sistema Osea tengo en primer lugar opciopnes generales, luego fuentes de donde obtener datos de los registros, ya sean locales, externos por red (udp, tcp, archivos de texto), y luego tenemos destinos y filtros configurados, uniendolos forman los registros de sistema
Línea 2690: Línea 3929:
  
  
-===== Tareas =====+==== Tareas ====
  
-Se instalo el software syslog-ng dentro de un servidor Debian Etch.+Se instalo el software syslog-ng dentro de un servidor Debian.
  
 <code> <code>
Línea 2709: Línea 3948:
 En los clientes se procedió a configurar el syslog convencional para que loggueara por UDP hacia el servidor syslog. En los clientes se procedió a configurar el syslog convencional para que loggueara por UDP hacia el servidor syslog.
  
 +**syslog-ng.conf**
 +<file ini syslog-ng.conf>
 +destination syslog_server {
 +    tcp( "10.1.1.2" port(514) );
 +};
  
 +filter      f_local6       { facility(local6); };
  
-**/etc/syslog.conf**+filter f_auth { 
 +    facility(auth, authpriv); 
 +}; 
 +log {  
 +    source(src); 
 +    filter(f_auth); 
 +    destination(syslog_server); 
 +};
  
-//Configuracion para loguear datos de autenticacion//+log {  
 +    source(src); 
 +    filter(f_local6); 
 +    destination(syslog_server); 
 +}; 
 +</file>
  
-<code+**syslog.conf** 
-auth.*;authpriv.*;auth.notice;auth.error;auth.info;authpriv.none;     @{ip syslog} +<file ini syslog.conf
-</code>+auth.*;authpriv.*;auth.notice;auth.error;auth.info;authpriv.none;     @10.1.1.2 
 +local6.*                @10.1.1.2 
 +</file>
  
 +**/etc/profile.local** 
  
-**/etc/syslog-ng/syslog-ng.conf** +<note important> 
- +Esto es para logguear todos los comandos que ejecutan los usuarios, funciona aunque ejecuten un sudo o un su sin perder el rastro del usuario original, siempre y cuando no modifiquen la variable de entorno
-<code> +</note> 
-destination df_auth { tcp( {ip syslog} port(514) )}; +<code bash
-filter f_auth { facility(auth, authpriv); }; +export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami[$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" [$RETRN_VAL]"'
-log { source(src); filter(f_auth); destination(df_auth); };+
 </code> </code>
- 
- 
  
 ==== Configuración del Servidor ==== ==== Configuración del Servidor ====
Línea 2743: Línea 4000:
 options { options {
       long_hostnames(off);       long_hostnames(off);
 +      # doesn't actually help on Solaris, log(3) truncates at 1024 chars
       log_msg_size(8192);       log_msg_size(8192);
 +      # buffer just a little for performance
 +      # sync(1); <- Deprecated - use flush_lines() instead
       flush_lines(1);       flush_lines(1);
 +      # memory is cheap, buffer messages unable to write (like to loghost)
       log_fifo_size(16384);       log_fifo_size(16384);
 +      # Hosts we don't want syslog from
 +      #bad_hostname("^(ctld.|cmd|tmd|last)$");
 +      # The time to wait before a dead connection is reestablished (seconds)
       time_reopen(10);       time_reopen(10);
 +      #Use DNS so that our good names are used, not hostnames
       use_dns(no);       use_dns(no);
       dns_cache(yes);       dns_cache(yes);
 +      #Use the whole DNS name
       use_fqdn(no);       use_fqdn(no);
       keep_hostname(no);       keep_hostname(no);
       chain_hostnames(no);       chain_hostnames(no);
 +      #Read permission for everyone
       perm(0644);       perm(0644);
 +      # The default action of syslog-ng 1.6.0 is to log a STATS line
 +      # to the file every 10 minutes.  That's pretty ugly after a while.
 +      # Change it to every 12 hours so you get a nice daily update of
 +      # # how many messages syslog-ng missed (0).
 +      stats(43200000);
 }; };
-destination d_logzilla { 
-   program("/usr/local/php-syslog-ng/scripts/db_insert.pl" 
-   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n") 
-   ); 
-}; 
-source externo { 
-        udp(); 
-        tcp(); 
-}; 
- 
- 
-log { 
-    source(externo); 
-    destination(d_logzilla); 
-}; 
- 
  
 +# Log Interno
 source interno { source interno {
 +        # message generated by Syslog-NG
         internal();         internal();
 +        # standard Linux log source (this is the default place for the syslog()
 +        # function to send logs to)
         unix-stream("/dev/log");         unix-stream("/dev/log");
 +        # messages from the kernel
         file("/proc/kmsg" log_prefix("kernel: "));         file("/proc/kmsg" log_prefix("kernel: "));
 }; };
  
-destination df_auth { file("/var/log/auth.log"); }; +# Create destination to LogZilla 
-destination df_syslog file("/var/log/syslog"); }; +destination d_logzilla 
-destination df_cron { file("/var/log/cron.log"); }; +   program("/usr/local/nagios/syslog/scripts/db_insert.pl
-destination df_daemon { file("/var/log/daemon.log"); }; +   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n") 
-destination df_kern { file("/var/log/kern.log"); }; +   );
-destination df_lpr { file("/var/log/lpr.log"); }; +
-destination df_mail { file("/var/log/mail.log"); }; +
-destination df_user { file("/var/log/user.log"); }; +
-destination df_uucp { file("/var/log/uucp.log"); }; +
- +
-destination df_facility_dot_info { file("/var/log/$FACILITY.info"); }; +
-destination df_facility_dot_notice { file("/var/log/$FACILITY.notice"); }; +
-destination df_facility_dot_warn { file("/var/log/$FACILITY.warn"); }; +
-destination df_facility_dot_err { file("/var/log/$FACILITY.err"); }; +
-destination df_facility_dot_crit { file("/var/log/$FACILITY.crit"); }; +
- +
-destination df_news_dot_notice { file("/var/log/news/news.notice" owner("news")); }; +
-destination df_news_dot_err { file("/var/log/news/news.err" owner("news")); }; +
-destination df_news_dot_crit { file("/var/log/news/news.crit" owner("news")); }; +
- +
-destination df_debug { file("/var/log/debug"); }; +
-destination df_messages { file("/var/log/messages"); }; +
- +
-destination dp_xconsole { pipe("/dev/xconsole"); }; +
- +
-destination du_all { usertty("*"); }; +
- +
- +
- +
-filter f_auth { facility(auth, authpriv); }; +
- +
-filter f_syslog { not facility(auth, authpriv); }; +
- +
-filter f_cron { facility(cron); }; +
-filter f_daemon { facility(daemon); }; +
-filter f_kern { facility(kern); }; +
-filter f_lpr { facility(lpr); }; +
-filter f_mail { facility(mail); }; +
-filter f_news { facility(news); }; +
-filter f_user { facility(user); }; +
-filter f_uucp { facility(uucp); }; +
- +
-filter f_at_least_info { level(info..emerg); }; +
-filter f_at_least_notice { level(notice..emerg); }; +
-filter f_at_least_warn { level(warn..emerg); }; +
-filter f_at_least_err { level(err..emerg); }; +
-filter f_at_least_crit { level(crit..emerg); }; +
- +
-filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); }; +
- +
-filter f_messages { +
-        level(info,notice,warn) +
-            and not facility(auth,authpriv,cron,daemon,mail,news);+
 }; };
- +source externo 
-filter f_emerg level(emerg); }; +        # use the following line if you want to receive remote UDP logging messages 
- +        # (this is equivalent to the "-r" syslogd flag
-filter f_xconsole { +        # Ampliamos el limite de conexiones para recibir gran cantidad de datos de LOGS externos 
-    facility(daemon,mail+        udp(ip(0.0.0.0port(514)); 
-        or level(debug,info,notice,warn+        tcp(ip(0.0.0.0port(514)  max-connections(150) );
-        or (facility(news) +
-                and level(crit,err,notice));+
 }; };
  
- +# Tell syslog-ng to log to our new destination 
- +
 log { log {
-        source(interno); +    source(externo); 
-        filter(f_auth); +    destination(d_logzilla);
-        destination(df_auth);+
 }; };
  
-log { +# Alertas de Nagios Eventdb
-        source(interno); +
-        filter(f_syslog); +
-        destination(df_syslog); +
-};+
  
- +destination d_eventdb 
-log +    pipe
-        source(interno); +        "/usr/local/nagios/var/rw/syslog-ng.pipe", 
-        filter(f_daemon); +        template("$HOST\t$SOURCEIP\t$PRI\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n"
-        destination(df_daemon);+        template_escape(no) 
 +    );
 }; };
  
 log { log {
-        source(interno); +    source(externo); 
-        filter(f_kern); +    destination(d_eventdb);
-        destination(df_kern); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_lpr); +
-        destination(df_lpr); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_mail); +
-        destination(df_mail); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_user); +
-        destination(df_user); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_uucp); +
-        destination(df_uucp); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_mail); +
-        filter(f_at_least_info); +
-        destination(df_facility_dot_info); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_mail); +
-        filter(f_at_least_warn); +
-        destination(df_facility_dot_warn); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_mail); +
-        filter(f_at_least_err); +
-        destination(df_facility_dot_err); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_news); +
-        filter(f_at_least_crit); +
-        destination(df_news_dot_crit); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_news); +
-        filter(f_at_least_err); +
-        destination(df_news_dot_err); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_news); +
-        filter(f_at_least_notice); +
-        destination(df_news_dot_notice); +
-}; +
- +
- +
-log { +
-        source(interno); +
-        filter(f_debug); +
-        destination(df_debug); +
-}; +
- +
- +
-log { +
-        source(interno); +
-        filter(f_messages); +
-        destination(df_messages); +
-}; +
- +
-log { +
-        source(interno); +
-        filter(f_emerg); +
-        destination(du_all); +
-}; +
- +
- +
-log { +
-        source(interno); +
-        filter(f_xconsole); +
-        destination(dp_xconsole); +
-}; +
- +
-destination d_eventdb { +
-   pipe("/usr/local/nagios/var/rw/syslog-ng.pipe", +
-   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n"+
-   template_escape(no) +
-   ); +
-}; +
-filter f_at_least_warn { +
-   level(warn..emerg); +
-}; +
-log { +
-   source(externo); +
-   filter(f_at_least_warn); +
-   destination(d_eventdb);+
 }; };
 </code> </code>
Línea 3000: Línea 4096:
  
 {{:manuales:nagios:nagios_syslog.png|}} {{:manuales:nagios:nagios_syslog.png|}}
 +==== Eventdb ====
  
-===== Referencias =====+=== ¿Que es Eventdb? ===
  
-Sitios de donde descargar plugins y agregados para Nagios+EventDB es una herramienta para facilitar el tratamiento de los datos basados ​​en eventos de Syslog para herramientas de monitoreo como Nagios o Icinga y su integración con los mismos se logra a través de un plug-in de chequeo. Cuenta con varios plugins para diferentes fuentes de datos. La interfaz web permite a los usuarios buscar, filtrar y reconocer todos los eventos.
  
-  * Paquete Standard de plugins +=== ¿Cómo funciona? ===
-    http://nagiosplug.sourceforge.net/+
  
-  * Plugins con soporte SNMP           +El EventDB toma los eventos recibidos y los almacena en una base de datos MySQLSe tomando los datos de syslog-ng desde un pequeño demonio perl (syslog-ng2mysql.pl). syslog-ng2mysql.pl abre una unix-pipe por un lado desde donde recibe los mensajes de syslog-ng, y utiliza DBI en el otro para escribir datos en MySQL.
-    http://nagios.manubulon.com/+
  
-  * Plugins SAP CCMS       
-    http://sourceforge.net/projects/nagios-sap-ccms/ 
  
-  * Interfaz alternativa de Nagios para visualizar en BlackBerry +{{:manuales:nagios:nagios_eventdb.jpg|}} 
-    http://nagiosmobile.sourceforge.net/+===== Referencias =====
  
-  * Plugins para chequeos en BlackBerry     +==== TIP´s varios ====
-    http://www.1ight.fr/plugins/BlackBerry/+
  
-  Plugins de chequeo de Lotus Notes    +**Sobre performance**
-    http://barbich.net/ +
- +
-  Servidor de proyectos Nagios, plugins, templates etc en etapa de desarrollo +
-    http://www.nagiosforge.org/ +
- +
-  Servidor de proyectos Nagios, plugins, templates etc +
-    http://www.nagiosexchange.org +
- +
-  Agregado de chequeo de eventos Nagios para firefox +
-    https://addons.mozilla.org/en-US/firefox/addon/3607 \\ http://code.google.com/p/nagioschecker/ +
- +
-  * Visor de sucesos para el escritorio (Linux, Windows) +
-    http://sourceforge.net/projects/nagstamon +
- +
-==== TIP´s varios ====+
  
-  * Sobre performance 
     * Compilar Nagios y NDO con optimizaciones para nuestro procesador     * Compilar Nagios y NDO con optimizaciones para nuestro procesador
     http://en.gentoo-wiki.com/wiki/Safe_Cflags     http://en.gentoo-wiki.com/wiki/Safe_Cflags
Línea 3055: Línea 4131:
     child_processes_fork_twice=1     child_processes_fork_twice=1
  
-Configuración recomendada:+Configuración para generar menos forks:
  
     child_processes_fork_twice=0     child_processes_fork_twice=0
 +
 +
 +
 +**Midiendo la performance de Nagios**
 +
 +La utilidad **nagiostats** permite obtener información variada sobre la ejecución de Nagios que puede ser muy útil para medir la performance de monitoreo. Puede obtener información, ya sea en formato legible en variables compatibles con RRD+PNP / MRTG. Esto nos sirve para informarnos efectivamente de las frecuencias de monitoreo y saber si estas son correctas y si la información obtenida es actual o tiene algún desfasaje.
 +
 +{{ :manuales:nagios:nagiostats.png| }}
 +
 +{{ :manuales:nagios:nagiostats2.jpg| }}
 +
 +<code>
 +Program Running Time:                   0d 5h 20m 39s
 +Nagios PID:                             10119
 +Used/High/Total Command Buffers:        0 / 0 / 64
 +Used/High/Total Check Result Buffers:   0 / 7 / 512
 +
 +Total Services:                         95
 +Services Checked:                       94
 +Services Scheduled:                     91
 +Services Actively Checked:              94
 +Services Passively Checked:             1
 +Total Service State Change:             0.000 / 78.950 / 1.026 %
 +Active Service Latency:                 0.000 / 4.272 / 0.561 sec
 +Active Service Execution Time:          0.000 / 60.007 / 2.066 sec
 +Active Service State Change:            0.000 / 78.950 / 1.037 %
 +Active Services Last 1/5/15/60 min:     4 / 68 / 91 / 91
 +Passive Service State Change:           0.000 / 0.000 / 0.000 %
 +Passive Services Last 1/5/15/60 min:    0 / 0 / 0 / 0
 +Services Ok/Warn/Unk/Crit:              58 / 16 / 0 / 21
 +Services Flapping:                      1
 +Services In Downtime:                   0
 +
 +Total Hosts:                            24
 +Hosts Checked:                          24
 +Hosts Scheduled:                        24
 +Hosts Actively Checked:                 24
 +Host Passively Checked:                 0
 +
 +Total Host State Change:                0.000 / 9.210 / 0.384 %
 +Active Host Latency:                    0.000 / 0.446 / 0.219 sec
 +Active Host Execution Time:             1.019 / 10.034 / 2.764 sec
 +Active Host State Change:               0.000 / 9.210 / 0.384 %
 +Active Hosts Last 1/5/15/60 min:        5 / 22 / 24 / 24
 +Passive Host State Change:              0.000 / 0.000 / 0.000 %
 +Passive Hosts Last 1/5/15/60 min:       0 / 0 / 0 / 0
 +Hosts Up/Down/Unreach:                  18 / 4 / 2
 +Hosts Flapping:                         0
 +Hosts In Downtime:                      0
 +
 +Active Host Checks Last 1/5/15 min:     9 / 52 / 164
 +   Scheduled:                           4 / 23 / 75
 +   On-demand:                           3 / 23 / 69
 +   Cached:                              2 / 6 / 20
 +Passive Host Checks Last 1/5/15 min:    0 / 0 / 0
 +Active Service Checks Last 1/5/15 min:  9 / 80 / 244
 +   Scheduled:                           9 / 80 / 244
 +   On-demand:                           0 / 0 / 0
 +   Cached:                              0 / 0 / 0
 +Passive Service Checks Last 1/5/15 min: 0 / 0 / 0
 +External Commands Last 1/5/15 min:      0 / 0 / 0
 +</code>
 +
 +**Flap Detection**
 +
 +Flap detection es un mecanismo mediante el cual Nagios induce que un servicio esta cambiando de estado continuamente sin entrar en un régimen permanente. El procedimiento del que se vale flap detection para detectar que un servicio o host esta en ese estado (“flapping”), es tomar los últimos 21 resultados de los checks y verificar cuantos cambios de estado hay en los mismos. Analizando más en detalle, dentro de 21 resultados hay 20 posibles cambios de estado. Suponiendo que dentro de estos 20 cambios de estado posibles, hubo 10 cambios de estado reales, la relación daría como resultado 10/20=0,50, es decir, 50%. Mediante dos parámetros se configuran los umbrales para que el mecanismo considere que el servicio o host se encuentra en ese
 +estado.
 +
 +
 +Es interesante entender que el concepto de “flapping” se puede asignar por servicio ya sea en el template utilizado o en la definición de un servicio en particular. Igualmente es conveniente dejar la configuración general en su estado original y solo alterar la configuración particular del servicio que presenta problemas de esta índole.
 +
 +
 +Otra consideración importante es que se pueden quitar estados a interpretarse como cambio de estado, por ejemplo el estado “UNKNOWN” podría considerarse como que no hubo cambio respecto del estado anterior. Para ello hay que utilizar la directiva
 +flap_detection_options dentro de la configuración del servicio o host.
 +
 +
  
  
Línea 3120: Línea 4272:
 #max_eventhandlers_age=44640 #max_eventhandlers_age=44640
 max_eventhandlers_age=60 max_eventhandlers_age=60
 +</code>
 +
 +
 +Reparar tabla de NDO : En caso de que una tabla se corrompa, deberemos bajar el servicio NDO para que nagios no siga escribiendo registros y ejecutar la siguiente orden desde el shell.
 +
 +<code>
 +mysqlcheck –-auto-repair nagios nagios_servicechecks;
 </code> </code>
  
Línea 3152: Línea 4311:
  
  
-=== Scripts utiles ===+=== Scripts útiles ===
  
 A continuacion se detallan scripts que pueden ser de utilidad para el dia a dia con Nagios A continuacion se detallan scripts que pueden ser de utilidad para el dia a dia con Nagios
Línea 3193: Línea 4352:
 Ejemplo para este caso Ejemplo para este caso
 cpan> install Nagios::StatusLog cpan> install Nagios::StatusLog
 +</code>
 +
 +Ejemplo de uso de Nagios::Report
 +
 +<code perl>
 +use Nagios::Report ;
 +my $x = Nagios::Report->new(q<local_cgi nagios_web_server nagios_user>, [ '24x7' ], 'thismonth')
 +    or die "Can't construct Nagios::Report object." ;
 +my @these_fields = qw(
 +        HOST_NAME
 +        PERCENT_TOTAL_TIME_UP
 +  ) ;
 +$x->mkreport(
 +\@these_fields,
 +                            # All records
 +                            #   sub { 1 },
 +                            # All records whose HOST_NAME starts with 'Alb'
 +                            #   sub { my %F = @_; my $h = $F{HOST_NAME}; $h =~ /^Alb/ },
 +                            # Regrettably, this is _NOT_ the same since
 +                            # @_ can't be used as a hash.
 +                            #   sub { $_{HOST_NAME} =~ /^Alb/ }
 +                            # All records with an up time percent < 98%
 +sub {
 +    my %F = @_;
 +    my $u = $F{PERCENT_TOTAL_TIME_UP};
 +    $u =~ s/%//;
 +    $u > 0
 +},
 +# Sort order
 +&comp( alpha => 0, ascend => 0, fields => [ qw(TOTAL_TIME_DOWN TOTAL_TIME_UNREACHABLE) ]),
 +# Sorts descending by max of TOTAL_TIME_DOWN and TOTAL_TIME_UNREACHABLE
 +                            # DIY sorters remember that $a and $b _must_ be in Nagios::Report package.
 +                            # eg by TOTAL_DOWN_TIME descending.
 +                            #   sub { my %f = @_ ;
 +                            #         package Nagios::Report;
 +                            #         $b->[$f{TOTAL_TIME_DOWN}] <=> $a->[$f{TOTAL_TIME_DOWN}]
 +                            #        },
 +                            # Same as
 +                            #  &comp(alpha => 0, ascend => 0, fields => ['TOTAL_TIME_DOWN'])
 +                            # Same but harder,
 +                            #  sub { package Nagios::Report; $b->[16] <=> $a->[16] },
 +                            # Optional callback to add or mangle fields.
 +                            # Add 2 fields for downtime vals in hours minutes and secs.
 +sub {
 +    $F = shift @_;
 +    $F->{PERCENT_TOTAL_TIME_UP} =~ s/%//;
 +    $F->{TIME_UP_HHMMSS}    =    t2hms( $F->{TOTAL_TIME_UP} ),
 +    $F->{TIME_DOWN_HHMMSS}    =    t2hms( $F->{TOTAL_TIME_DOWN} ),
 +    $F->{TIME_UNREACH_HHMMSS} =    t2hms( $F->{TOTAL_TIME_UNREACHABLE} ) ;
 +    qw(TIME_UP_HHMMSS TIME_DOWN_HHMMSS TIME_UNREACH_HHMMSS)
 +}
 +) ;
 +$x->csv_dump ;
 +</code>
 +
 +Volcado de variables de entorno de Nagios (esto es útil cuando programamos plugins que requiren variables de entorno y no sabemos como las tenemos que ver o capturar) :
 +<code perl>
 +#!/usr/bin/perl -w
 +my $o_hoststate        = $ENV{NAGIOS_HOSTSTATE};
 +# Nagios monitored host check output data
 +my $o_hostoutput       = $ENV{NAGIOS_HOSTOUTPUT};
 +# Nagios date when the event was recorded
 +my $o_datetime         = $ENV{NAGIOS_LONGDATETIME};
 +# The recipients defined in $CONTACTEMAIL$
 +my $o_to_recipients    = $ENV{NAGIOS_CONTACTEMAIL};
 +use Data::Dumper::Concise;
 +print "<pre>";
 +print Dumper(%ENV);
 +print "</pre>";
 +</code>
 +
 +Ejemplo de mk_livestatus
 +
 +<code python>
 +#!/usr/bin/python
 +#
 +# Sample program for accessing the Livestatus Module
 +# from a python program
 +socket_path = "/var/lib/nagios/rw/live"
 +
 +import socket
 +s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 +s.connect(socket_path)
 +
 +# Write command to socket
 +s.send("GET hosts\n")
 +
 +# Important: Close sending direction. That way
 +# the other side knows, we are finished.
 +s.shutdown(socket.SHUT_WR)
 +
 +# Now read the answer
 +answer = s.recv(100000000)
 +
 +# Parse the answer into a table (a list of lists)
 +table = [ line.split(';') for line in answer.split('\n')[:-1] ]
 +
 +print table
 +</code>
 +
 +Llamando al socket directamente desde PHP.
 +
 +<code php>
 +$data_address="unix:///usr/local/nagios/var/rw/live";
 +$query="GET services\nFilter: host_groups >= ServiciosGenerales\nColumns: host_name host_address display_name service_state plugin_output notes_url\nOutputFormat: json\n\n";
 +$fp = fsockopen($data_address,0);
 +if (!$fp) {
 +    echo "$errstr ($errno)<br />\n";
 +} else {
 +    $returnval = "";
 +    fwrite($fp,$query);
 +    while (!feof($fp)) {
 + $returnval = $returnval.fgets($fp, 128);
 +# print $returnval;
 +    }
 +fclose($fp);
 +if ($returnval == "[] ")
 +    $returnval = "";
 +}
 +print_r(json_decode($returnval,true));
 +</code>
 +
 +Llamando al socket indirectamente desde PHP utilizando //unixcat//.
 +
 +Ejemplo de como obtener la lista de equipos y su estado desde php y exportarlo a formato CSV
 +
 +<code php>
 +$lista_servidores = shell_exec("/bin/echo -e \"GET hosts\nColumns: name address alias state\n\" | /usr/local/bin/unixcat /usr/local/nagios/var/rw/live");
 +$lista_hosts = str_getcsv($lista_servidores, "\n");
 +</code>
 +
 +Convertir el timestamp de nagios.log a human readable
 +
 +<code>
 +tail -f nagios.log | perl -pe 's/(\d+)/localtime($1)/e' 
 +</code>
 +
 +**LQL - The Livestatus Query Language**
 +
 +El lenguaje de consultas de Livestatus, basicamente consiste en consultas del tipo GET (case sensitive) con estos parámetros a los cuales consideraremos como equivalente a tablas SQL :
 +
 +    * hosts - your Nagios hosts
 +    * services - your Nagios services, joined with all data from hosts
 +    * hostgroups - you Nagios hostgroups
 +    * servicegroups - you Nagios servicegroups
 +    * contactgroups - you Nagios contact groups
 +    * servicesbygroup - new in 1.1.3 - all services grouped by service groups
 +    * servicesbyhostgroup - new in 1.1.3 - all services grouped by host groups
 +    * hostsbygroup - new in 1.1.3 - all hosts group by host groups
 +    * contacts - your Nagios contacts
 +    * commands - your defined Nagios commands
 +    * timeperiods - time period definitions (currently only name and alias)
 +    * downtimes - all scheduled host and service downtimes, joined with data from hosts and services.
 +    * comments - all host and service comments
 +    * log - a transparent access to the nagios logfiles (include archived ones)ones
 +    * status - general performance and status information. This table contains exactly one dataset.
 +    * columns - a complete list of all tables and columns available via Livestatus, including descriptions!
 +
 +
 +**Ver como Human Readable el timestamp del archivo nagios.log**
 +
 +<code>
 +# cat /usr/local/nagios/var/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
 </code> </code>
  
Línea 3221: Línea 4543:
 </code> </code>
  
-^^sla_id^host_object_id^host_name^service_object_id^service_name^outage_percent^availability_percent^^+^sla_id^host_object_id^host_name^service_object_id^service_name^outage_percent^availability_percent^
 |1|122|srv-web1|1761|HTTP|0.0227476|99.9772| |1|122|srv-web1|1761|HTTP|0.0227476|99.9772|
  
Línea 3352: Línea 4674:
 </code> </code>
  
 +Desde Dokuwiki haciendo uso de la extension PHP, podemos embeber los datos actuales de los objetos de Nagios, gracias a MK Live Status
 +
 +<code php>
 +<php>
 +$lista_servidores = shell_exec("/bin/echo -e \"GET hosts\nColumns: name address alias state\n\" | /usr/local/bin/unixcat /usr/local/nagios/var/rw/live");
 +$lista_hosts = str_getcsv($lista_servidores, "\n");
 +echo "<div class='level2'> 
 +<div class='table sectionedit3'>
 +<table class='inline'> 
 +<th>Host</th><th>IP</th><th>Descripcion</th><th>Estado Actual</th><th>Metricas / Informes</th>
 +";
 +
 +foreach ($lista_hosts as $host) {
 +    $host = explode(";", $host);
 +    print "<tr><td>";
 +    print "<a href='doku.php?id=nagios:servidores:".$host['0']."'>".$host['0']."</a>";
 +    print "</td><td>";
 +    print $host['1'];
 +    print "</td><td>";
 +    print $host['2'];
 +    print "</td><td>";
 +    if($host['3']==0) print "<a href='/nagios/cgi-bin/extinfo.cgi?type=1&host=".$host['0']."'><font color='#008000'>ARRIBA</font></a>";
 +    if($host['3']==1) print "<a href='/nagios/cgi-bin/extinfo.cgi?type=1&host=".$host['0']."'><font color='#FF0000'>CA&Iacute;DO</font><img src='/nagios/wiki/lib/images/smileys/icon_exclaim.gif' class='middle' /></a>";
 +    if($host['3']==2) print "<a href='/nagios/cgi-bin/extinfo.cgi?type=1&host=".$host['0']."'><font color='#FF0000'>UNREACHEABLE</font><img src='/nagios/wiki/lib/images/smileys/icon_exclaim.gif' class='middle' /></a>";
 +    print "</td>";
 +    print "<td><a href='/pnp4nagios/index.php/graph?host=".$host['0']."'>Performance</a> / <a href='/nagios/cgi-bin/avail.cgi?get_date_parts=&host=".$host['0']."'>Disponibilidad</a></td></tr>";
 +}
 +
 +echo "</table></div></div>";
 +</php>
 +</code>
 +
 +Tambien desde dokuwiki por ejemplo si necesitamos podemos consultar comandos por SSH para mostrar su salida en la documentación de nuestro equipo, como un plus de un dato en tiempo real.
 +
 +<code php>
 +<php>
 +if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
 +if(!($con = ssh2_connect("oracle", 22))){
 +    echo "No puedo establecer una conexion SSH\n";
 +} else {
 +if (ssh2_auth_pubkey_file($con, 'root',
 +                          '/home/usuario/.ssh/id_rsa.pub',
 +                          '/home/usuario/.ssh/id_rsa', 'secret')) {
 +//  echo "Public Key Authentication Successful\n";
 +} else {
 +  die('Public Key Authentication Failed');
 +}
 +        if (!($stream = ssh2_exec($con, "/home/usuario/dokuwiki_archlogs.pl" ))) {
 +            echo "fail: unable to execute command\n";
 +        } else {
 +            // collect returning data from command
 +            stream_set_blocking($stream, true);
 +            $data = "";
 +            while ($buf = fread($stream,4096)) {
 +                $data .= $buf;
 +            }
 +            fclose($stream);
 +            print $data;
 +        }
 +    }
 +</php>
 +</code>
 +
 +<file perl dokuwiki_archlogs.pl>
 +!/usr/bin/perl
 +use strict;
 +use warnings;
 +
 +sub get_sorted_files {
 +   my $path = shift;
 +   opendir my($dir), $path or die "no puedo abrir $path: $!";
 +   my %hash = map {$_ => (stat($_))[9] || undef} # saltar listas vacias
 +    map  { "$path$_" }
 +    grep { m/.dbf/i }
 +    readdir $dir;
 +    closedir $dir;
 +    return %hash;
 +}
 +
 +my %files = get_sorted_files("/oracle/arclog/DBID/");
 +print "
 +    <table class='inline'> 
 +    <th>Archivo</th><th>Timestamp</th>";
 +foreach my $key (sort{$files{$a} <=> $files{$b}} keys %files) {
 +    my $filename = $key;
 +    $filename =~ s/\.\///g;
 +    $filename =~ s/\.\.//g;
 +    print "<tr><td>$filename</td><td>", scalar localtime($files{$key}), "</td></tr>\n";
 +}
 +print "</table>";
 +</file>
 +
 +si queremos mostrar los datos parseados de Dokuwiki como un simple HTML en algún sector fuera de la Wiki, podemos hacer uso de este script :
 +
 +<file php export_dokuwiki.php>
 +<?php //DokuWiki exporter - copylefted by Harvie.cz 2o1o (copy this file to dokuwiki root)
 +header('Content-Type: text/html; charset=utf-8');
 +#if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
 +define('DOKU_INC','/usr/local/nagios/share/wiki/');
 +require_once(DOKU_INC.'inc/init.php');
 +require_once(DOKU_INC.'inc/common.php');
 +require_once(DOKU_INC.'inc/events.php');
 +require_once(DOKU_INC.'inc/parserutils.php');
 +require_once(DOKU_INC.'inc/auth.php');
 +
 +function p_file_xhtml($id, $excuse=false){
 +    if(@file_exists($id)) return p_cached_output($id,'xhtml',$id);
 +    return p_wiki_xhtml($id, '', $excuse);
 +}
 +
 +if($_GET['pagina']) {
 +  echo p_file_xhtml($_GET['pagina'], false);
 +}
 +?>
 +</file>
 +
 +=== Plugins interesantes ===
  
 **check_multiaddr** **check_multiaddr**
Línea 3365: Línea 4804:
  
 Con lo cual el utilitario //check_multiaddr// actuara simplemente de envoltorio de nuestros plugins, encargandose del timeout entre cada consulta a cada direccion y de devolver su salida con su exit status correspondiente. Con lo cual el utilitario //check_multiaddr// actuara simplemente de envoltorio de nuestros plugins, encargandose del timeout entre cada consulta a cada direccion y de devolver su salida con su exit status correspondiente.
 +
 +Adjunto : check_multiaddr y una version alternativa basada en el mismo código
 +
 +{{:manuales:nagios:check_multiaddr.pl.txt.gz|}}
 +
 +{{:manuales:nagios:check_all_ips.pl.txt.gz|}}
  
 **apache** **apache**
Línea 3378: Línea 4823:
 </code> </code>
  
 +
 +**check_sap**
 +
 +Para que funcionen correctamente algunas cosas de los plugins de Nagios CCMS, hay que realizar algunas minimas modificaciones por ejemplo en :
 +En el plugin “Nagios SAP CCMS” hay que modificar algunas lineas de los archivos agnt_mon.h y sap_moni_ccm.h ya que en estos se establece el path de acceso a los archivos de configuración que por defecto los busca en /etc/sapmon, pero nuestro objetivo es que los busque en /usr/local/nagios/etc/sapmon, de una cierta manera quede mas centralizao u ordenado. Para mas información sobre SAP pueden ver el apartado [[aprendiendo_sap:start|aprendiendo SAP]].
 +
 +  * **agnt_mon.h**
 +<code c>
 +    #define AGENT_INI_FILE “/usr/local/nagios/etc/sapmon/agent.cfg”
 +    #define AGENT_LOGIN_FILE “/usr/local/nagios/etc/sapmon/login.cfg”
 +    #define AG_EZ_FILE “/usr/local/nagios/etc/sapmon/moni_tr.cfg”
 +</code>
 +  * **sap_moni_ccm.h**
 +<code c>
 +    #define AGENT_INI_FILE “/usr/local/nagios/etc/sapmon/agent.cfg”
 +    #define AGENT_LOGIN_FILE “/usr/local/nagios/etc/sapmon/login.cfg”
 +</code>
 +
 +Archivo ///usr/local/nagios/etc/sapmon/login.cfg// de ejemplo :
 +
 +<code ini>
 +[LOGIN_PRD]
 +LOGIN=-d PRD -u nagios -p password -c 300 -h 10.1.1.90 -s 00
 +</code>
 +
 +Archivo ///usr/local/nagios/etc/sapmon/agent.cfg// de ejemplo :
 +
 +**DESCRIPTION** = <Description of the Template>    Arbitrary description field \\
 +**MONI_SET_NAME** = <Monitor collection>            Monitor collection in RZ20 \\
 +**MONI_NAME** = <Monitor name>                      Name of the specific monitor \\
 +**MAX_TREE_DEPTH** = <number>                      Monitor loading depth \\
 +**PATTERN_0** = <SAPSID>\<Context>\<Monitor object>\<Monitor attribut> \\
 +
 +<code ini>
 +[TEMPLATE_00]
 +DESCRIPTION="Load Average"
 +MONI_SET_NAME=SAP CCMS Admin Workplace
 +MONI_NAME="Operating System"
 +MAX_TREE_DEPTH=0
 +PATTERN_0="BCE\bcemain_BCE_26\CPU\5minLoadAverage"
 +PATTERN_0="*\*\CPU\5minLoadAverage"
 +
 +[TEMPLATE_01]
 +MONI_SET_NAME=SAP CCMS Admin Workplace
 +MONI_NAME="Operating System"
 +MAX_TREE_DEPTH=0
 +PATTERN_2="BCE\bcemain_BCE_26\CPU\CPU_U*"
 +
 +[TEMPLATE_02]
 +VALUE=DIALOG_RESPONSE_TIME
 +
 +[TEMPLATE_03]
 +SYSTEM=BCE
 +APPL-SERVER=bcemain*
 +VALUE=DIALOG_RESPONSE_TIME
 +
 +[TEMPLATE_04]
 +MONI_SET_NAME="SAP CCMS Monitor Templates" 
 +MONI_NAME="Dialog Overview"
 +PATTERN_0="BCE\*\Dialog\FrontEndNetTime"
 +
 +
 +[TEMPLATE_05]
 +MONI_SET_NAME="SAP CCMS Monitor Templates" 
 +MONI_NAME="Dialog Overview"
 +PATTERN_0="BCE\PWD*\Dialog\FrontEndNetTime"
 +
 +[TEMPLATE_005]
 +MONI_SET_NAME="SAP CCMS Monitor Templates" 
 +MONI_NAME="Dialog Overview"
 +PATTERN_0="P10\*\Dialog\FrontEndNetTime"
 +
 +[TEMPLATE_06]
 +MONI_SET_NAME="SAP CCMS Monitor Templates" 
 +MONI_NAME="Dialog Overview"
 +PATTERN_0="*"
 +
 +[TEMPLATE_07]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Availability and Performance Overview"
 +PATTERN_0="*\Availability\*_BCE*\"
 +
 +# Standard SAP Templates
 +[TEMPLATE_99]
 +VALUE=CHECK_SAP_SYSTEMS
 +
 +[TEMPLATE_105]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Dialog Overview"
 +PATTERN_0="*UsersLoggedIn"
 +
 +[TEMPLATE_110]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Entire System"
 +PATTERN_0="*EsAct"
 +
 +[TEMPLATE_200]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Database"
 +PATTERN_0="*Fullest tablespace"
 +
 +[TEMPLATE_210]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Entire System"
 +PATTERN_0="*DBRequestTime"
 +
 +[TEMPLATE_300]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Operating System"
 +PATTERN_0="*5minLoadAverage"
 +
 +[TEMPLATE_999]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Entire System"
 +PATTERN_0="*"
 +
 +[TEMPLATE_060]
 +#DESCRIPTION="Free Swap"
 +MONI_SET_NAME=SAP CCMS Admin Workplace
 +MONI_NAME="Operating System"
 +#MAX_TREE_DEPTH=0
 +PATTERN_0="*\*\Swap_Space\Freespace"
 +
 +[TEMPLATE_070]
 +DESCRIPTION=Dialog Response Time
 +MONI_SET_NAME=SAP CCMS Monitor Templates
 +MONI_NAME=Dialog Overview
 +PATTERN_0=P10\*\Dialog\ResponseTime
 +
 +[TEMPLATE_071]
 +DESCRIPTION=Dialog Response Time
 +MONI_SET_NAME=SAP CCMS Monitor Templates
 +MONI_NAME=Dialog Overview
 +PATTERN_0=*
 +
 +[TEMPLATE_09]
 +DESCRIPTION="DialogResponseTime"
 +MONI_SET_NAME=SAP CCMS Monitors for Optional Components
 +MONI_NAME="Logon Load Balancing"
 +MAX_TREE_DEPTH=0
 +PATTERN_0="*\*\Dialog\ResponseTime"
 +
 +[TEMPLATE_007]
 +DESCRIPTION="TEST"
 +MONI_SET_NAME=SAP CCMS Monitors for Optional Components
 +MONI_NAME="Logon Load Balancing"
 +MAX_TREE_DEPTH=0
 +PATTERN_0="SAP\Server3_SAP_00\R3Services\Dialog\ResponseTime"
 +
 +
 +[TEMPLATE_900]
 +DESCRIPTION=Java
 +MONI_SET_NAME=SAP J2EE Monitor Templates
 +MONI_NAME=Heartbeat
 +PATTERN_0=*
 +
 +[TEMPLATE_901]
 +DESCRIPTION=Java
 +MONI_SET_NAME=SAP J2EE Monitor Templates
 +MONI_NAME=Applications
 +PATTERN_0=*
 +
 +[TEMPLATE_06]
 +DESCRIPTION=Users-Logged-On
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Dialog Overview"
 +MAX_TREE_DEPTH=0
 +PATTERN_0=SID\hostname*\Di*\Us*
 +
 +
 +[TEMPLATE_870]
 +DESCRIPTION=Java
 +MONI_SET_NAME=Test J2EE Monitor Set
 +MONI_NAME=J2EE Engine Kernel
 +PATTERN_0="XQ1\XQ1 64 Serv 649148450 mchp7tpa\System Threads Pool\MaximumThreadPoolSize"
 +
 +[TEMPLATE_875]
 +DESCRIPTION=Java
 +MONI_SET_NAME=Test J2EE Monitor Set
 +MONI_NAME=J2EE Engine Kernel
 +PATTERN_0="XQ1\XQ1 64 Disp 649148400 mchp7tpa\General (MessageContext)\AverageMSProcessTime"
 +
 +
 +[TEMPLATE_666]
 +DESCRIPTION=SAP Avg. DB Request Time dehq0srm
 +MONI_SET_NAME=CENTRAL MONITORING SYSTEM (SAP Basis Kerpen)
 +MONI_NAME=Test Systems SAP
 +PATTERN_0=SID\hostname\Dialog\DBRequestTime
 +
 +[TEMPLATE_667]
 +MONI_SET_NAME = "SAP CCMS Technical Expert Monitors"
 +MONI_NAME     = "All Contexts on Local Application Server"
 +PATTERN_0     = "*"
 +
 +[TEMPLATE_668]
 +MONI_SET_NAME = "SAP CCMS Technical Expert Monitors"
 +MONI_NAME     = "All Contexts on Local Application Server"
 +PATTERN_0     = "*\SYSTEM\Free space"
 +
 +
 +[TEMPLATE_471]
 +MONI_SET_NAME = "SAP CCMS Technical Expert Monitors"
 +MONI_NAME     = "All Contexts on Local Application Server"
 +PATTERN_0     = "*\PSAPSR3USR\Free space"
 +
 +# Monitorear Extended memory en application Server
 +[TEMPLATE_784]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Performance Overview"
 +PATTERN_0="SID\SID3_00\*EsAct"
 +
 +[TEMPLATE_785]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Performance Overview"
 +PATTERN_0="SID\SID2_00\*EsAct"
 +
 +[TEMPLATE_786]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Performance Overview"
 +PATTERN_0="SID\SID1_00\*EsAct"
 +
 +# Monitorear Extended memory en Central Instance
 +[TEMPLATE_787]
 +MONI_SET_NAME="SAP CCMS Monitor Templates"
 +MONI_NAME="Performance Overview"
 +PATTERN_0="SID\SID_00\*EsAct"
 +
 +[TEMPLATE_666]
 +MONI_SET_NAME = "SID - Monitor"
 +MONI_NAME     = "All Monitoring Contexts"
 +PATTERN_0     = "*"
 +
 +[TEMPLATE_670]
 +MONI_SET_NAME="SID - Monitor"
 +MONI_NAME="All Monitoring Contexts"
 +PATTERN_0="SID\*\*Oracle messages*\ORA*"
 +</code>
 +
 +Si queremos agregar en CCMS el monitoreo de X jobs debemos seguir esta guia http://help.sap.com/saphelp_nw04/helpdata/en/1c/48803d48de0610e10000000a114084/content.htm
 +
 +<code ini>
 +# Monitoreo de Delay + Runtime de X job
 +[TEMPLATE_234]
 +MONI_SET_NAME="SID - Monitor"
 +MONI_NAME="All Monitoring Contexts"
 +PATTERN_0="SID\Background\E_001_RB_06\Delay + Runtime"
 +</code>
 +
 +Ejemplo de como podemos definir el comando en Nagios :
 +<code>
 +define command {
 +        command_name                    check_sap
 +        command_line                    $USER1$/ccms/check_sap $ARG1$ $_HOSTSAPID$
 +        register                        1
 +}       
 +
 +define command {
 +        command_name                    check_sap_np
 +        command_line                    $USER1$/ccms/check_sap_np.sh $ARG1$ $_HOSTSAPID$
 +        register                        1
 +}       
 +</code>
 +Por ejemplo si la salida del chequeo en SAP nos arroja //pipes// **|**, para que no tengamos problemas con un falso perfdata, podemos apelar a este script :
 +
 +**check_sap_np.sh**
 +<code bash>
 +#!/bin/bash
 +CMD=`/usr/local/nagios/libexec/ccms/check_sap $1 $2`
 +EXIT=$?
 +echo $CMD | /bin/sed -e 's/|/-/g'
 +exit $EXIT
 +</code>
 +
 +Para poder hacer correctamente el chequeo deberemos defini la variable **$_HOSTSAPID$** dentro de la configuración del host :
 +<code>
 +_SAPID                      PRD
 +</code>
 +
 +**check_sap** version netways
 +
 +Esta versión es mas actualizada que la anterior y tiene mejor mantenimiento. Deberemos tener el paquete nwrfcsdk, para proceder a su compilación 
 +<code>
 +check_sap  -f   --host 10.1.1.200 --sysnr {numero_sistema} --client {instancia} --dest {SID} --user {usuario} --pass {contraseña}   'SID - Monitor' 'All Monitoring Contexts' 'System Configuration/Concurrent Users' --trim 4
 +</code>
 +https://www.netways.org/projects/check-sap/wiki
 +
 +**Tivoli Storage Manager - TSM**
 +
 +**IBM Tivoli Storage Manager** es una plataforma de protección de datos y administración para copia de seguridad y restauración. Desde Nagios tenemos una gran variedad de scripts para verificar su correcto funcionamiento interno.
 +
 +Deberemos tener configurado el cliente TSM dentro del mismo servidor donde tenemos instalado Nagios. Y dentro del archivo **dsm.sys** deberemos tener configurado los múltiples servidores para conectarnos. Es recomendable agregarle una variable dentro de Nagios a cada uno de los hosts definimos que funcione como servidor TSM.
 +
 +<code>
 +SErvername  TSMPRINCIPAL1
 +  COMMmethod         TCPip
 +  TCPPort            1500
 +  TCPServeraddress   10.1.1.99
 +</code>
 +
 +<code>
 +define host {
 + host_name                      server_tsm
 + alias                          TSM Server
 + address                        10.1.1.99
 + use                            plantilla_servidores
 + _TSMSERVER                      TSMPRINCIPAL1
 +}
 +</code>
 +
 +Definicion del commands.cfg para los comandos que utilizan dicha variable como argumento :
 +<code bash>
 +$USER1$/tsm/tsm_path.sh $_HOSTTSMSERVER$
 +$USER1$/tsm/tsm_disk_pool.sh $_HOSTTSMSERVER$
 +$USER1$/tsm/tsm_db_backuptime.sh $_HOSTTSMSERVER$
 +$USER1$/tsm/tsm_fulldb_backup.sh $_HOSTTSMSERVER$
 +$USER1$/tsm/tsm_schedule_errors.sh $_HOSTTSMSERVER$
 +$USER1$/tsm/tsm_occupancy.sh $_HOSTTSMSERVER$
 +$USER1$/tsmmonitor.pl $ARG1$ $ARG2$ $_HOSTTSMSERVER$
 +$USER1$/tsm/check_tsm -H $HOSTADDRESS$ -U admin -P admin $ARG1$
 +</code>
 +
 +
 +=== Highcharts for Nagios ===
 +
 +Highcharts es una librería de JavaScript para generar gráficos interactivos de líneas, área, barras, columnas, torta y muchos más. Es totalmente compatible con la mayoría de los navegadores incluyendo el Safari para iPhone y el Internet Explorer desde su versión 6. Entre sus características se destacan:
 +
 +  * Gratis para uso No-Comercial
 +  * Puro JavaScript
 +  * Sintaxis de configuración sencilla
 +  * Numerosos tipos de gráficos
 +  * Etiquetas Tooltip
 +  * Múltiples ejes
 +  * Eventos
 +  * Ejes de fecha y hora
 +  * Zooming
 +  * Carga externa de datos
 +  * Gráfico invertido o eje invertido
 +  * Rotación del texto en las etiquetas
 +
 +En este caso vamos mencionar la implementación para tomar gráficos RRD de PNP4Nagios y transformarlos en en formato AJAX de Highcharts.
 +
 +{{ :manuales:nagios:highcharts4nagios_rs.jpg }}
 +
 +{{ :manuales:nagios:highcharts4nagios_load.png }}
 +
 +Además podemos capturar datos por medio de MK LiveStatus y dibujar gráficos con dichos datos, podemos por ejemplo consultar un array en JSON y escribir las variables, por ejemplo consultamos el numero de servicios en Nagios, luego de dichos servicios cuantos estan en status OK, WARNING y CRITICAL y devolvemos en porcentaje y obtenemos este simple código, que nos va a generar un gráfico que luego podremos exportar en PNG, SVG, JPG, PDF :
 +
 +<code java>
 +            data: [{
 +                    name: 'OK',
 +                    y: 96.6,
 +     color: colors[2],
 +     url: 'http://wiki.cayu.com.ar',
 +                },{
 +                    name: 'WARNING',
 +                    y: 2.0,
 +     color: colors[6],
 +                },{
 +                    name: 'CRITICAL',
 +                    y: 1.4,
 +                    sliced: true,
 +                    selected: true,
 +     color: colors[5],
 +                },
 +</code>
 +
 +{{ :manuales:nagios:highcharts4nagios_pie.jpg }}
 +
 +Para poder configurar el módulo de exportación de los gráficos a PNG, SVG, PDF. Deberemos tener instalado en nuestro servidor el paquete http://xmlgraphics.apache.org/batik/ y luego indicar en el módulo de exportación lo siguiente :
 +<code php>
 +define ('BATIK_PATH', 'batik-1.7/batik-rasterizer.jar');
 +</code>
 +=== jVectorMap ===
 +
 +Con jVectorMap podemos dibujar mapas dinámicos vectoriales en AJAX, podemos hacer que por ejemplo al pasar el mouse por cada país por medio de datos obtenidos de MKLiveStatus muestre el estado de hosts y servicios de cada región.
 +
 +{{ :manuales:nagios:jvectormap.jpg }}
 +
 +Ejemplo muy simple :
 +
 +<code java>
 +    jQuery.noConflict();
 +    jQuery(function(){
 +      var $ = jQuery;
 +      $('#map').vectorMap({
 +        map: 'ar_mill_en',
 + hoverOpacity: 0.7,
 + hoverColor: false,
 + backgroundColor: 'transparent',
 + zoomButtons: false,
 + zoomOnScroll: false,
 +        regionStyle: {
 +        initial: {
 +    fill: '#E1AF6C'
 +        }
 + },
 + onRegionClick: function(event, code){
 +     cargar_ajax('hostgroup_info.php?code='+code+'');
 + }
 +      });
 +    })
 +</code>
 +
 +=== Extrancción de datos de los RRD de PNP4Nagios ===
 +
 +Podemos extraer los datos almacenados en los datos RRD, para luego procesarlos y mostralo en la herramienta de reportes que desarrollemos o por ejemplo, en ves de utilizar Highcharts podemos utilizar la libreria D3js o alguna otra.
 +
 +https://servidor_nagios/pnp4nagios/xport/csv?host=servidor1&srv=Load%20Linux
 +
 +timestamp;load_1_min_MIN;load_1_min_MAX;load_1_min_AVERAGE;load_5_min_MIN;load_5_min_MAX;load_5_min_AVERAGE;load_15_min_MIN;load_15_min_MAX;load_15_min_AVERAGE
 +1425027060;6.0332333333;6.0332333333;6.0332333333;5.899;5.899;5.899;5.7517666667;5.7517666667;5.7517666667
 +1425027120;6.0332333333;6.0332333333;6.0332333333;5.899;5.899;5.899;5.7517666667;5.7517666667;5.7517666667
 +1425027180;5.9871333333;5.9871333333;5.9871333333;6.2204;6.2204;6.2204;5.9390333333;5.9390333333;5.9390333333
 +1425027240;5.9871333333;5.9871333333;5.9871333333;6.2204;6.2204;6.2204;5.9390333333;5.9390333333;5.9390333333
 +.....
 +
 +https://servidor_nagios/pnp4nagios/xport/xml?host=servidor2&srv=Load%20Linux
 +<code xml>
 +.....
 +      <entry>load_1_min_MIN</entry>
 +      <entry>load_1_min_MAX</entry>
 +      <entry>load_1_min_AVERAGE</entry>
 +      <entry>load_5_min_MIN</entry>
 +      <entry>load_5_min_MAX</entry>
 +      <entry>load_5_min_AVERAGE</entry>
 +      <entry>load_15_min_MIN</entry>
 +      <entry>load_15_min_MAX</entry>
 +      <entry>load_15_min_AVERAGE</entry>
 +    </legend>
 +  </meta>
 +  <data>
 +    <row><t>1425027180</t><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v></row>
 +    <row><t>1425027240</t><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v></row>
 +    <row><t>1425027300</t><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v></row>
 +    <row><t>1425027360</t><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v></row>
 +    <row><t>1425027420</t><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>5.9871333333e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>6.2204000000e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v><v>5.9390333333e+00</v></row>
 +....
 +</code>
 +
 +https://servidor_nagios/pnp4nagios/xport/json?host=servidor3&srv=Load%20Linux
 +
 +<code>
 +{"meta":{"start":"1425027180","step":"60","end":"1425041580","rows":"241","columns":"9","legend":{"entry":["load_1_min_MIN","load_1_min_MAX","load_1_min_AVERAGE","load_5_min_MIN","load_5_min_MAX","load_5_min_AVERAGE","load_15_min_MIN","load_15_min_MAX","load_15_min_AVERAGE"]}},"data":{"row":[{"t":"1425027180","v":["5.9871333333e+00","5.9871333333e+00","5.9871333333e+00","6.2204000000e+00","6.2204000000e+00","6.2204000000e+00","5.9390333333e+00","5.9390333333e+00","5.9390333333e+00"]},{"t":"1425027240","v":["5.9871333333e+00","5.9871333333e+00","5.9871333333e+00","6.2204000000e+00","6.2204000000e+00","6.2204000000e+00","5.9390333333e+00","5.9390333333e+00","5.9390333333e+00"]},{"t":"1425027300","v":["5.9871333333e+00","5.9871333333e+00","5.9871333333e+00","6.2204000000e+00","6.2204000000e+00","6.2204000000e+00","5.9390333333e+00","5.9390333333e+00","5.9390333333e+00"]},{"t":"1425027360","v":["5.9871333333e+00","5.9871333333e+00","5.9871333333e+00","6.2204000000e+00","6.2204000000e+00","6.2204000000e+00","5.9390333333e+00","5.9390333333e+00","5.9390333333e+00"]},{"t":"1425027420","v":["5.9871333333e+00","5.9871333333e+00","5.9871333333e+00","6.2204000000e+00","6.2204000000e+00","6.2204000000e+00","5.9390333333e+00","5.9390333333e+00","5.9390333333e+00"]},{"t":"1425027480","v":
 +....
 +</code>
 +
 +=== Extrancción de datos de las imágenes de los RRD de PNP4Nagios ===
 +Si por ejemplo necesitamos embeber las imágenes de pnp4nagios dentro de por ejemplo un reporte en PDF que realizamos con algun script en este caso en PHP, podemos ver el siguiente ejemplo :
 +
 +<code php>
 +<?php
 +$HOST="srvlinux01";
 +$SERVICE="Linux Load Average";
 +$PNPURL="http://nagios.cayu.com.ar/pnp4nagios";
 +$REQUEST_URI="image?host=$HOST&srv=$SERVICE&view=1&source=0";
 +$GET="$PNPURL/".urlencode($REQUEST_URI);
 +print(file_get_contents($GET));
 +?>
 +</code>
 ==== Interfaz administrativa ==== ==== Interfaz administrativa ====
  
Línea 3436: Línea 5340:
 Al ingresar a la ubicacion de NagiosQL nos aparecera una pantalla de login, en la cual deberemos indentificarnos con el usuario que creamos al momento de la instalacion. Al ingresar a la ubicacion de NagiosQL nos aparecera una pantalla de login, en la cual deberemos indentificarnos con el usuario que creamos al momento de la instalacion.
  
-{{:manuales:nagios:nagiosql_entrada.png|}}+{{ :manuales:nagios:nagiosql_entrada.png }}
  
 Una vez ingresados al sistema, nos aparecera un menu con enlaces de uso a la izquierda, con diferentes secciones Una vez ingresados al sistema, nos aparecera un menu con enlaces de uso a la izquierda, con diferentes secciones
  
-{{:manuales:nagios:nagiosql_entrada2.png|}}+{{ :manuales:nagios:nagiosql_entrada2.png }}
  
 Dentro de la seccion supervision tendremos un resumen con el conteo de elementos Dentro de la seccion supervision tendremos un resumen con el conteo de elementos
  
-{{:manuales:nagios:nagiosql_supervision.png|}}+{{ :manuales:nagios:nagiosql_supervision.png }} 
 + 
 +**SubSección Hosts:** //Dentro de este apartado, tendremos un listado de los hosts presentes en la configuracion, indicando su estado si es activo o no, y a su vez dandonos la posibilidad de modificarlos y personalizar su modo de chequeo, alarmas etc.// 
 + 
 +**SubSección Servicios:** //Dentro de este apartado, tendremos un listado de los servicios asignados a sus correspondientes hosts, indicando su estado si es activo o no, y a su vez dandonos la posibilidad de modificarlos.// 
 + 
 +**SubSección Grupos de Hosts:** //Dentro de este apartado, tendremos un listado de los grupos de hosts, en donde queramos definir un conjunto de hosts que tengan que ver entre sí por algún servicio o alguna función que cumplan.// 
 + 
 +**SubSección Grupo de Servicios:** //Dentro de este apartado, tendremos un listado de los grupos de servicios, en donde queramos definir un conjunto de servicios que tengan que ver entre sí por alguna dependencia o que cumplan funciones parecidas.// 
 + 
 +**SubSección Plantillas de Hosts:** //Dentro de este apartado, tendremos las plantillas que utilizaremos para afectar a los hosts de manera común en lo que respecta a intervalos de alarmas/notificaciones, modo de chequeo, contactos a quienes enviar datos, agrupación, servicios asignados, auto definido como una forma centralizada de cambiar la configuración de determinado conjunto de hosts.// 
 + 
 +**SubSección Plantillas de Servicios:** //Dentro de este apartado, similar al anterior tendremos las plantillas que utilizaremos para afectar a los servicios de manera común en lo que respecta a intervalos de alarmas/notificaciones, modo de chequeo, contactos a quienes enviar datos, agrupación, hosts en cuales ejecutarse, auto definido como una forma centralizada de cambiar la configuración de determinado conjunto de servicios.// 
 + 
 + 
 + 
 +== SubSección Hosts == 
 + 
 + 
 +Al ingresar a este apartado de administración nos encontraremos con una pantalla similar a esta con la lista de hosts presentes en el sistema de monitoreo, indicándonos cuales se encuentran activos y si su configuración se encuentra actualizada con respecto a la presente en el archivo de configuración. 
 + 
 + 
 +  * Hacia su derecha podremos observar diferentes botones : 
 + 
 +{{ :manuales:nagios:botones_nagiosql.png }} 
 + 
 + 
 +**De izquierda a derecha** 
 + 
 +  * El primer botón es para acceder a la información de configuración del host, con la correspondiente posibilidad de su posterior modificación. 
 +  * El segundo botón es para copiar y así duplicar la configuración de dicho host, en caso de que tengamos un equipo con similares características al realizar esto se nos hará mucho más fácil su implementación. 
 +  * El tercer botón es para generar la escritura en la configuración de Nagios para dicho host en caso de que hayamos cambiado algo. 
 +  * El cuarto botón es para descargados el archivo con la configuración individual de dicho equipo. 
 +  * El quinto y último botón es para mostrarnos información de las relaciones de configuración de dicho equipo, si es posible borralo y no afectar otras configuraciones mostrándonos un resumen como el siguiente: 
 + 
 +{{ :manuales:nagios:boton_info_nagiosql.png }} 
 + 
 +Refiriéndonos al primer botón para proceder a editar un hosts existente o dar de alta uno nuevo, nos aparecera una pantalla como esta, donde podremos ir agregando los datos pertinentes del hosts en cuestion que necesitamos monitorear.  
 + 
 + 
 +{{ :manuales:nagios:nagiosql_supervision_hosts.png }} 
 + 
 +Al editar un host existente o dar de alta uno nuevo, nos aparecera una pantalla como esta, donde podremos ir agregando los datos pertinentes del host en cuestion que necesitamos monitorear. 
 + 
 +A su vez deberemos utilizar una plantilla, en este caso la de generic-host o podemos utilizar otra con opciones y ajustes predefinidos para el tipo de monitoreo a utilizar para esta clase de host (intervalos de chequeo, notificaciones, alarmas, dependencias, grupo de hosts). 
 + 
 + 
 +  * Como datos fundamentales tenemos: 
 + 
 +**Nombre del Host:** //Aquí definiremos el nombre real o de configuración para nosotros, sin espacios, comas, guiones ú otros caracteres que no correspondan.// 
 + 
 +**Descripción:** //Mínimo dato descriptivo de que función cumple el hosts, ejemplo ‘srvmon0002 – Servidor de monitoreo‘// 
 + 
 +**Dirección:** //Dirección IP del equipo// 
 + 
 +  * Como datos adicionales tenemos: 
 + 
 +**Padres:** //Podremos definir una lista de hosts de los que depende la ruta de llegada hacia ese determinado host dentro de la topología de red.// 
 + 
 +**Grupo de Hosts:** //Conjuntos a los cuales pertenece dicho hosts, igualmente si son muchos hosts de similares servicios que utilizan una misma plantilla, es mas practico definir este dato en ella.// 
 + 
 +**Comando de comprobación:** //Comando para ejecutar el chequeo de comprobación del hosts, igualmente si son muchos hosts de similares servicios que utilizan una misma plantilla, es mas practico definir este dato en ella.// 
 + 
 +**Activo:** //Podemos activar o desactivar de la configuración el equipo.// 
 + 
 +**$ARG1$ - $ARG8$:** //Lista de argumentos ordenados uno a uno para pasarle al comando de comprobación de dicho host.// 
 + 
 +**Plantillas:** //Plantillas de las cuales depende el host para obtener determinados datos de configuración, dichos datos contenidos en estas se pueden omitir en la configuración del host ya que se desprenden de esta.// 
 + 
 + 
 +{{ :manuales:nagios:nagiosql_supervision_host.png }} 
 + 
 +**Opciones de comprobación del Host** 
 + 
 +Aqui podemos ver las opciones generales del hosts, intervalos de chequeo, reintentos, periodo de chequeos etc. Donde dice ‘saltar’ es por que se deja esa opción a la determinada globalmente por la plantilla. 
 + 
 + 
 +{{ :manuales:nagios:nagiosql_supervision_host_ops.png }} 
 + 
 +**Estado inicial:** //Por defecto Nagios al iniciar asume que el host esta activo, pero esto no necesariamente puede ser así, entonces podemos definirlo como:// 
 + 
 +  * O = UP 
 +  * D = DOWN 
 +  * U = UNREACHABLE 
 + 
 +**Máximos intentos de comprobación:** //Máxima cantidad de intentos de comprobación antes de definir el estado final del host.// 
 + 
 +**Intervalo de reintento:** //Intervalo de reintento entre cada intento de comprobación.// 
 + 
 +**Intervalo de comprobación:** //Intervalo entre cada comprobación, incluidos sus reintentos.// 
 + 
 +**Comprobación Activa:** //Es el tipo de chequeo por defecto y más usado por Nagios, ejecutado por sí mismo con un determinado margen de tiempo para su ejecución.// 
 + 
 +**Comprobación pasiva:** //Es un chequeo ejecutado por aplicaciones externas y su resultado devuelto a Nagios para su procesamiento.// 
 + 
 +**Periodo de comprobaciones:** //Son los lapsos de tiempo en los cuales se ejecutaran los chequeos de dicho host, por ejemplo las 24 horas del día los 7 días de la semana o solo horas laborales de Lunes a Viernes.// 
 + 
 +**Umbral de refresco:** //Se utiliza en la implementación de chequeos pasivos y en entornos distribuidos para poner énfasis sobre el refresco de los datos de chequeo de un equipo.// 
 + 
 +**Refresco de comprobación:** //Activar el refresco de chequeos.// 
 + 
 +**Concentración en el equipo:** //Utilizar un comando luego de ejecutado el gestor de eventos.// 
 + 
 +**Gestor de eventos:** //Comando a ejecutarse luego de obtenidos los resultados del chequeo del host.// 
 + 
 +**Gesto de eventos activado:** //Aquí definiremos si utilizaremos o no un gestor de eventos luego de los chequeos.// 
 + 
 +**Umbral bajo de oscilación:** //Aquí definimos el umbral mínimo para considerar una detección correcta del flapping de estado (cambios de estados muy repentinos)// 
 + 
 +**Umbral alto de oscilación:** //Aquí definimos el umbral máximo para considerar una detección correcta del flapping de estado (cambios de estados muy repentinos)// 
 + 
 +**Detección de oscilación activada:** //Activar o desactivar la detección de oscilación para el host.// 
 + 
 +**Opciones de detección de estabilidad:** //Aquí definimos que estado consideramos para establecer el flapping de un host.// 
 + 
 +**Mantener información de estado:** //En caso de que reinicie Nagios, mantener la última información de estadística obtenida del chequeo del host// 
 + 
 +**Mantener el resto de la información:** //Mantener otra información útil sobre el host entre los reinicios de Nagios.// 
 + 
 +**Datos sobre el rendimiento de los procesos:** //Procesar la información de performance de los chequeos, esto es útil ya que varios plugins de chequeo y otras utilidades utilizan esta información para colección de datos.// 
 + 
 + 
 +{{ :manuales:nagios:nagiosql_supervision_host_alarm.png }} 
 + 
 + 
 +**Opciones de alarmas del host** 
 + 
 +//Desde este apartado podremos estableces las opciones de cómo llegaran las notificaciones del estado del host a personal encargado de recibirlas.// 
 + 
 + 
 +{{ :manuales:nagios:nagiosql_supervision_host_extra.png }} 
 + 
 +=== Interfaz administrativa === 
 + 
 +<note tip>NOTA PERSONAL: Desde hace algunos años no recomiendo usar NagiosQL, en su lugar recomiendo tener los archivos cfg, con la menor cantidad de líneas posibles y siempre utilizar templates para todo.</note> 
 + 
 +==== Interfaces alternativas ====
  
-Dentro de la seccion de hosts, tendremos un listado de los hosts presentes en la configuracion, indicando su estado si es activo o no, y a su vez dandonos la posibilidad de modificarlos+=== Thruk ===
  
-{{:manuales:nagios:nagiosql_supervision_hosts.png|}}+Thruk es una interfaz web para visualizar y explotar datos de Sistemas de Monitoreo, actualmente soporta Nagios, Icinga y Shinken. Añade configuracion via web, reportes SLA y una interfaz para dispositivos móviles.
  
-Al editar un hosts existente o dar de alta uno nuevo, nos aparecera una pantalla como esta, donde podremos ir agregando los datos pertinentes del hosts en cuestion que necesitamos monitorear+{{ :manuales:nagios:thruk_bp.png }}
  
-{{:manuales:nagios:nagiosql_supervision_host.png|}}+{{ :manuales:nagios:thruk_mine_map.png }}
  
-Aqui podemos ver las opciones generales del hosts, intervalos de chequeo, reintentos, periodo de chequeos etc+{{ :manuales:nagios:thruk_sla.png }}
  
-{{:manuales:nagios:nagiosql_supervision_host_ops.png|}}+{{ :manuales:nagios:thruk_panorama.png }}
  
-Dentro de este apartado podemos configurar los tipos de alarmas que enviara nagios con respecto al estado de dicho host.+{{ :manuales:nagios:thruk_mobile.jpg }}
  
-{{:manuales:nagios:nagiosql_supervision_host_alarm.png|}}+{{ :manuales:nagios:thruk_mobile1.png }}
  
-{{:manuales:nagios:nagiosql_supervision_host_extra.png|}}+Podemos tener múltiples instancias de Nagios remotas y visualizarlas todas en una única instancia de Thruk
  
 +{{ :manuales:nagios:thruk_backends.png }}
 ==== Plugins ==== ==== Plugins ====
  
Línea 3469: Línea 5510:
  
  
-^^Script detail page^Description^performance^Supported platforms^^+^Script detail page^Description^performance^Supported platforms^
 |check_snmp_storage|checks storages (disks,swap, memory, etc...)|Yes|All MIB2 compliant| |check_snmp_storage|checks storages (disks,swap, memory, etc...)|Yes|All MIB2 compliant|
 |check_snmp_int|checks interface states, usage on hosts, switch, routers, etc|Yes|All MIB2 compliant| |check_snmp_int|checks interface states, usage on hosts, switch, routers, etc|Yes|All MIB2 compliant|
Línea 3781: Línea 5822:
  14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when  14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when
  the certificate is expired.  the certificate is expired.
 +
 +
 +Ejemplo desde un script
 +
 +<code bash>
 +#!/bin/sh
 +/usr/local/nagios/libexec/check_http -H $1 -p 50000 -u /irj/portal  -A "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -k "Accept-Language: es-ES" -s "Bienvenido"
 +</code>
  
  
Línea 4245: Línea 6294:
 </code> </code>
  
 +== check_xml_url.sh ==
  
 +Esto lo necesite cuando tuve que XML de diferentes Webservices tengan la sintaxis correcta, para asi saber si habia una falla en los mismos.
 +
 +<file bash check_xml_url.sh>
 +#!/bin/bash
 +wget -q -O - --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" $1 | xmlstarlet val - 1>/dev/null 2>/dev/null
 +EXIT_STATUS=$?
 +
 +if [[ $EXIT_STATUS -eq "0" ]]; then
 +    echo "OK - La sintaxtis es correcta : $EXIT_STATUS"
 +fi
 +
 +if [[ $EXIT_STATUS -ne "0" ]]; then
 +    echo "CRITICAL - La sintaxtis no es correcta : $EXIT_STATUS"
 +fi
 +</file>
 +
 +Ejemplo de configuración :
 +<code>
 + check_command                  check_xml_url!https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl
 + check_command                  check_xml_url!https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService?wsdl
 +</code>
 +
 +== check_xml_afip.php ==
 +
 +En Argentina tenemos un servicio de Factura Electronica, si queremos verificar su status, deberemos consumir este WebService https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService/dummy , del cual obtendremos esta respuesta que debemos parsear :
 +
 +<code xml>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<ns1:dummyResponse xmlns:ns1="http://impl.service.wsmtxca.afip.gov.ar/service/">
 +   <appserver>OK</appserver>
 +   <authserver>OK</authserver>
 +   <dbserver>OK</dbserver>
 +</ns1:dummyResponse>
 +</code>
 +
 +<file php check_xml_afip.php>
 +#!/usr/bin/php
 +<?php
 +/*
 +SimpleXMLElement Object
 +(
 +    [appserver] => OK
 +    [authserver] => OK
 +    [dbserver] => OK
 +)
 +*/
 +$xml_cae_dummy = simplexml_load_file('https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService/dummy');
 +
 +$appserver_status = $xml_cae_dummy->appserver;
 +$authserver_status = $xml_cae_dummy->authserver;
 +$dbserver_status = $xml_cae_dummy->dbserver;
 +
 +if (($appserver_status == 'OK') && ($authserver_status == 'OK') && ($dbserver_status == 'OK')) {
 +    print("OK - [appserver] ".$appserver_status." [authserver] ".$authserver_status." [dbserver] ".$dbserver_status."|rc=0\n");
 +    exit(0);
 +} else {
 +    print("CRITICAL - [appserver] ".$appserver_status." [authserver] ".$authserver_status." [dbserver] ".$dbserver_status."|rc=2\n");
 +    exit(2);
 +}
 +?>
 +</file>
 +
 +En Python
 +<file python check_xml_afip.php>
 +#!/usr/bin/python
 +import errno, sys, urllib2
 +from xml.etree.ElementTree import XML
 +
 +response = urllib2.urlopen('https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService/dummy')
 +xml_afip = XML(response.read())
 +
 +dummy_afip = {}
 +contador = 0
 +
 +for elem in xml_afip:
 +    dummy_afip[elem.tag]=elem.text
 +    if elem.text != 'OK':
 +     if contador <= 0:
 + contador = 1
 +     else:
 + contador = 1
 +
 +if contador != 1:
 +    print "OK - ",dummy_afip,"|rc=0"
 +    sys.exit(0)
 +else:
 +    print "CRITICAL - ",dummy_afip,"|rc=1"
 +    sys.exit(1)
 +</file>
 +
 +== check_nfe_status ==
 +
 +En Brasil se utiliza la Nota Fiscal eletrônica, este plug esta en desarrollo. Por eso no lo publico, hay un desarrollo en java para realizar estos chequeo : http://www.vivaolinux.com.br/dica/Plugin-NFe-2.00-Nagios
 +
 +**Referencias útiles de NFE**
 +
 +  * Portal Principal
 +    * http://www.nfe.fazenda.gov.br/portal/principal.aspx
 +
 +  * Mapa de disponibilidad de servicio
 +    * http://www.nfe.fazenda.gov.br/portal/disponibilidade.aspx?versao=2.00&tipoConteudo=Skeuqr8PQBY=
 +
 +  * https://www.fazenda.sp.gov.br/nfe/url_webservices/url_webservices.asp
 +  * https://www.fazenda.sp.gov.br/nfe/
 +  * https://www.fazenda.sp.gov.br/email/default_nfe.asp
 +
 +
 +== check_heartbeat ==
 +
 +Script simple para chequear el estado de HeartBeat y sus nodos, muy útil por cierto
 +
 +<file bash check_heartbeat>
 +#!/bin/bash
 +# Author: Emmanuel Bretelle
 +# Date: 12/03/2010
 +# Description: Retrieve Linux HA cluster status using cl_status
 +# Based on http://www.randombugs.com/linux/howto-monitor-linux-heartbeat-snmp.html 
 +#
 +# Autor: Stanila Constantin Adrian
 +# Date: 20/03/2009
 +# Description: Check the number of active heartbeats
 +# http://www.randombugs.com
 +
 +# Get program path
 +REVISION=1.3
 +PROGNAME=`/bin/basename $0`
 +PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
 +
 +NODE_NAME=`uname -n`
 +CL_ST='/usr/bin/cl_status'
 +
 +#nagios error codes
 +#. $PROGPATH/utils.sh 
 +OK=0
 +WARNING=1
 +CRITICAL=2
 +UNKNOWN=3
 +
 +usage () {
 +    echo "\
 +Nagios plugin to heartbeat.
 +
 +Usage:
 +  $PROGNAME 
 +  $PROGNAME [--help | -h]
 +  $PROGNAME [--version | -v]
 +
 +Options:
 +  --help -l Print this help information
 +  --version -v  Print version of plugin
 +"
 +}
 +
 +help () {
 +    print_revision $PROGNAME $REVISION
 +    echo; usage; echo; support
 +}
 +
 +
 +while test -n "$1"
 +do
 +  case "$1" in
 +    --help | -h)
 +      help
 +      exit $STATE_OK;;
 +    --version | -v)
 +      print_revision $PROGNAME $REVISION
 +      exit $STATE_OK;;
 +#    -H)
 +#      shift
 +#      HOST=$1;;
 +#    -C)
 +#      shift
 +#      COMMUNITY=$1;;
 +    *)
 +      echo "Heartbeat UNKNOWN: Wrong command usage"; exit $UNKNOWN;;
 +  esac
 +  shift
 +done
 +
 +$CL_ST hbstatus > /dev/null
 +res=$?
 +if [ $res -ne 0 ]
 +then
 +  echo "Heartbeat CRITICAL: Heartbeat is not running on this node"
 +  exit $CRITICAL
 +fi
 +
 +declare -i I=0
 +declare -i A=0
 +NODES=`$CL_ST listnodes`
 +
 +for node in $NODES
 +do
 +  status=`$CL_ST nodestatus $node`
 +  let I=$I+1
 +  if [ $status == "active" ]
 +  then
 +    let A=$A+1
 +  fi
 +done
 +
 +if [ $A -eq 0 ]
 +then
 +  echo "Heartbeat CRITICAL: $A/$I"
 +  exit $CRITICAL
 +elif [ $A -ne $I ]
 +then
 +  echo "Heartbeat WARNING: $A/$I"
 +  exit $WARNING
 +else
 +  echo "Heartbeat OK: $A/$I"
 +  exit $OK
 +fi
 +</code>
 +
 +<code>
 +define command {
 + command_name    check_ha_by_ssh
 + command_line    $USER1$/check_by_ssh -l root -H $HOSTADDRESS$ -C "/usr/local/sbin/check_heartbeat.sh"
 +}
 +</file>
 +
 +== check_systemimager ==
 +
 +Script para chequear que nuestras imágenes estén actualizadas a la fecha
 +
 +<file php check_systemimager>
 +#!/usr/bin/php -q
 +# Sergio Cayuqueo <cayu@cayu.com.ar>
 +# http://cayu.com.ar
 +<?php
 +$lista_imagenes = shell_exec("si_lsimage --verbose|grep Image");
 +$lista_imagenes = preg_split("/[\n]+/",$lista_imagenes);
 +$fecha_actual = date('Y.m.d');
 +foreach($lista_imagenes as $imagen) {
 +    if(strlen($imagen)>0) {
 + if(@!$i) {
 +     $i=1;
 + }
 + $imagen = preg_split("/[\s]+/",$imagen);
 + $imagenes[$i]['nombre'] = $imagen[2];
 + $imagenes[$i]['actualizada'] = $imagen[4];
 + $imagenes[$i]['ip'] = $imagen[8];
 + if($imagen[4] == $fecha_actual) {
 +     $imagenes[$i]['estado'] = "ok" ;
 + } else {
 +     $imagenes[$i]['estado'] = "critical" ;
 +            $critical=1;
 + }
 + $i++;
 +    }
 +}
 +
 +if(@$critical) {
 +    $head = "CRITICAL - Hubo un desfasaje en una o mas imagenes\n";
 +    $exit = 2;
 +} else {
 +    $head = "OK - Todas las imagenes actualizadas a la fecha\n";
 +    $exit = 0;
 +}
 +print $head;
 +foreach($imagenes as $imagen) {
 +    if(strlen($imagen['nombre'])<9) {
 + $tab = "\t\t";
 +    } else {
 + $tab = "\t";
 +    }
 +    if($imagen['estado'] == "ok") {
 + print "OK - ".$imagen['nombre']." ".$tab.$imagen['ip']."\n";
 +    } else {
 +        print "CRITICAL - ".$imagen['nombre']."   ".$tab.$imagen['ip']." \t actualizado a : ".$imagen['actualizada']."\n";
 +    }
 +}
 +exit($exit);
 +?>
 +</file>
 +
 +
 +<code>
 +define command {
 + command_name    check_si_by_ssh
 + command_line    $USER1$/check_by_ssh -l root -H $HOSTADDRESS$ -C "/usr/local/sbin/check_systemimager.php"
 +}
 +</code>
 +
 +== check_dba_2pc_pending ==
 +
 +Chequeo de //Distributed transactions// de Oracle, por medio de SSH.
 +
 +<file perl check_dba_2pc_pending>
 +#!/usr/bin/perl
 +
 +open(SQLPLUS_SELECT, "sqlplus -S \"/ as sysdba\" @/usr/local/bin/dba_2pc_pending_select.sql |") or die "No puedo ejecutar: $!";
 +while (<SQLPLUS_SELECT>) {
 +    chomp($_);
 +    if(length($_)>1) {
 +        $select = $_;
 +    }
 +}
 +close SQLPLUS_SELECT;
 +
 +if($select == "no rows selected") {
 +    print "OK - Resultado : ".$select." | pending=0;\n";
 +    exit 0;
 +} else {
 +open(SQLPLUS_DELETE, "echo \"execute sys.dbms_transaction.purge_lost_db_entry('".$select."');\"|sqlplus -S \"/ as sysdba\" |") or die "No puedo ejecutar: $!";
 +    while (<SQLPLUS_DELETE>) {
 + chomp($_);
 + if(length($_)>1) {
 +        $delete = $_;
 + }
 +    }
 +    close SQLPLUS_DELETE;
 +    print "WARNING - Resultado : ".$select." : ".$delete." | pending=1;\n";
 +    exit 1;
 +}
 +</file>
 +
 +El script sql
 +
 +<code sql>
 +set pagesize 0
 +set trimspool on
 +set headsep off
 +select LOCAL_TRAN_ID from dba_2pc_pending;
 +exit;
 +</code>
 +
 +El check_command en la configuracion del servicio
 +
 +<code>
 +check_by_ssh!sudo su - oracle -c /usr/local/bin/dba_2pc_pending.pl
 +</code>
 +
 +El sudoers del equipo a monitorear
 +
 +<code>
 +monitoreo ALL = NOPASSWD: /bin/su - oracle -c /usr/local/bin/dba_2pc_pending.pl
 +</code>
 +
 +== check_microstrategy ==
 +
 +Chequear que el servicio de MicroStrategy este corriendo
 +
 +<code>
 +define command {
 +        command_name                    check_microstrategy
 +        command_line                    $USER1$/check_microstrategy.sh $HOSTADDRESS$
 +        register                        1
 +}    
 +</code>
 +
 +<code>
 +define service {
 +        service_description             Servicio MicroStrategy
 +        use                             generic-service
 +        check_command                   check_microstrategy
 +        max_check_attempts              1
 +        check_interval                  1
 +        retry_interval                  1
 +        active_checks_enabled           1
 +        check_period                    24x7
 +        notification_period             24x7
 +        notification_options            r,c
 +        notifications_enabled           1
 +        register                        1
 +}       
 +</code>
 +
 +**check_microstrategy.sh**
 +
 +<file bash check_microstrategy.sh>
 +#!/bin/sh
 +SALIDA_SSH=`ssh $1 -l monitoreo "sudo /msis/var/opt/MicroStrategy/bin/mstrctl -s IntelligenceServer gs | grep state|  sed 's/<[^>]*[>]//g' | sed 's/\t//g' | sed 's/\n//g'"`
 +if [ $SALIDA_SSH="running" ]
 +then
 +    echo "OK - Proceso MicroStrategy corriendo"
 +    exit 0;
 +else
 +    echo "CRITICAL - Hay un problema con el proceso MicroStrategy"
 +fi
 +</file>
 +
 +En perl
 +<file perl check_microstrategy.pl>
 +#!/usr/bin/perl
 +
 +open SSH, ("ssh ".$ARGV[0]." -l monitoreo \"sudo /msis/var/opt/MicroStrategy/bin/mstrctl -s IntelligenceServer gs\" | grep state|  sed 's/<[^>]*[>]//g' | sed 's/\\t//g' | sed 's/\\n//g'|");
 +
 +while ( defined( my $line = <SSH> )  ) {
 +    chomp($line);
 +    if ($line eq "running") {
 + print "OK - Proceso MicroStrategy corriendo (".$line.")\n";
 + exit 0;
 +    } else {
 + print "CRITICAL - Hay un problema con el proceso MicroStrategy (".$line.")\n";
 + exit 2;
 +  }
 +}
 +close SSH;
 +</file>
 +
 +**count_archlogs.pl**
 +
 +<file perl count_archlogs.pl>
 +#!/usr/bin/perl
 +use strict;
 +use warnings;
 +
 +my $ORACLE_SID=$ARGV[0];
 +
 +sub get_sorted_files {
 +   my $path = shift;
 +   opendir my($dir), $path or die "no puedo abrir $path: $!";
 +   my %hash = map {$_ => (stat($_))[9] || undef} # saltar listas vacias
 +    map  { "$path$_" }
 +    grep { m/.dbf/i }
 +    readdir $dir;
 +    closedir $dir;
 +    return %hash;
 +}
 +
 +my %files = get_sorted_files("/oracle/arclog/".$ORACLE_SID."/");
 +my $count = keys %files;
 +
 +if($count < 60) {
 +    print "OK - Encontrados $count redo logs en /oracle/arclog/".$ORACLE_SID."/|'redologs'=$count\n";
 +    exit 0;
 +} else {
 +    print "CRITICAL - Encontrados $count redo logs en /oracle/arclog/".$ORACLE_SID."/|'redologs'=$count\n";
 +    exit 2;
 +}
 +</file>
 +
 +**select_count.sh**
 +
 +Si necesito alertar cuando crecen X registros en una tabla Oracle, en el dia de hoy
 +se puede ejecutar esto :
 +
 +<code bash>
 +echo -e "set head off\nset pagesize 0\nSELECT COUNT(DATA) FROM APPREG.DATA WHERE DATA = TO_DATE(SYSDATE,'DD/MM/YY');" |  sqlplus -S "/ as sysdba" | awk '/^[ 0-9\.\t ]+$/ {print int($1)}'
 +</code>
 +
 +Dentro de un script quedaria asi :
 +
 +<file bash bash select_count.sh>
 +#!/bin/bash
 +# Chequear registros en Tabla y alertar al llegar al limite
 +CONTEO=`echo -e "set head off\nset pagesize 0\nSELECT COUNT(DATA) FROM APPREG.DATA WHERE DATA = TO_DATE(SYSDATE,'DD/MM/YY');" |  sqlplus -S "/ as sysdba" | awk '/^[ 0-9\.\t ]+$/ {print int($1)}'`
 +LIMITE=5
 + 
 +if [[ "$CONTEO" -ge "$LIMITE" ]]
 +then
 +    echo "CRITICAL - Hay $CONTEO registros";
 +    exit 2;
 +else
 +    echo "OK - Hay $CONTEO registros";
 +    exit 0;
 +fi
 +</file>
 +
 +O para conocer el estado de los tablespaces en Oracle
 +
 +<file bash bash check_DATABASE_STATUS.sh>
 +DATABASE_STATUS=`echo -e "set head off\nset pagesize 0\nSELECT status, database_status FROM v\\$instance;" |  sqlplus -S "/ as sysdba"| cut -f1`
 +
 +case "$DATABASE_STATUS" in
 +        MOUNTED)
 +            start
 +            echo "CRITICAL - Los tablespaces de la base de datos estan $DATABASE_STATUS -" `date '+DATE: %m/%d/%y TIME:%H:%M:%S'`
 +            exit 2;
 +            ;;
 +        OPEN)
 +            echo "OK - Los tablespaces de la base de datos estan $DATABASE_STATUS -" `date '+DATE: %m/%d/%y TIME:%H:%M:%S'`
 +            exit 1;
 +            ;;
 +        *)
 +            echo "CRITICAL - Hay algun error con la base de datos $DATABASE_STATUS -" `date '+DATE: %m/%d/%y TIME:%H:%M:%S'`
 +            exit 2;
 +esac
 +</file>
 +
 +**check_snmp_ifstatus_v3.pl**
 +
 +Version modificada por mi del script check_snmp_ifstatus.pl para que pueda consultar por medio de snmp v3
 +
 +{{:manuales:nagios:check_snmp_ifstatus_v3.tgz|}}
 +
 +**check_oracle_tablespace.sh**
 +
 +Version modificada por mi del script check_oracle_tablespace.sh para no tener que usar oratab y conectarse con el sqlplus sin necesidad de tnsnames.ora, ademas soporta perfdata para graficarla en pnp4nagios
 +
 +Ej ./check_oracle_tablespace.sh  -s SID  -H 10.1.1.98 -P 1521 -w 91 -c 96 
 +
 +Si se quiere saltear un tablespace, ej el **UNDO** agregamos al final de la query :
 +<code sql>
 +and fs.TABLESPACE_NAME NOT LIKE '%UNDO%'
 +</code>
 +
 +FIXME Tengo que agregar una opción para agregarle a la linea de comandos que sea ignorar table space
 +
 +{{:manuales:nagios:check_oracle_tablespace.sh.gz|}}
 +
 +**ssl-cert-check.sh**
 +
 +Script para chequear validez del certificados SSL
 +
 +<code>
 +ssl-cert-check.sh -c Certificado.crt -n -x 60
 +</code>
 +
 +{{:manuales:ssl-cert-check.sh.gz|}}
  
 == Notas importantes == == Notas importantes ==
Línea 4273: Línea 6836:
 ///usr/local/nagios// ///usr/local/nagios//
  
 +==== Sitios de consultas ====
 +
 +**Sitios de donde descargar plugins y agregados para Nagios**
 +
 +  * Paquete Standard de plugins
 +    http://nagiosplug.sourceforge.net/
 +
 +  * Plugins con soporte SNMP          
 +    http://nagios.manubulon.com/
 +
 +  * Plugins SAP CCMS      
 +    http://sourceforge.net/projects/nagios-sap-ccms/
 +
 +  * Interfaz alternativa de Nagios para visualizar en BlackBerry
 +    http://nagiosmobile.sourceforge.net/
 +
 +  * Plugins para chequeos en BlackBerry    
 +    http://www.1ight.fr/plugins/BlackBerry/
 +
 +  * Plugins de chequeo de Lotus Notes   
 +    http://barbich.net/
 +
 +  * Servidor de proyectos Nagios, plugins, templates etc en etapa de desarrollo
 +    http://www.nagiosforge.org/
 +
 +  * Servidor de proyectos Nagios, plugins, templates etc
 +    http://www.nagiosexchange.org
 +
 +  * Agregado de chequeo de eventos Nagios para firefox
 +    https://addons.mozilla.org/en-US/firefox/addon/3607 \\ http://code.google.com/p/nagioschecker/
 +
 +  * Visor de sucesos para el escritorio (Linux, Windows)
 +    http://sourceforge.net/projects/nagstamon
 +
 +**Sitios generales sobre funcionamiento de redes y protocolos**
 +
 +  * Wiki de Redes de Comunicaciones II - Universidad de Madrid
 +    http://ariadna.ii.uam.es/wiki/wiki_rc2/doku.php
 +
 +  * Un ensayo con contenidos conceptuales
 +    http://www.monografias.com/trabajos95/recursos-red-y-su-monitoreo/recursos-red-y-su-monitoreo.shtml
 +
 +  * Explicación teórica clara sobre como //[[manuales:nagios&#analisis_de_costos_y_relacion_con_disponibilidad_de_servicio_-_sla|Calcular el coste por caída de Servicio]]//
 +    http://www.cantabriatic.com/calcular-el-coste-por-caida-de-servicio/
 +
 +  * Como elaborar um SLA (The Service Level Agreement) - Acordo de Nível de Serviço
 +    http://www.tiespecialistas.com.br/2011/01/como-elaborar-um-sla-the-service-level-agreement/
 +
 +=== Lugares donde fue citado como referencia el presente documento ===
 +
 +TESIS //Sistema de monitoreo y control de redes inalámbricas para optimización del servicio de Internet en la empresa Intercompu
 +Ailaca Ramírez, Carlos Vinicio//
 +
 +http://repo.uta.edu.ec/handle/123456789/442 \\
 +http://repo.uta.edu.ec/bitstream/handle/123456789/442/Tesis_t655ec.pdf?sequence=1
 +
 +TESIS //Implementación de NOC para el monitoreo de Servicios e Infraestructura de Redes para el Banco de Loja, basado en Software Libre, Solís Álvarez
 +, Camilo Javier//
 +
 +http://dspace.utpl.edu.ec/bitstream/123456789/9187/1/SOLIS%20ALVAREZ%20CAMILO%20JAVIER%2028-03-2014.pdf
 +
 +TESIS //GESTIÓN Y MONITOREO DE UN LABORATORIO CON HERRAMIENTAS OPEN SOURCE, Ramos Galicia, Juan Christian//
 +
 +http://132.248.52.100:8080/xmlui/bitstream/handle/132.248.52.100/2815/Tesis.pdf?sequence=1 \\
 +http://www.ptolomeo.unam.mx:8080/xmlui/handle/132.248.52.100/2815
 +
 +TESIS //Implementación de un sistema de monitorización para la división de ingenierías civil y geomática utilizando la herramienta Nagios//
 +
 +http://www.ptolomeo.unam.mx:8080/xmlui/bitstream/handle/132.248.52.100/4445/Tesis.pdf?sequence=1 \\
 +http://www.ptolomeo.unam.mx:8080/xmlui/handle/132.248.52.100/4445
 +
 +//signa - Sistema Integral de Gestión y Notificación de Alarmas//
 +
 +http://signa.googlecode.com/svn/trunk/entrega2/anexos/Anexo%20F%20-%20Descripci%C3%B3n%20de%20los%20Sistemas%20Finalistas.doc \\
 +https://code.google.com/p/signa/
 +
 +
 +TRABAJO DE GRADO PREVIO A LA OBTENCIÓN DEL TÍTULO DE INGENIERÍA EN ELECTRÓNICA Y REDES DE COMUNICACIÓN \\
 +OPTIMIZACIÓN DE LA ADMINISTRACIÓN EN LA RED DE DATOS DE LA UNIVERSIDAD TÉCNICA DEL NORTE IMPLEMENTANDO UN SISTEMA DE MONITOREO DE EQUIPOS Y SERVICIOS UTILIZANDO SOFTWARE LIBRE \\
 +
 +http://repositorio.utn.edu.ec/handle/123456789/4466 \\
 +http://repositorio.utn.edu.ec/bitstream/123456789/4466/1/04%20RED%20055%20TESIS.pdf \\
  
  
 ==== Notas ==== ==== Notas ====
  
- --- //Sergio Cayuqueo 2009/05/29 01:08//+Inicio del documento Junio de 2007 y a lo largo del tiempo le fui agregando cosas que descubri en mi trabajo 
 + 
 +<del>Recientemente agregué algunas correciones al 29 de Marzo de 2011</del> 
 + 
 +<del>Recientemente agregué algunas correciones al 04 de Abril de 2012</del> 
 + 
 +<del>Recientemente agregó contenido al 07 de Diciembre de 2012</del> 
 + 
 +Este documento se puede utilizar libremente, lo único que pido es que citen la fuente si van a utilizarlo en obras derivadas 
 + 
 +Si están leyendo este documento desde un pdf u odt, puede encontrar los archivos adjuntos en su fuente original 
 + 
 +{{:varios:argentina.gif| }} http://wiki.cayu.com.ar/doku.php?id=manuales:nagios 
 + 
 +Actualmente estoy trabajando por escribir una versión en Portugues (va algo lenta la traducción) y posiblemente comienze otra en Italiano : 
 + 
 +{{:varios:portugal.png| }} {{:varios:brazil.png| }} http://wiki.cayu.com.ar/doku.php?id=manuales:nagios:portugues 
 + 
 +{{:varios:italia.gif| }} http://wiki.cayu.com.ar/doku.php?id=manuales:nagios:italiano 
 + 
 +{{:varios:mapuche.png| }} Tengo la intención tambien de armar documentación técnica en lengua Mapuche para poder practicar y estudiar la implementación de Neologismos en Mapuche sin afectar la lengua y además sin atarme a un grafemario en particular. 
 + 
 +https://github.com/cayu/nagios-scripts Aquí voy a ir subiendo scripts y configuraciones 
 + 
 +Pueden encontrar mas sobre mi o hacerme consultas via http://cayu.com.ar 
 + 
 +<note>Este documento constituye una referencia para los administradores del sistema de 
 +monitoreo Nagios, y no tiene por objeto reemplazar a los manuales provistos con el 
 +producto. Es sumamente recomendable efectuar lectura previa de dichos manuales para 
 +poder comprender los conceptos utilizados en este documento, así como para realizar 
 +cualquier tarea de administración sobre el sistema. 
 +</note> 
 + 
 +**RECOMIENDO BAJAR LA VERSION EN ODT ES UN POCO MAS CÓMODA PARA LEER, YA QUE CUANDO CAMBIE EL THEME DE DOKUWIKI VÍA WEB LAS DIFERENCIAS DE LOS TIPOS DE TÍTULOS NO SON TAN NOTORIAS Y ES COMPLICADO POR EJEMPLO DIFERENCIAR UN TITULO2 DE UN TITULO3 ETC.** 
 + 
 + 
 + --- //[[http://cayu.com.ar|Sergio Cayuqueo]] 2014/10/27 16:51//
  
  ~~ODT~~  ~~ODT~~
manuales/nagios.1259863529.txt.gz · Última modificación: 2009/12/03 18:05 por cayu