manuales:nagios
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| manuales:nagios [2009/12/03 18:05] – cayu | manuales: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, | + | {{ : |
| + | {{ : | ||
| - | Para prevenir errores en un sistema | + | Las redes de cómputo de las organizaciones, |
| + | |||
| + | Para prevenir errores en un sistema podemos utilizar | ||
| 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. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | {{ : | ||
| 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//, // | + | 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/ |
| + | 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 |
| + | |||
| + | **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, | ||
| + | |||
| + | **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: | ||
| + | * **Proactiva: | ||
| + | |||
| + | |||
| + | 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, | ||
| + | |||
| + | 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, | ||
| + | * Las ubicaciones geográficas y direcciones | ||
| + | * Estado general de las instalaciones. | ||
| + | * Los costos por servicios informáticos y de comunicaciones (Ej.: mantenimiento de hardware o software, comunicaciones, | ||
| + | |||
| + | === 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 | ||
| + | * 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, | ||
| + | |||
| + | === 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á | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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, | ||
| + | * Servicios varios (aire acondicionado del datacenter, suministro eléctrio etc). | ||
| + | |||
| + | Cada uno de los ítems relevados deberá ser prorrateado | ||
| + | |||
| + | En otras situaciones, | ||
| + | |||
| + | === 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 | ||
| + | * 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. | ||
| + | </ | ||
| + | |||
| + | === Estimación de porcentaje de disponibilidad de servicio === | ||
| + | |||
| + | Hay variadas formas de calcular la **disponibilidad de servicio** : | ||
| + | |||
| + | === Ejemplo de cálculo SLA === | ||
| + | |||
| + | < | ||
| + | **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, | ||
| + | * 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, | ||
| + | |||
| + | **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. | ||
| + | </ | ||
| + | |||
| + | === 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. | ||
| + | |||
| + | < | ||
| + | |||
| + | * **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, | ||
| + | |||
| + | * **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, | ||
| + | |||
| + | //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, | ||
| + | |||
| + | === 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, | ||
| + | |||
| + | |||
| + | ==== 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, | ||
| + | - 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, | ||
| + | - 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”, | ||
| + | * 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 | ||
| + | |||
| + | === 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 | ||
| + | * Mejorando la Gestion de capacidad, estando directamente conectado con el processo de ITIL “Capacity Management” | ||
| + | |||
| + | **Ciclo de un incidente** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Administracion de la capacidad** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | == 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> | ||
| + | <note important> | ||
| + | < | ||
| + | |||
| + | === 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, | ||
| + | * 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, | ||
| ===== 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 |
| * 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, | * Diseño simple de plugins, que permiten a los usuarios desarrollar sus propios chequeos de servicios dependiendo de sus necesidades, | ||
| 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 | + | * Posibilidad de definir |
| * 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 | ||
| * 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/ | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | === 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 | ||
| + | |||
| + | < | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | === 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, | ||
| + | * 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, | ||
| + | * 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, | ||
| + | |||
| ====== 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:// | |Perl|Interprete para el lenguaje de script Perl|http:// | ||
| |Net:: | |Net:: | ||
| |Crypt:: | |Crypt:: | ||
| + | |Digest:: | ||
| + | |Digest:: | ||
| |RRDTool|Utilitario para generación de gráficas de red y además\\ su módulo de integración con el lenguaje Perl|http:// | |RRDTool|Utilitario para generación de gráficas de red y además\\ su módulo de integración con el lenguaje Perl|http:// | ||
| |Zlib|Librería de compresión utilizada por las utilidades graficas|http:// | |Zlib|Librería de compresión utilizada por las utilidades graficas|http:// | ||
| Línea 125: | Línea 587: | ||
| |Syslog-Ng|Logueo de eventos del sistema|http:// | |Syslog-Ng|Logueo de eventos del sistema|http:// | ||
| |SNARE|Agente Syslog para clientes Windows|http:// | |SNARE|Agente Syslog para clientes Windows|http:// | ||
| + | |MK Livestatus|Aditivo para obtener los datos de Nagios \\ en Vivo via Socket (muy útil para abandonar NDO)|http:// | ||
| + | |Gnokii|Aplicación de interfaz para celulares y modems 3G, \\ para la realización de llamadas y alertas SMS|http:// | ||
| + | |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:// | ||
| + | |Check TSM|Plugin para hacer chequeos generales en Tivoli TSM|https:// | ||
| + | |Check Iostat|Estadisticas y alertas en base a los datos de iostat|http:// | ||
| + | |Cliente Oracle\\ Basic\\ SQL*Plus|Cliente de Oracle para realizar los chequeos|http:// | ||
| + | |Eventdb|Integración de chequeos de Syslog|https:// | ||
| + | |Highchart for Nagios|Gráficos de PNP4Nagios en AJAX |http:// | ||
| + | Nota: | ||
| + | |||
| + | Hay algunos plugins que no estan mas disponibles en su sitio, aca los incluyo | ||
| + | |||
| + | {{: | ||
| ==== 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 |
| < | < | ||
| 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` ); | ||
| + | </ | ||
| + | |||
| + | === 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, | ||
| + | |||
| + | * 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, | ||
| + | * Livestatus escalas bastante bien a las grandes instalaciones, | ||
| + | * 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 | ||
| + | |||
| + | < | ||
| + | root@linux# wget ' | ||
| + | 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... / | ||
| + | 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: | ||
| + | config.status: | ||
| + | config.status: | ||
| + | config.status: | ||
| + | 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 `/ | ||
| + | make[2]: Entering directory `/ | ||
| + | test -z "/ | ||
| + | / | ||
| + | test -z "/ | ||
| + | / | ||
| + | | ||
| + | /bin/sh / | ||
| + | / | ||
| + | rm -f / | ||
| + | make[2]: Leaving directory `/ | ||
| + | make[1]: Leaving directory `/ | ||
| + | make[1]: Entering directory `/ | ||
| + | make[2]: Entering directory `/ | ||
| + | make[2]: Nothing to be done for `install-exec-am' | ||
| + | make[2]: Nothing to be done for `install-data-am' | ||
| + | make[2]: Leaving directory `/ | ||
| + | make[1]: Leaving directory `/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | Despues tenemos que especificar que Nagios cargue el archivo objeto compilado // | ||
| + | |||
| + | < | ||
| + | broker_module=/ | ||
| + | event_broker_options=-1 | ||
| + | </ | ||
| + | |||
| + | Y dentro del log de Nagios vamos a ver algo similar a esto | ||
| + | |||
| + | < | ||
| + | [1256144866] livestatus: Version 1.1.2 initializing. Socket path: '/ | ||
| + | / | ||
| + | [1256144866] livestatus: Created UNIX control socket at / | ||
| + | live | ||
| + | [1256144866] livestatus: Opened UNIX socket / | ||
| + | [1256144866] livestatus: successfully finished initialization | ||
| + | [1256144866] Event broker module '/ | ||
| + | ed successfully. | ||
| + | [1256144866] Finished daemonizing... (New PID=5363) | ||
| + | [1256144866] livestatus: Starting 10 client threads | ||
| + | [1256144866] livestatus: Entering main loop, listening on UNIX socket | ||
| + | </ | ||
| + | |||
| + | |||
| + | 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' | ||
| + | |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 | ||
| + | |||
| + | < | ||
| + | broker_module=/ | ||
| + | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | < | ||
| + | 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/ | ||
| + | instances | ||
| + | # limit the maximum number of simultaneous connections from | ||
| + | # one source IP address | ||
| + | per_source | ||
| + | # Disable TCP delay, makes connection more responsive | ||
| + | flags | ||
| + | user = nagios | ||
| + | server = / | ||
| + | server_args | ||
| + | # configure the IP address(es) of your Nagios server here: | ||
| + | # | ||
| + | disable = no | ||
| + | } | ||
| + | </ | ||
| === 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. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| 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 // | ||
| + | |||
| + | <code html> | ||
| + | <table class=" | ||
| + | < | ||
| + | < | ||
| + | <!-- BEGIN service --> | ||
| + | < | ||
| + | <!-- END service --> | ||
| + | < | ||
| + | <!-- BEGIN host --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <!-- END host --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <!-- BEGIN service --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <!-- END service --> | ||
| + | <!-- BEGIN childs --> | ||
| + | < | ||
| + | < | ||
| + | <table width=" | ||
| + | < | ||
| + | <!-- BEGIN servicegroup -->< | ||
| + | </ | ||
| + | <!-- BEGIN loop_child --> | ||
| + | < | ||
| + | <!-- END loop_child --> | ||
| + | </ | ||
| + | </ | ||
| + | <!-- END childs --> | ||
| + | </ | ||
| + | </ | ||
| === 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: | + | {{ :manuales: |
| + | {{ : | ||
| + | |||
| + | 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 : | ||
| + | < | ||
| + | apt-get install snmptt | ||
| + | </ | ||
| + | |||
| + | |||
| + | **/ | ||
| + | < | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | **/ | ||
| + | < | ||
| + | EVENT linkDown .1.3.6.1.6.3.1.1.5.3 " | ||
| + | </ | ||
| + | |||
| + | **/ | ||
| + | < | ||
| + | disableAuthorization yes | ||
| + | traphandle default / | ||
| + | </ | ||
| + | |||
| + | Configuración de permisos : | ||
| + | <code bash> | ||
| + | usermod -a -G nagios snmptt | ||
| + | </ | ||
| + | |||
| + | **/ | ||
| + | < | ||
| + | TRAPDRUN=yes | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | category VARCHAR(20), | ||
| + | severity VARCHAR(20), | ||
| + | uptime | ||
| + | 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 | ||
| + | uptime | ||
| + | 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); | ||
| + | </ | ||
| + | |||
| + | Reiniciamos los servicios SNMP : | ||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Ref.: http:// | ||
| ==== Apache ==== | ==== Apache ==== | ||
| Línea 1004: | Línea 1865: | ||
| daemon_directory = / | daemon_directory = / | ||
| 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 | + | {{ : |
| - | **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.// | ||
| < | < | ||
| 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 | ||
| </ | </ | ||
| - | |||
| - | **commands.cfg** | ||
| < | < | ||
| define command { | define command { | ||
| - | | + | command_name |
| - | command_line | + | |
| } | } | ||
| define command { | define command { | ||
| - | | + | command_name |
| - | command_line | + | |
| } | } | ||
| </ | </ | ||
| - | **Modo | + | **Modo |
| + | |||
| + | |||
| + | |||
| + | //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** | ||
| + | |||
| + | < | ||
| + | define command{ | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | define command{ | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | **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 | ||
| </ | </ | ||
| - | |||
| - | **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 " | ||
| - | * **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: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | Y luego ejecutar : | ||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === 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 " | ||
| + | * **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 | + | <note tip> |
| + | |||
| + | 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.</ | ||
| Línea 1156: | Línea 2043: | ||
| **Para los hosts** | **Para los hosts** | ||
| < | < | ||
| - | action_url /nagios/pnp/ | + | action_url /pnp4nagios/index.php/graph? |
| </ | </ | ||
| **Para los servicios** | **Para los servicios** | ||
| < | < | ||
| - | action_url /nagios/pnp/ | + | action_url /pnp4nagios/index.php/graph? |
| </ | </ | ||
| + | {{ : | ||
| + | |||
| + | {{: | ||
| ==== 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:// | ||
| + | |||
| + | |||
| + | 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", | ||
| + | |||
| + | == Algunas consultas ICMP === | ||
| + | |||
| + | |||
| + | Los mensajes de query incluyen tras la cabecera 2 bytes de identificación, | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | Veamos un ejemplo de la salida del programa ping. | ||
| + | |||
| + | < | ||
| + | PING virtuamanager.com (213.194.149.188) 56(84) bytes of data. | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | 64 bytes from virtuamanager.com (213.194.149.188): | ||
| + | |||
| + | --- virtuamanager.com ping statistics --- | ||
| + | 7 packets transmitted, | ||
| + | rtt min/ | ||
| + | </ | ||
| + | |||
| + | == 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: | ||
| + | * // | ||
| + | Otro ejemplo, al intentar hacer ping al otro equipo de la red, que está apagado, se obtiene lo siguiente: | ||
| + | < | ||
| + | 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, | ||
| + | , pipe 3</ | ||
| + | |||
| + | 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. | ||
| + | * // | ||
| + | * // | ||
| + | * //**Time Exceeded**//: | ||
| + | |||
| + | |||
| + | |||
| + | === 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): | ||
| + | * **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, | ||
| + | * 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), | ||
| + | * Descripción: | ||
| + | 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. | ||
| + | |||
| + | * Grupo system: Descripción de la entidad, identificador, | ||
| + | * 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, | ||
| + | * 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, | ||
| + | Posteriormente, | ||
| + | |||
| + | |||
| **SNMPv1** | **SNMPv1** | ||
| Línea 1202: | Línea 2217: | ||
| //snmpget -v 3 -u nagios | //snmpget -v 3 -u nagios | ||
| + | |||
| + | **TIPS** | ||
| NOTA: En Debian deberemos editar el archivo /// | NOTA: En Debian deberemos editar el archivo /// | ||
| 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 // | ||
| + | |||
| + | < | ||
| + | skipNFSInHostResources yes | ||
| + | </ | ||
| + | |||
| + | == Agregar variables a SNMP == | ||
| + | |||
| + | Por ejemplo si queremos obtener desde SNMP la información de un script | ||
| + | |||
| + | **/ | ||
| + | <code bash> | ||
| + | echo " | ||
| + | echo " | ||
| + | </ | ||
| + | |||
| + | En el snmpd.conf le agregamos la siguiente configuración: | ||
| + | |||
| + | < | ||
| + | exec .1.3.6.1.4.1.2021.555 /bin/sh / | ||
| + | </ | ||
| + | |||
| + | Si corremos esta consulta **snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.555** | ||
| + | Obtendremos : | ||
| + | < | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | UCD-SNMP-MIB:: | ||
| + | </ | ||
| **SNMPv1 en Windows** | **SNMPv1 en Windows** | ||
| Línea 1258: | Línea 2310: | ||
| + | Ref.: http:// | ||
| + | |||
| + | === NRPE === | ||
| + | |||
| + | === NSClient++ === | ||
| + | |||
| + | <file ini nsclient.ini> | ||
| + | [/ | ||
| + | check_pagefile=" | ||
| + | </ | ||
| + | {{ : | ||
| ==== 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, | Para que el Nagios envíe notificaciones sobre el estado de los servicios es necesario definir grupos a los cuales enviárselas, | ||
| 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}/ | //Se deberá crear el archivo {nagios-dir}/ | ||
| + | |||
| + | === 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 : | ||
| + | |||
| + | {{: | ||
| + | |||
| + | === 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 = / | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | Modo de uso : | ||
| + | |||
| + | **echo "Hola mundo" | sudo gnokii --sendsms 1155667798** | ||
| + | |||
| + | Definición como comando de notificación, | ||
| + | |||
| + | 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. | ||
| + | |||
| + | < | ||
| + | define command { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | define command { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | {{ : | ||
| + | {{: | ||
| ==== Agregando Comandos ==== | ==== Agregando Comandos ==== | ||
| Línea 1746: | Línea 2871: | ||
| < | < | ||
| define hostgroup { | define hostgroup { | ||
| - | hostgroup_name | + | hostgroup_name |
| - | alias | + | alias |
| - | members | + | members |
| } | } | ||
| </ | </ | ||
| 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}/ | //Se deberá crear el archivo {nagios-dir}/ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| ==== Agregando Hosts ==== | ==== Agregando Hosts ==== | ||
| Línea 2160: | Línea 3275: | ||
| </ | </ | ||
| + | ==== 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/ | |1|WARNING|UP/ | ||
| 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 |
| + | |||
| + | <code perl> | ||
| + | # | ||
| + | use strict; | ||
| + | use warnings; | ||
| + | use Net::SNMP; | ||
| + | |||
| + | my $OID_sysUpTime = ' | ||
| + | |||
| + | my ($session, $error) = Net:: | ||
| + | -hostname | ||
| + | -community => shift || ' | ||
| + | ); | ||
| + | |||
| + | if (!defined $session) { | ||
| + | printf " | ||
| + | exit 1; | ||
| + | } | ||
| + | |||
| + | my $result = $session-> | ||
| + | |||
| + | if (!defined $result) { | ||
| + | printf " | ||
| + | $session-> | ||
| + | exit 1; | ||
| + | } | ||
| + | |||
| + | printf "The sysUpTime for host ' | ||
| + | $session-> | ||
| + | |||
| + | $session-> | ||
| + | |||
| + | exit 0; | ||
| + | </ | ||
| + | |||
| + | 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: | ||
| </ | </ | ||
| - | == Plugin consultando | + | === Ejemplo de consulta de un puerto TCP con Perl por medio de IO:: |
| + | |||
| + | **check_port.pl $HOSTADDRESS$ $ARG1$** | ||
| + | |||
| + | <code perl> | ||
| + | # | ||
| + | |||
| + | use IO:: | ||
| + | my $IP = $ARGV[0]; | ||
| + | my $PORT = $ARGV[1]; | ||
| + | my $STATUS = " | ||
| + | my $sock = new IO:: | ||
| + | | ||
| + | | ||
| + | Proto => ' | ||
| + | ); | ||
| + | $sock or $STATUS = " | ||
| + | |||
| + | 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; | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === Ejemplo de consultas | ||
| 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('', | ||
| + | ELT(nagios_statehistory.state+1,' | ||
| + | CONCAT('', | ||
| + | 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=' | ||
| + | AND nagios_statehistory.state_type = 1 | ||
| + | AND DATE_FORMAT(nagios_statehistory.state_time,' | ||
| + | GROUP BY | ||
| + | TEMPS, ETAT | ||
| + | ORDER BY | ||
| + | DATE_FORMAT(nagios_statehistory.state_time,' | ||
| + | </ | ||
| + | |||
| + | 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;// | ||
| + | </ | ||
| + | |||
| + | 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, | ||
| + | from nagios.nagios_objects as obj | ||
| + | where obj.object_id not in | ||
| + | (select object_id from last_state); | ||
| + | </ | ||
| + | |||
| + | |||
| 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, | 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, | ||
| Línea 2684: | Línea 3923: | ||
| - | {{: | + | {{ : |
| 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, | 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, | ||
| Línea 2690: | Línea 3929: | ||
| - | ===== Tareas | + | ==== Tareas ==== |
| - | Se instalo el software syslog-ng dentro de un servidor Debian | + | Se instalo el software syslog-ng dentro de un servidor Debian. |
| < | < | ||
| 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( " | ||
| + | }; | ||
| + | filter | ||
| - | **/ | + | filter f_auth { |
| + | facility(auth, | ||
| + | }; | ||
| + | log { | ||
| + | source(src); | ||
| + | filter(f_auth); | ||
| + | destination(syslog_server); | ||
| + | }; | ||
| - | // | + | log { |
| + | source(src); | ||
| + | filter(f_local6); | ||
| + | destination(syslog_server); | ||
| + | }; | ||
| + | </file> | ||
| - | <code> | + | **syslog.conf** |
| - | auth.*; | + | <file ini syslog.conf> |
| - | </code> | + | auth.*; |
| + | local6.* | ||
| + | </file> | ||
| + | **/ | ||
| - | **/ | + | <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. | |
| - | < | + | </ |
| - | destination df_auth { tcp( {ip syslog} port(514) ); }; | + | < |
| - | filter f_auth { facility(auth, authpriv); }; | + | export PROMPT_COMMAND=' |
| - | log { source(src); filter(f_auth); | + | |
| </ | </ | ||
| - | |||
| - | |||
| ==== Configuración del Servidor ==== | ==== Configuración del Servidor ==== | ||
| Línea 2743: | Línea 4000: | ||
| options { | options { | ||
| long_hostnames(off); | long_hostnames(off); | ||
| + | # doesn' | ||
| 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 | ||
| + | # | ||
| + | # 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. | ||
| + | # 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 { | ||
| - | | ||
| - | | ||
| - | ); | ||
| - | }; | ||
| - | 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("/ | unix-stream("/ | ||
| + | # messages from the kernel | ||
| file("/ | file("/ | ||
| }; | }; | ||
| - | destination | + | # Create |
| - | destination | + | destination |
| - | 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: |
| - | destination df_kern { file("/ | + | |
| - | destination df_lpr { file("/ | + | |
| - | destination df_mail { file("/ | + | |
| - | destination df_user { file("/ | + | |
| - | destination df_uucp { file("/ | + | |
| - | + | ||
| - | destination df_facility_dot_info { file("/ | + | |
| - | destination df_facility_dot_notice { file("/ | + | |
| - | destination df_facility_dot_warn { file("/ | + | |
| - | destination df_facility_dot_err { file("/ | + | |
| - | destination df_facility_dot_crit { file("/ | + | |
| - | + | ||
| - | destination df_news_dot_notice { file("/ | + | |
| - | destination df_news_dot_err { file("/ | + | |
| - | destination df_news_dot_crit { file("/ | + | |
| - | + | ||
| - | destination df_debug { file("/ | + | |
| - | destination df_messages { file("/ | + | |
| - | + | ||
| - | destination dp_xconsole { pipe("/ | + | |
| - | + | ||
| - | destination du_all { usertty(" | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | filter f_auth { facility(auth, | + | |
| - | + | ||
| - | filter f_syslog { not facility(auth, | + | |
| - | + | ||
| - | 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, | + | |
| - | + | ||
| - | filter f_messages { | + | |
| - | level(info, | + | |
| - | and not facility(auth, | + | |
| }; | }; | ||
| - | + | source externo | |
| - | filter f_emerg | + | # use the following line if you want to receive remote UDP logging messages |
| - | + | # | |
| - | filter f_xconsole { | + | |
| - | facility(daemon,mail) | + | udp(ip(0.0.0.0) port(514)); |
| - | | + | |
| - | | + | |
| - | and level(crit, | + | |
| }; | }; | ||
| - | + | # Tell syslog-ng to log to our new destination | |
| - | + | ||
| log { | log { | ||
| - | | + | |
| - | | + | destination(d_logzilla); |
| - | | + | |
| }; | }; | ||
| - | log { | + | # Alertas de Nagios Eventdb |
| - | source(interno); | + | |
| - | filter(f_syslog); | + | |
| - | destination(df_syslog); | + | |
| - | }; | + | |
| - | + | destination d_eventdb | |
| - | log { | + | pipe( |
| - | | + | |
| - | | + | template(" |
| - | | + | |
| + | | ||
| }; | }; | ||
| log { | log { | ||
| - | source(interno); | + | |
| - | 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 { | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | ); | + | |
| - | }; | + | |
| - | filter f_at_least_warn { | + | |
| - | | + | |
| - | }; | + | |
| - | log { | + | |
| - | source(externo); | + | |
| - | filter(f_at_least_warn); | + | |
| - | destination(d_eventdb); | + | |
| }; | }; | ||
| </ | </ | ||
| Línea 3000: | Línea 4096: | ||
| {{: | {{: | ||
| + | ==== Eventdb ==== | ||
| - | ===== Referencias ===== | + | === ¿Que es Eventdb? |
| - | Sitios | + | EventDB es una herramienta para facilitar el tratamiento |
| - | * Paquete Standard de plugins | + | === ¿Cómo funciona? === |
| - | http:// | + | |
| - | * Plugins con soporte SNMP | + | El EventDB toma los eventos recibidos y los almacena en una base de datos MySQL. Se 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:// | + | |
| - | * Plugins SAP CCMS | ||
| - | http:// | ||
| - | * Interfaz alternativa de Nagios para visualizar en BlackBerry | + | {{:manuales: |
| - | http:// | + | ===== Referencias ===== |
| - | * Plugins para chequeos en BlackBerry | + | ==== TIP´s varios ==== |
| - | http:// | + | |
| - | | + | **Sobre performance** |
| - | http:// | + | |
| - | + | ||
| - | | + | |
| - | http:// | + | |
| - | + | ||
| - | | + | |
| - | http:// | + | |
| - | + | ||
| - | | + | |
| - | https:// | + | |
| - | + | ||
| - | * Visor de sucesos para el escritorio (Linux, Windows) | + | |
| - | http:// | + | |
| - | + | ||
| - | ==== TIP´s varios ==== | + | |
| - | * Sobre performance | ||
| * Compilar Nagios y NDO con optimizaciones para nuestro procesador | * Compilar Nagios y NDO con optimizaciones para nuestro procesador | ||
| http:// | http:// | ||
| Línea 3055: | Línea 4131: | ||
| child_processes_fork_twice=1 | child_processes_fork_twice=1 | ||
| - | Configuración | + | Configuración |
| 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, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | < | ||
| + | Program Running Time: 0d 5h 20m 39s | ||
| + | Nagios PID: 10119 | ||
| + | Used/ | ||
| + | Used/ | ||
| + | |||
| + | Total Services: | ||
| + | Services Checked: | ||
| + | Services Scheduled: | ||
| + | Services Actively Checked: | ||
| + | Services Passively Checked: | ||
| + | Total Service State Change: | ||
| + | Active Service Latency: | ||
| + | Active Service Execution Time: 0.000 / 60.007 / 2.066 sec | ||
| + | Active Service State Change: | ||
| + | Active Services Last 1/5/15/60 min: 4 / 68 / 91 / 91 | ||
| + | Passive Service State Change: | ||
| + | Passive Services Last 1/5/15/60 min: 0 / 0 / 0 / 0 | ||
| + | Services Ok/ | ||
| + | Services Flapping: | ||
| + | Services In Downtime: | ||
| + | |||
| + | Total Hosts: | ||
| + | Hosts Checked: | ||
| + | Hosts Scheduled: | ||
| + | Hosts Actively Checked: | ||
| + | Host Passively Checked: | ||
| + | |||
| + | Total Host State Change: | ||
| + | Active Host Latency: | ||
| + | Active Host Execution Time: 1.019 / 10.034 / 2.764 sec | ||
| + | Active Host State Change: | ||
| + | Active Hosts Last 1/5/15/60 min: 5 / 22 / 24 / 24 | ||
| + | Passive Host State Change: | ||
| + | Passive Hosts Last 1/5/15/60 min: 0 / 0 / 0 / 0 | ||
| + | Hosts Up/ | ||
| + | Hosts Flapping: | ||
| + | Hosts In Downtime: | ||
| + | |||
| + | Active Host Checks Last 1/5/15 min: 9 / 52 / 164 | ||
| + | | ||
| + | | ||
| + | | ||
| + | Passive Host Checks Last 1/5/15 min: 0 / 0 / 0 | ||
| + | Active Service Checks Last 1/5/15 min: 9 / 80 / 244 | ||
| + | | ||
| + | | ||
| + | | ||
| + | Passive Service Checks Last 1/5/15 min: 0 / 0 / 0 | ||
| + | External Commands Last 1/5/15 min: 0 / 0 / 0 | ||
| + | </ | ||
| + | |||
| + | **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”), | ||
| + | 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=60 | max_eventhandlers_age=60 | ||
| + | </ | ||
| + | |||
| + | |||
| + | 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. | ||
| + | |||
| + | < | ||
| + | mysqlcheck –-auto-repair nagios nagios_servicechecks; | ||
| </ | </ | ||
| Línea 3152: | Línea 4311: | ||
| - | === Scripts | + | === Scripts |
| 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:: | cpan> install Nagios:: | ||
| + | </ | ||
| + | |||
| + | Ejemplo de uso de Nagios:: | ||
| + | |||
| + | <code perl> | ||
| + | use Nagios:: | ||
| + | my $x = Nagios:: | ||
| + | or die " | ||
| + | my @these_fields = qw( | ||
| + | HOST_NAME | ||
| + | PERCENT_TOTAL_TIME_UP | ||
| + | ) ; | ||
| + | $x-> | ||
| + | \@these_fields, | ||
| + | # All records | ||
| + | # sub { 1 }, | ||
| + | # All records whose HOST_NAME starts with ' | ||
| + | # sub { my %F = @_; my $h = $F{HOST_NAME}; | ||
| + | # Regrettably, | ||
| + | # @_ 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:: | ||
| + | # eg by TOTAL_DOWN_TIME descending. | ||
| + | # sub { my %f = @_ ; | ||
| + | # | ||
| + | # | ||
| + | # }, | ||
| + | # Same as | ||
| + | # & | ||
| + | # Same but harder, | ||
| + | # sub { package Nagios:: | ||
| + | # Optional callback to add or mangle fields. | ||
| + | # Add 2 fields for downtime vals in hours minutes and secs. | ||
| + | sub { | ||
| + | $F = shift @_; | ||
| + | $F-> | ||
| + | $F-> | ||
| + | $F-> | ||
| + | $F-> | ||
| + | qw(TIME_UP_HHMMSS TIME_DOWN_HHMMSS TIME_UNREACH_HHMMSS) | ||
| + | } | ||
| + | ) ; | ||
| + | $x-> | ||
| + | </ | ||
| + | |||
| + | 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> | ||
| + | # | ||
| + | my $o_hoststate | ||
| + | # Nagios monitored host check output data | ||
| + | my $o_hostoutput | ||
| + | # Nagios date when the event was recorded | ||
| + | my $o_datetime | ||
| + | # The recipients defined in $CONTACTEMAIL$ | ||
| + | my $o_to_recipients | ||
| + | use Data:: | ||
| + | print "< | ||
| + | print Dumper(%ENV); | ||
| + | print "</ | ||
| + | </ | ||
| + | |||
| + | Ejemplo de mk_livestatus | ||
| + | |||
| + | <code python> | ||
| + | # | ||
| + | # | ||
| + | # Sample program for accessing the Livestatus Module | ||
| + | # from a python program | ||
| + | socket_path = "/ | ||
| + | |||
| + | import socket | ||
| + | s = socket.socket(socket.AF_UNIX, | ||
| + | s.connect(socket_path) | ||
| + | |||
| + | # Write command to socket | ||
| + | s.send(" | ||
| + | |||
| + | # 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(';' | ||
| + | |||
| + | print table | ||
| + | </ | ||
| + | |||
| + | Llamando al socket directamente desde PHP. | ||
| + | |||
| + | <code php> | ||
| + | $data_address=" | ||
| + | $query=" | ||
| + | $fp = fsockopen($data_address, | ||
| + | if (!$fp) { | ||
| + | echo " | ||
| + | } else { | ||
| + | $returnval = ""; | ||
| + | fwrite($fp, | ||
| + | while (!feof($fp)) { | ||
| + | $returnval = $returnval.fgets($fp, | ||
| + | # print $returnval; | ||
| + | } | ||
| + | fclose($fp); | ||
| + | if ($returnval == "[] ") | ||
| + | $returnval = ""; | ||
| + | } | ||
| + | print_r(json_decode($returnval, | ||
| + | </ | ||
| + | |||
| + | Llamando al socket indirectamente desde PHP utilizando // | ||
| + | |||
| + | Ejemplo de como obtener la lista de equipos y su estado desde php y exportarlo a formato CSV | ||
| + | |||
| + | <code php> | ||
| + | $lista_servidores = shell_exec("/ | ||
| + | $lista_hosts = str_getcsv($lista_servidores, | ||
| + | </ | ||
| + | |||
| + | Convertir el timestamp de nagios.log a human readable | ||
| + | |||
| + | < | ||
| + | tail -f nagios.log | perl -pe ' | ||
| + | </ | ||
| + | |||
| + | **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** | ||
| + | |||
| + | < | ||
| + | # cat / | ||
| </ | </ | ||
| Línea 3221: | Línea 4543: | ||
| </ | </ | ||
| - | ^^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: | ||
| </ | </ | ||
| + | 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("/ | ||
| + | $lista_hosts = str_getcsv($lista_servidores, | ||
| + | echo "< | ||
| + | <div class=' | ||
| + | <table class=' | ||
| + | < | ||
| + | "; | ||
| + | |||
| + | foreach ($lista_hosts as $host) { | ||
| + | $host = explode(";", | ||
| + | print "< | ||
| + | print "<a href=' | ||
| + | print "</ | ||
| + | print $host[' | ||
| + | print "</ | ||
| + | print $host[' | ||
| + | print "</ | ||
| + | if($host[' | ||
| + | if($host[' | ||
| + | if($host[' | ||
| + | print "</ | ||
| + | print "< | ||
| + | } | ||
| + | |||
| + | echo "</ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 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(" | ||
| + | if(!($con = ssh2_connect(" | ||
| + | echo "No puedo establecer una conexion SSH\n"; | ||
| + | } else { | ||
| + | if (ssh2_auth_pubkey_file($con, | ||
| + | '/ | ||
| + | '/ | ||
| + | // echo " | ||
| + | } else { | ||
| + | die(' | ||
| + | } | ||
| + | if (!($stream = ssh2_exec($con, | ||
| + | echo "fail: unable to execute command\n"; | ||
| + | } else { | ||
| + | // collect returning data from command | ||
| + | stream_set_blocking($stream, | ||
| + | $data = ""; | ||
| + | while ($buf = fread($stream, | ||
| + | $data .= $buf; | ||
| + | } | ||
| + | fclose($stream); | ||
| + | print $data; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <file perl dokuwiki_archlogs.pl> | ||
| + | !/ | ||
| + | use strict; | ||
| + | use warnings; | ||
| + | |||
| + | sub get_sorted_files { | ||
| + | my $path = shift; | ||
| + | | ||
| + | my %hash = map {$_ => (stat($_))[9] || undef} # saltar listas vacias | ||
| + | map { " | ||
| + | grep { m/.dbf/i } | ||
| + | readdir $dir; | ||
| + | closedir $dir; | ||
| + | return %hash; | ||
| + | } | ||
| + | |||
| + | my %files = get_sorted_files("/ | ||
| + | print " | ||
| + | <table class=' | ||
| + | < | ||
| + | foreach my $key (sort{$files{$a} <=> $files{$b}} keys %files) { | ||
| + | my $filename = $key; | ||
| + | $filename =~ s/\.\///g; | ||
| + | $filename =~ s/\.\.//g; | ||
| + | print "< | ||
| + | } | ||
| + | print "</ | ||
| + | </ | ||
| + | |||
| + | 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(' | ||
| + | # | ||
| + | define(' | ||
| + | require_once(DOKU_INC.' | ||
| + | require_once(DOKU_INC.' | ||
| + | require_once(DOKU_INC.' | ||
| + | require_once(DOKU_INC.' | ||
| + | require_once(DOKU_INC.' | ||
| + | |||
| + | function p_file_xhtml($id, | ||
| + | if(@file_exists($id)) return p_cached_output($id,' | ||
| + | return p_wiki_xhtml($id, | ||
| + | } | ||
| + | |||
| + | if($_GET[' | ||
| + | echo p_file_xhtml($_GET[' | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | === Plugins interesantes === | ||
| **check_multiaddr** | **check_multiaddr** | ||
| Línea 3365: | Línea 4804: | ||
| Con lo cual el utilitario // | Con lo cual el utilitario // | ||
| + | |||
| + | Adjunto : check_multiaddr y una version alternativa basada en el mismo código | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| **apache** | **apache** | ||
| Línea 3378: | Línea 4823: | ||
| </ | </ | ||
| + | |||
| + | **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 / | ||
| + | |||
| + | * **agnt_mon.h** | ||
| + | <code c> | ||
| + | #define AGENT_INI_FILE “/ | ||
| + | #define AGENT_LOGIN_FILE “/ | ||
| + | #define AG_EZ_FILE “/ | ||
| + | </ | ||
| + | * **sap_moni_ccm.h** | ||
| + | <code c> | ||
| + | #define AGENT_INI_FILE “/ | ||
| + | #define AGENT_LOGIN_FILE “/ | ||
| + | </ | ||
| + | |||
| + | Archivo /// | ||
| + | |||
| + | <code ini> | ||
| + | [LOGIN_PRD] | ||
| + | LOGIN=-d PRD -u nagios -p password -c 300 -h 10.1.1.90 -s 00 | ||
| + | </ | ||
| + | |||
| + | Archivo /// | ||
| + | |||
| + | **DESCRIPTION** = < | ||
| + | **MONI_SET_NAME** = <Monitor collection> | ||
| + | **MONI_NAME** = <Monitor name> | ||
| + | **MAX_TREE_DEPTH** = < | ||
| + | **PATTERN_0** = < | ||
| + | |||
| + | <code ini> | ||
| + | [TEMPLATE_00] | ||
| + | DESCRIPTION=" | ||
| + | MONI_SET_NAME=SAP CCMS Admin Workplace | ||
| + | MONI_NAME=" | ||
| + | MAX_TREE_DEPTH=0 | ||
| + | PATTERN_0=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_01] | ||
| + | MONI_SET_NAME=SAP CCMS Admin Workplace | ||
| + | MONI_NAME=" | ||
| + | MAX_TREE_DEPTH=0 | ||
| + | PATTERN_2=" | ||
| + | |||
| + | [TEMPLATE_02] | ||
| + | VALUE=DIALOG_RESPONSE_TIME | ||
| + | |||
| + | [TEMPLATE_03] | ||
| + | SYSTEM=BCE | ||
| + | APPL-SERVER=bcemain* | ||
| + | VALUE=DIALOG_RESPONSE_TIME | ||
| + | |||
| + | [TEMPLATE_04] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | |||
| + | [TEMPLATE_05] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_005] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_06] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_07] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | # Standard SAP Templates | ||
| + | [TEMPLATE_99] | ||
| + | VALUE=CHECK_SAP_SYSTEMS | ||
| + | |||
| + | [TEMPLATE_105] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_110] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_200] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_210] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_300] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_999] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_060] | ||
| + | # | ||
| + | MONI_SET_NAME=SAP CCMS Admin Workplace | ||
| + | MONI_NAME=" | ||
| + | # | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [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=" | ||
| + | MONI_SET_NAME=SAP CCMS Monitors for Optional Components | ||
| + | MONI_NAME=" | ||
| + | MAX_TREE_DEPTH=0 | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_007] | ||
| + | DESCRIPTION=" | ||
| + | MONI_SET_NAME=SAP CCMS Monitors for Optional Components | ||
| + | MONI_NAME=" | ||
| + | MAX_TREE_DEPTH=0 | ||
| + | PATTERN_0=" | ||
| + | |||
| + | |||
| + | [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=" | ||
| + | MONI_NAME=" | ||
| + | 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=" | ||
| + | |||
| + | [TEMPLATE_875] | ||
| + | DESCRIPTION=Java | ||
| + | MONI_SET_NAME=Test J2EE Monitor Set | ||
| + | MONI_NAME=J2EE Engine Kernel | ||
| + | PATTERN_0=" | ||
| + | |||
| + | |||
| + | [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 | ||
| + | PATTERN_0 | ||
| + | |||
| + | [TEMPLATE_668] | ||
| + | MONI_SET_NAME = "SAP CCMS Technical Expert Monitors" | ||
| + | MONI_NAME | ||
| + | PATTERN_0 | ||
| + | |||
| + | |||
| + | [TEMPLATE_471] | ||
| + | MONI_SET_NAME = "SAP CCMS Technical Expert Monitors" | ||
| + | MONI_NAME | ||
| + | PATTERN_0 | ||
| + | |||
| + | # Monitorear Extended memory en application Server | ||
| + | [TEMPLATE_784] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_785] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_786] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | # Monitorear Extended memory en Central Instance | ||
| + | [TEMPLATE_787] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | |||
| + | [TEMPLATE_666] | ||
| + | MONI_SET_NAME = "SID - Monitor" | ||
| + | MONI_NAME | ||
| + | PATTERN_0 | ||
| + | |||
| + | [TEMPLATE_670] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | </ | ||
| + | |||
| + | Si queremos agregar en CCMS el monitoreo de X jobs debemos seguir esta guia http:// | ||
| + | |||
| + | <code ini> | ||
| + | # Monitoreo de Delay + Runtime de X job | ||
| + | [TEMPLATE_234] | ||
| + | MONI_SET_NAME=" | ||
| + | MONI_NAME=" | ||
| + | PATTERN_0=" | ||
| + | </ | ||
| + | |||
| + | Ejemplo de como podemos definir el comando en Nagios : | ||
| + | < | ||
| + | define command { | ||
| + | command_name | ||
| + | command_line | ||
| + | register | ||
| + | } | ||
| + | |||
| + | define command { | ||
| + | command_name | ||
| + | command_line | ||
| + | register | ||
| + | } | ||
| + | </ | ||
| + | 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=`/ | ||
| + | EXIT=$? | ||
| + | echo $CMD | /bin/sed -e ' | ||
| + | exit $EXIT | ||
| + | </ | ||
| + | |||
| + | Para poder hacer correctamente el chequeo deberemos defini la variable **$_HOSTSAPID$** dentro de la configuración del host : | ||
| + | < | ||
| + | _SAPID | ||
| + | </ | ||
| + | |||
| + | **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 | ||
| + | < | ||
| + | check_sap | ||
| + | </ | ||
| + | https:// | ||
| + | |||
| + | **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. | ||
| + | |||
| + | < | ||
| + | SErvername | ||
| + | COMMmethod | ||
| + | TCPPort | ||
| + | TCPServeraddress | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | define host { | ||
| + | host_name | ||
| + | alias | ||
| + | address | ||
| + | use plantilla_servidores | ||
| + | _TSMSERVER | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Definicion del commands.cfg para los comandos que utilizan dicha variable como argumento : | ||
| + | <code bash> | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | $USER1$/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | === 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. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 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: ' | ||
| + | y: 96.6, | ||
| + | color: colors[2], | ||
| + | url: ' | ||
| + | },{ | ||
| + | name: ' | ||
| + | y: 2.0, | ||
| + | color: colors[6], | ||
| + | },{ | ||
| + | name: ' | ||
| + | y: 1.4, | ||
| + | sliced: true, | ||
| + | selected: true, | ||
| + | color: colors[5], | ||
| + | }, | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 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:// | ||
| + | <code php> | ||
| + | define (' | ||
| + | </ | ||
| + | === 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. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Ejemplo muy simple : | ||
| + | |||
| + | <code java> | ||
| + | jQuery.noConflict(); | ||
| + | jQuery(function(){ | ||
| + | var $ = jQuery; | ||
| + | $('# | ||
| + | map: ' | ||
| + | hoverOpacity: | ||
| + | hoverColor: | ||
| + | backgroundColor: | ||
| + | zoomButtons: | ||
| + | zoomOnScroll: | ||
| + | regionStyle: | ||
| + | initial: { | ||
| + | fill: '# | ||
| + | } | ||
| + | }, | ||
| + | onRegionClick: | ||
| + | cargar_ajax(' | ||
| + | } | ||
| + | }); | ||
| + | }) | ||
| + | </ | ||
| + | |||
| + | === 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:// | ||
| + | |||
| + | timestamp; | ||
| + | 1425027060; | ||
| + | 1425027120; | ||
| + | 1425027180; | ||
| + | 1425027240; | ||
| + | ..... | ||
| + | |||
| + | https:// | ||
| + | <code xml> | ||
| + | ..... | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | < | ||
| + | {" | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | === 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=" | ||
| + | $SERVICE=" | ||
| + | $PNPURL=" | ||
| + | $REQUEST_URI=" | ||
| + | $GET=" | ||
| + | print(file_get_contents($GET)); | ||
| + | ?> | ||
| + | </ | ||
| ==== 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. | ||
| - | {{: | + | {{ : |
| 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 | ||
| - | {{: | + | {{ : |
| 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 | ||
| - | {{: | + | {{ : |
| + | |||
| + | **SubSección Hosts:** //Dentro de este apartado, tendremos un listado de los hosts presentes en la configuracion, | ||
| + | |||
| + | **SubSección Servicios: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **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/ | ||
| + | |||
| + | **SubSección Plantillas 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 : | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | **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: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 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. | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | 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, | ||
| + | |||
| + | |||
| + | * 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: | ||
| + | |||
| + | **Dirección: | ||
| + | |||
| + | * 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: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | **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. | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **Intervalo de reintento: | ||
| + | |||
| + | **Intervalo de comprobación: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **Umbral alto de oscilación: | ||
| + | |||
| + | **Detección de oscilación activada:** //Activar o desactivar la detección de oscilación para el host.// | ||
| + | |||
| + | **Opciones de detección de estabilidad: | ||
| + | |||
| + | **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: | ||
| + | |||
| + | **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.// | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | **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.// | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | === 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.</ | ||
| + | |||
| + | ==== Interfaces alternativas ==== | ||
| - | Dentro de la seccion de hosts, tendremos un listado de los hosts presentes en la configuracion, | + | === Thruk === |
| - | {{: | + | 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 | + | {{ : |
| - | {{: | + | {{ : |
| - | Aqui podemos ver las opciones generales del hosts, intervalos de chequeo, reintentos, periodo de chequeos etc | + | {{ : |
| - | {{: | + | {{ : |
| - | Dentro de este apartado podemos configurar los tipos de alarmas que enviara | + | {{ :manuales:nagios: |
| - | {{: | + | {{ : |
| - | {{: | + | Podemos tener múltiples instancias de Nagios remotas y visualizarlas todas en una única instancia de Thruk |
| + | {{ : | ||
| ==== 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, | |check_snmp_storage|checks storages (disks, | ||
| |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 | ||
| + | / | ||
| + | </ | ||
| Línea 4245: | Línea 6294: | ||
| </ | </ | ||
| + | == 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=" | ||
| + | EXIT_STATUS=$? | ||
| + | |||
| + | if [[ $EXIT_STATUS -eq " | ||
| + | echo "OK - La sintaxtis es correcta : $EXIT_STATUS" | ||
| + | fi | ||
| + | |||
| + | if [[ $EXIT_STATUS -ne " | ||
| + | echo " | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | Ejemplo de configuración : | ||
| + | < | ||
| + | check_command | ||
| + | check_command | ||
| + | </ | ||
| + | |||
| + | == check_xml_afip.php == | ||
| + | |||
| + | En Argentina tenemos un servicio de Factura Electronica, | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <file php check_xml_afip.php> | ||
| + | # | ||
| + | <?php | ||
| + | /* | ||
| + | SimpleXMLElement Object | ||
| + | ( | ||
| + | [appserver] => OK | ||
| + | [authserver] => OK | ||
| + | [dbserver] => OK | ||
| + | ) | ||
| + | */ | ||
| + | $xml_cae_dummy = simplexml_load_file(' | ||
| + | |||
| + | $appserver_status = $xml_cae_dummy-> | ||
| + | $authserver_status = $xml_cae_dummy-> | ||
| + | $dbserver_status = $xml_cae_dummy-> | ||
| + | |||
| + | if (($appserver_status == ' | ||
| + | print(" | ||
| + | exit(0); | ||
| + | } else { | ||
| + | print(" | ||
| + | exit(2); | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | En Python | ||
| + | <file python check_xml_afip.php> | ||
| + | # | ||
| + | import errno, sys, urllib2 | ||
| + | from xml.etree.ElementTree import XML | ||
| + | |||
| + | response = urllib2.urlopen(' | ||
| + | xml_afip = XML(response.read()) | ||
| + | |||
| + | dummy_afip = {} | ||
| + | contador = 0 | ||
| + | |||
| + | for elem in xml_afip: | ||
| + | dummy_afip[elem.tag]=elem.text | ||
| + | if elem.text != ' | ||
| + | if contador <= 0: | ||
| + | contador = 1 | ||
| + | else: | ||
| + | contador = 1 | ||
| + | |||
| + | if contador != 1: | ||
| + | print "OK - ", | ||
| + | sys.exit(0) | ||
| + | else: | ||
| + | print " | ||
| + | sys.exit(1) | ||
| + | </ | ||
| + | |||
| + | == check_nfe_status == | ||
| + | |||
| + | En Brasil se utiliza la Nota Fiscal eletrônica, | ||
| + | |||
| + | **Referencias útiles de NFE** | ||
| + | |||
| + | * Portal Principal | ||
| + | * http:// | ||
| + | |||
| + | * Mapa de disponibilidad de servicio | ||
| + | * http:// | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | == 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: | ||
| + | # Based on http:// | ||
| + | # | ||
| + | # Autor: Stanila Constantin Adrian | ||
| + | # Date: 20/03/2009 | ||
| + | # Description: | ||
| + | # http:// | ||
| + | |||
| + | # Get program path | ||
| + | REVISION=1.3 | ||
| + | PROGNAME=`/ | ||
| + | PROGPATH=`echo $0 | /bin/sed -e ' | ||
| + | |||
| + | NODE_NAME=`uname -n` | ||
| + | CL_ST='/ | ||
| + | |||
| + | #nagios error codes | ||
| + | #. $PROGPATH/ | ||
| + | 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 " | ||
| + | do | ||
| + | case " | ||
| + | --help | -h) | ||
| + | help | ||
| + | exit $STATE_OK;; | ||
| + | --version | -v) | ||
| + | print_revision $PROGNAME $REVISION | ||
| + | exit $STATE_OK;; | ||
| + | # -H) | ||
| + | # shift | ||
| + | # HOST=$1;; | ||
| + | # -C) | ||
| + | # shift | ||
| + | # COMMUNITY=$1;; | ||
| + | *) | ||
| + | echo " | ||
| + | esac | ||
| + | shift | ||
| + | done | ||
| + | |||
| + | $CL_ST hbstatus > /dev/null | ||
| + | res=$? | ||
| + | if [ $res -ne 0 ] | ||
| + | then | ||
| + | echo " | ||
| + | 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 == " | ||
| + | then | ||
| + | let A=$A+1 | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | if [ $A -eq 0 ] | ||
| + | then | ||
| + | echo " | ||
| + | exit $CRITICAL | ||
| + | elif [ $A -ne $I ] | ||
| + | then | ||
| + | echo " | ||
| + | exit $WARNING | ||
| + | else | ||
| + | echo " | ||
| + | exit $OK | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | define command { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == check_systemimager == | ||
| + | |||
| + | Script para chequear que nuestras imágenes estén actualizadas a la fecha | ||
| + | |||
| + | <file php check_systemimager> | ||
| + | # | ||
| + | # Sergio Cayuqueo < | ||
| + | # http:// | ||
| + | <?php | ||
| + | $lista_imagenes = shell_exec(" | ||
| + | $lista_imagenes = preg_split("/ | ||
| + | $fecha_actual = date(' | ||
| + | foreach($lista_imagenes as $imagen) { | ||
| + | if(strlen($imagen)> | ||
| + | if(@!$i) { | ||
| + | $i=1; | ||
| + | } | ||
| + | $imagen = preg_split("/ | ||
| + | $imagenes[$i][' | ||
| + | $imagenes[$i][' | ||
| + | $imagenes[$i][' | ||
| + | if($imagen[4] == $fecha_actual) { | ||
| + | $imagenes[$i][' | ||
| + | } else { | ||
| + | $imagenes[$i][' | ||
| + | $critical=1; | ||
| + | } | ||
| + | $i++; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if(@$critical) { | ||
| + | $head = " | ||
| + | $exit = 2; | ||
| + | } else { | ||
| + | $head = "OK - Todas las imagenes actualizadas a la fecha\n"; | ||
| + | $exit = 0; | ||
| + | } | ||
| + | print $head; | ||
| + | foreach($imagenes as $imagen) { | ||
| + | if(strlen($imagen[' | ||
| + | $tab = " | ||
| + | } else { | ||
| + | $tab = " | ||
| + | } | ||
| + | if($imagen[' | ||
| + | print "OK - " | ||
| + | } else { | ||
| + | print " | ||
| + | } | ||
| + | } | ||
| + | exit($exit); | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | define command { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == check_dba_2pc_pending == | ||
| + | |||
| + | Chequeo de // | ||
| + | |||
| + | <file perl check_dba_2pc_pending> | ||
| + | # | ||
| + | |||
| + | open(SQLPLUS_SELECT, | ||
| + | while (< | ||
| + | chomp($_); | ||
| + | if(length($_)> | ||
| + | $select = $_; | ||
| + | } | ||
| + | } | ||
| + | close SQLPLUS_SELECT; | ||
| + | |||
| + | if($select == "no rows selected" | ||
| + | print "OK - Resultado : " | ||
| + | exit 0; | ||
| + | } else { | ||
| + | open(SQLPLUS_DELETE, | ||
| + | while (< | ||
| + | chomp($_); | ||
| + | if(length($_)> | ||
| + | $delete = $_; | ||
| + | } | ||
| + | } | ||
| + | close SQLPLUS_DELETE; | ||
| + | print " | ||
| + | exit 1; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | El script sql | ||
| + | |||
| + | <code sql> | ||
| + | set pagesize 0 | ||
| + | set trimspool on | ||
| + | set headsep off | ||
| + | select LOCAL_TRAN_ID from dba_2pc_pending; | ||
| + | exit; | ||
| + | </ | ||
| + | |||
| + | El check_command en la configuracion del servicio | ||
| + | |||
| + | < | ||
| + | check_by_ssh!sudo su - oracle -c / | ||
| + | </ | ||
| + | |||
| + | El sudoers del equipo a monitorear | ||
| + | |||
| + | < | ||
| + | monitoreo ALL = NOPASSWD: /bin/su - oracle -c / | ||
| + | </ | ||
| + | |||
| + | == check_microstrategy == | ||
| + | |||
| + | Chequear que el servicio de MicroStrategy este corriendo | ||
| + | |||
| + | < | ||
| + | define command { | ||
| + | command_name | ||
| + | command_line | ||
| + | register | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | define service { | ||
| + | service_description | ||
| + | use | ||
| + | check_command | ||
| + | max_check_attempts | ||
| + | check_interval | ||
| + | retry_interval | ||
| + | active_checks_enabled | ||
| + | check_period | ||
| + | notification_period | ||
| + | notification_options | ||
| + | notifications_enabled | ||
| + | register | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **check_microstrategy.sh** | ||
| + | |||
| + | <file bash check_microstrategy.sh> | ||
| + | #!/bin/sh | ||
| + | SALIDA_SSH=`ssh $1 -l monitoreo "sudo / | ||
| + | if [ $SALIDA_SSH=" | ||
| + | then | ||
| + | echo "OK - Proceso MicroStrategy corriendo" | ||
| + | exit 0; | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | En perl | ||
| + | <file perl check_microstrategy.pl> | ||
| + | # | ||
| + | |||
| + | open SSH, ("ssh " | ||
| + | |||
| + | while ( defined( my $line = <SSH> ) ) { | ||
| + | chomp($line); | ||
| + | if ($line eq " | ||
| + | print "OK - Proceso MicroStrategy corriendo (" | ||
| + | exit 0; | ||
| + | } else { | ||
| + | print " | ||
| + | exit 2; | ||
| + | } | ||
| + | } | ||
| + | close SSH; | ||
| + | </ | ||
| + | |||
| + | **count_archlogs.pl** | ||
| + | |||
| + | <file perl count_archlogs.pl> | ||
| + | # | ||
| + | use strict; | ||
| + | use warnings; | ||
| + | |||
| + | my $ORACLE_SID=$ARGV[0]; | ||
| + | |||
| + | sub get_sorted_files { | ||
| + | my $path = shift; | ||
| + | | ||
| + | my %hash = map {$_ => (stat($_))[9] || undef} # saltar listas vacias | ||
| + | map { " | ||
| + | grep { m/.dbf/i } | ||
| + | readdir $dir; | ||
| + | closedir $dir; | ||
| + | return %hash; | ||
| + | } | ||
| + | |||
| + | my %files = get_sorted_files("/ | ||
| + | my $count = keys %files; | ||
| + | |||
| + | if($count < 60) { | ||
| + | print "OK - Encontrados $count redo logs en / | ||
| + | exit 0; | ||
| + | } else { | ||
| + | print " | ||
| + | exit 2; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **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,' | ||
| + | </ | ||
| + | |||
| + | 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,' | ||
| + | LIMITE=5 | ||
| + | |||
| + | if [[ " | ||
| + | then | ||
| + | echo " | ||
| + | exit 2; | ||
| + | else | ||
| + | echo "OK - Hay $CONTEO registros"; | ||
| + | exit 0; | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | 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;" | ||
| + | |||
| + | case " | ||
| + | MOUNTED) | ||
| + | start | ||
| + | echo " | ||
| + | exit 2; | ||
| + | ;; | ||
| + | OPEN) | ||
| + | echo "OK - Los tablespaces de la base de datos estan $DATABASE_STATUS -" `date ' | ||
| + | exit 1; | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | exit 2; | ||
| + | esac | ||
| + | </ | ||
| + | |||
| + | **check_snmp_ifstatus_v3.pl** | ||
| + | |||
| + | Version modificada por mi del script check_snmp_ifstatus.pl para que pueda consultar por medio de snmp v3 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **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, | ||
| + | |||
| + | Ej ./ | ||
| + | |||
| + | Si se quiere saltear un tablespace, ej el **UNDO** agregamos al final de la query : | ||
| + | <code sql> | ||
| + | and fs.TABLESPACE_NAME NOT LIKE ' | ||
| + | </ | ||
| + | |||
| + | FIXME Tengo que agregar una opción para agregarle a la linea de comandos que sea ignorar table space | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **ssl-cert-check.sh** | ||
| + | |||
| + | Script para chequear validez del certificados SSL | ||
| + | |||
| + | < | ||
| + | ssl-cert-check.sh -c Certificado.crt -n -x 60 | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| == Notas importantes == | == Notas importantes == | ||
| Línea 4273: | Línea 6836: | ||
| /// | /// | ||
| + | ==== Sitios de consultas ==== | ||
| + | |||
| + | **Sitios de donde descargar plugins y agregados para Nagios** | ||
| + | |||
| + | * Paquete Standard de plugins | ||
| + | http:// | ||
| + | |||
| + | * Plugins con soporte SNMP | ||
| + | http:// | ||
| + | |||
| + | * Plugins SAP CCMS | ||
| + | http:// | ||
| + | |||
| + | * Interfaz alternativa de Nagios para visualizar en BlackBerry | ||
| + | http:// | ||
| + | |||
| + | * Plugins para chequeos en BlackBerry | ||
| + | http:// | ||
| + | |||
| + | * Plugins de chequeo de Lotus Notes | ||
| + | http:// | ||
| + | |||
| + | * Servidor de proyectos Nagios, plugins, templates etc en etapa de desarrollo | ||
| + | http:// | ||
| + | |||
| + | * Servidor de proyectos Nagios, plugins, templates etc | ||
| + | http:// | ||
| + | |||
| + | * Agregado de chequeo de eventos Nagios para firefox | ||
| + | https:// | ||
| + | |||
| + | * Visor de sucesos para el escritorio (Linux, Windows) | ||
| + | http:// | ||
| + | |||
| + | **Sitios generales sobre funcionamiento de redes y protocolos** | ||
| + | |||
| + | * Wiki de Redes de Comunicaciones II - Universidad de Madrid | ||
| + | http:// | ||
| + | |||
| + | * Un ensayo con contenidos conceptuales | ||
| + | http:// | ||
| + | |||
| + | * Explicación teórica clara sobre como // | ||
| + | http:// | ||
| + | |||
| + | * Como elaborar um SLA (The Service Level Agreement) - Acordo de Nível de Serviço | ||
| + | http:// | ||
| + | |||
| + | === 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:// | ||
| + | http:// | ||
| + | |||
| + | TESIS // | ||
| + | , Camilo Javier// | ||
| + | |||
| + | http:// | ||
| + | |||
| + | TESIS //GESTIÓN Y MONITOREO DE UN LABORATORIO CON HERRAMIENTAS OPEN SOURCE, Ramos Galicia, Juan Christian// | ||
| + | |||
| + | http:// | ||
| + | http:// | ||
| + | |||
| + | TESIS // | ||
| + | |||
| + | http:// | ||
| + | http:// | ||
| + | |||
| + | //signa - Sistema Integral de Gestión y Notificación de Alarmas// | ||
| + | |||
| + | http:// | ||
| + | https:// | ||
| + | |||
| + | |||
| + | 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:// | ||
| + | http:// | ||
| ==== Notas ==== | ==== Notas ==== | ||
| - | --- //Sergio Cayuqueo | + | Inicio del documento Junio de 2007 y a lo largo del tiempo le fui agregando cosas que descubri en mi trabajo |
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | 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 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Actualmente estoy trabajando por escribir una versión en Portugues (va algo lenta la traducción) y posiblemente comienze otra en Italiano : | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Pueden encontrar mas sobre mi o hacerme consultas via http:// | ||
| + | |||
| + | < | ||
| + | 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. | ||
| + | </ | ||
| + | |||
| + | **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:// | ||
| | | ||
manuales/nagios.1259863529.txt.gz · Última modificación: 2009/12/03 18:05 por cayu
