Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introducción

1.1. Los eventos no son estados

La tarea principal de Checkmk es la monitorización activa de estados.En cualquier momento, cada servicio monitorizado tiene uno de los estados OK, WARN, CRIT o UNKNOWN. Mediante sondeos regulares, la monitorización actualiza constantemente su imagen de la situación actual.

Un tipo de monitorización completamente diferente es la que gestiona eventos. Un ejemplo de evento es una excepción que se produce en una aplicación. La aplicación puede permanecer en el estado OK y seguir ejecutándose correctamente, pero algo ha ocurrido.

1.2. La Consola de eventos

Con la Consola de eventos (abreviada EC), Checkmk proporciona un sistema totalmente integrado para monitorizar eventos procedentes de fuentes como syslog, traps SNMP, registros de eventos de Windows, archivos de registro y aplicaciones propias. Los eventos no se definen simplemente como estados, sino que forman una categoría propia y, de hecho, Checkmk los muestra como información independiente en la barra lateral Overview.

The Overview snap-in with the display of events.

Internamente, los eventos no son procesados por el núcleo de monitorización, sino por un servicio independiente: el daemon de eventos (mkeventd).

La Consola de eventos también tiene un archivo en el que puedes buscar eventos pasados. Sin embargo, hay que decir de entrada que esto no es un sustituto de un archivo de registros adecuado. La tarea de la Consola de eventos es el filtrado inteligente de un pequeño número de mensajes relevantes de un gran flujo. Está optimizada para la simplicidad, la robustez y el rendimiento, no para almacenar grandes volúmenes de datos.

Un breve resumen de la funcionalidad de la CE:

  • Puede recibir mensajes directamente a través de syslog o de Trap SNMP, por lo que no es necesario configurar los correspondientes servicios del sistema Linux.

  • También puede evaluar archivos de registro basados en texto y registros de eventos de Windows mediante los agentes Checkmk.

  • Clasifica los mensajes basándose en cadenas de reglas definidas por el usuario.

  • Puede correlacionar, resumir, contar, anotar y reescribir mensajes, así como considerar sus relaciones temporales.

  • Puede realizar acciones automatizadas y enviar notificaciones a través de Checkmk.

  • Está totalmente integrado en la interfaz de usuario de Checkmk.

  • Está incluido y listo para usar en cualquier versión actual del sistema Checkmk.

1.3. Terminología

La Consola de eventos recibe mensajes (la mayoría en forma de mensajes de registro). Un mensaje es una línea de texto con una serie de posibles atributos adicionales, por ejemplo, una marca de tiempo, un nombre del host, etc. Si el mensaje es relevante, puede convertirse directamente en un evento con los mismos atributos, pero:

  • Un mensaje sólo se convertirá en evento si entra en vigor una regla.

  • Las reglas pueden editar el texto y otros atributos de los mensajes.

  • Se pueden combinar varios mensajes en un evento.

  • Los mensajes también pueden cancelar eventos en curso.

  • Se pueden generar eventos artificiales si determinados mensajes no aparecen.

Un evento puede pasar por varias fases:

Abierto

El estado "normal": Ha ocurrido algo: el operador debe atenderlo.

Reconocido

Se ha reconocido el problema: es análogo a los problemas de host y servicio de la monitorización basada en el estado.

Contando

Aún no ha llegado el número necesario de mensajes especificados: la situación aún no es problemática. Por tanto, el evento aún no se muestra al operador.

Retrasado

Se ha recibido un mensaje de error, pero la Consola de eventos aún está esperando si se recibirá el mensaje OK correspondiente en un tiempo configurado. Sólo entonces se mostrará el evento al operador.

Cerrado

El evento ha sido cerrado por el operador o automáticamente por el sistema y sólo se encuentra en el archivo.

Un evento también tiene un estado.Sin embargo, estrictamente hablando, no se refiere al estado del evento en sí, sino al estado del servicio o dispositivo que envió el evento. Para utilizar una analogía con la monitorización basada en el estado, un evento también puede marcarse como OK, WARN, CRIT o UNKNOWN.

2. Configuración de la Consola de eventos

Configurar la Consola de eventos es muy sencillo, porque la Consola de eventos es parte integrante de Checkmk y se activa automáticamente.

Sin embargo, si quieres recibir mensajes syslog o traps SNMP a través de la red, debes activarlos por separado. El motivo es que ambos servicios necesitan abrir un puerto UDP con un número de puerto específicamente identificado. Y como sólo puede hacerlo un site de Checkmk por sistema, la recepción a través de la red está desactivada por defecto.

Los números de puerto son

Protocolo Puerto Servicio

UDP

162

Trap SNMP

UDP

514

Syslog

TCP

514

Syslog vía TCP

Syslog vía TCP se utiliza poco, pero tiene la ventaja de que la transmisión de mensajes está asegurada. Con UDP nunca se puede garantizar que los paquetes lleguen realmente. Y ni Syslog ni los traps SNMP ofrecen Reconocimientos o protecciones similares contra mensajes perdidos. Para poder utilizar syslog vía TCP, el sistema emisor debe, por supuesto, poder enviar mensajes a través de este puerto.

En el appliance Checkmk, puedes activar la recepción de syslog/SNMP traps en la configuración del site. Si no, utiliza simplemente omd config. Puedes encontrar la configuración necesaria en Addons:

ec omd config

En omd start puedes ver en la línea que contiene mkeventd qué interfaces externas tiene abiertas tu CE:

OMD[mysite]:~$ omd start
Creating temporary filesystem /omd/sites/mysite/tmp...OK
Starting mkeventd (builtin: syslog-udp,snmptrap)...OK
Starting liveproxyd...OK
Starting mknotifyd...OK
Starting rrdcached...OK
Starting cmc...OK
Starting apache...OK
Starting dcd...OK
Starting redis...OK
Initializing Crontab...OK

3. Los primeros pasos con la Consola de eventos

3.1. Reglas, reglas, reglas

Al principio se mencionó que la CE se utiliza para pescar y mostrar mensajes relevantes. Sin embargo, el hecho desafortunado es que la mayoría de los mensajes -independientemente de si proceden de archivos de texto, del Registro de Eventos de Windows o del syslog- carecen de importancia. Tampoco ayuda cuando los mensajes ya han sido preclasificados por su creador.

Por ejemplo, en Syslog y en el Registro de eventos de Windows los mensajes se clasifican en algo parecido a OK, WARN y CRIT. Pero lo que significan realmente WARN y CRIT puede definirlo subjetivamente su programador. Y ni siquiera se puede afirmar definitivamente que la aplicación que ha producido el mensaje sea importante en este ordenador. En resumen: no puedes evitar tener que configurar qué mensajes te parecen un problema real y cuáles puedes descartar sin más.

Como en todas partes en Checkmk, la configuración se realiza mediante reglas, que son procesadas por el CE para cada mensaje entrante según el principio de "primera coincidencia". La primera regla que se aplica a un mensaje entrante decide su destino. Si no se aplica ninguna regla, el mensaje simplemente se descartará en silencio.

Como con el tiempo se suelen acumular muchas reglas para la CE, éstas se organizan en paquetes. El procesamiento de las reglas se hace paquete a paquete y dentro de un paquete de arriba abajo, por lo que el orden de procesamiento de estos paquetes es importante.

3.2. Crear una regla sencilla

No es sorprendente que la interfaz de configuración de la CE se encuentre en el menú Setup, en Events > Event Console. Out of the box, sólo encontrarás Default rule pack, que en realidad no contiene ninguna regla. Por tanto, como ya se ha dicho, los mensajes entrantes se descartan y tampoco se registran. El módulo en sí tiene el siguiente aspecto:

ec wato module

Empieza creando un nuevo paquete de reglas con Add rule pack:

ec new rule pack

Como siempre, el ID es una referencia interna y no se puede cambiar más tarde. Después de guardar, encontrarás la nueva entrada en la lista de tus paquetes de reglas:

ec rule pack list

Ahora puedes cambiar al paquete de reglas aún vacío con y crear una nueva regla con Add rule. Aquí sólo tienes que rellenar la primera caja con el encabezamiento Rule Properties:

ec first rule

Lo único necesario es un identificador único Rule ID. Este identificador se encontrará más tarde en los archivos de registro, y se almacenará con los eventos generados. Por tanto, es sensato asignar los identificadores con nombres significativos de forma sistemática. Todas las demás cajas son opcionales. Esto es especialmente cierto para las condiciones.

Importante: Esta nueva regla es sólo un ejemplo para pruebas y se aplicará a todos los eventos, por lo que también es importante que después la elimines o al menos la desactives, de lo contrario tu Consola de eventos se inundará de todos los mensajes sin sentido imaginables y ¡será prácticamente inútil!

Activar cambios

Como siempre en Checkmk, primero debes activar cambios para que surtan efecto. Esto no es un inconveniente, porque así, en el caso de cambios que afecten a varias reglas relacionadas, puedes especificar exactamente cuándo deben "activarse" las reglas. Y antes puedes utilizar la página Event Simulator para comprobar si todo se ajusta a lo previsto.

Primero, haz clic en el número de cambios acumulados en la parte superior derecha de la página.

ec activate changes

A continuación, haz clic en Activate on selected sites para activar el cambio. La Consola de eventos está diseñada de tal forma que esta acción se ejecuta sin interrupciones. La recepción de mensajes entrantes está garantizada en todo momento, de modo que no se puede perder ningún mensaje en el proceso.

Sólo los administradores pueden activar cambios en la CE. Esto se controla mediante el permiso Activate changes for event console.

Probar la nueva regla

Por supuesto, ahora puedes enviar mensajes a través de Syslog o SNMP para hacer pruebas, pero para una primera prueba es más práctico el Event Simulator integrado en la CE:

ec simulator

Aquí tienes dos opciones:Try out evalúa en función del mensaje simulado cuál de las reglas coincidiría. Si estás en el nivel superior de la GUI de configuración de la CE, se resaltarán los paquetes de reglas. Si estás dentro de un paquete de reglas, se resaltarán las reglas individuales. Cada paquete o regla está marcado con uno de los tres símbolos siguientes:

Esta regla es la primera en surtir efecto sobre el mensaje y, en consecuencia, determina su destino.

Esta regla tendría efecto, pero el mensaje ya ha sido tratado por una regla anterior.

Esta regla no tiene efecto. Muy práctico: Si pasas el ratón por encima de la bola gris, obtendrás una explicación de por qué no se aplica la regla.

Hacer clic en Generate event hace prácticamente lo mismo que Try out, sólo que ahora el mensaje se genera realmente.Cualquier acción definida se ejecuta realmente. Y el evento también aparecerá en los eventos abiertos en la monitorización. Puedes ver el código fuente del mensaje generado en la confirmación:

ec event generated

El evento generado aparece en el menú Monitor en Event Console > Events:

ec one open event

Generación manual de mensajes para pruebas

Para una primera prueba real a través de la red, puedes enviar fácilmente a mano un mensaje syslog desde otro ordenador Linux. Como el protocolo es tan sencillo, ni siquiera necesitas un programa especial, simplemente puedes enviar los datos a través de netcat o nc utilizando UDP. El contenido del paquete UDP consiste en una sola línea de texto. Si se ajusta a una estructura específica, la Consola de eventos desglosa los componentes limpiamente:

user@host:~$ echo '<78>Dec 18 10:40:00 myserver123 MyApplication: It happened again.' | nc -w 0 -u 10.1.1.94 514

Pero también puedes enviar simplemente cualquier cosa. En ese caso, la CE lo aceptará igualmente y sólo lo evaluará como un texto de mensaje. Por supuesto, faltará información adicional como la aplicación, la prioridad, etc. Por motivos de seguridad, se asumirá el estado CRIT:

user@host:~$ echo 'This is no syslog message' | nc -w 0 -u 10.1.1.94 514

Dentro del site Checkmk que ejecuta la CE hay una tubería con nombre, en la que puedes escribir mensajes de texto localmente a través de echo. Éste es un método muy sencillo para conectar una aplicación local y también una forma de probar el proceso de los mensajes:

OMD[mysite]:~$ echo 'Local application says hello' > tmp/run/mkeventd/events

Por cierto, aquí también es posible enviar en formato syslog, para que todos los campos de los datos del evento se rellenen limpiamente.

3.3. Configuración de la Consola de eventos

La Consola de eventos tiene sus propios ajustes globales, que no se encuentran con los de los otros módulos, sino en Setup > Events > Event Console con el botón Settings.

ec settings

Como siempre, puedes encontrar explicaciones de los ajustes individuales en la ayuda en línea y en los lugares apropiados de este artículo.

El acceso a los ajustes es posible a través del permiso Configuration of Event Console, que por defecto sólo está disponible en el rol admin.

3.4. Permisos

La Consola de eventos también tiene su propia sección de roles y permisos:

ec permissions

Hablaremos de algunos de estos permisos con más detalle en los lugares apropiados de este artículo.

3.5. Asignación de host en la Consola de eventos

Una característica especial de la Consola de eventos es que, a diferencia de la monitorización basada en el estado, los hosts no son el centro de atención. Los eventos pueden ocurrir sin ninguna asignación explícita de host, lo que de hecho se desea a menudo. Sin embargo, una asignación debe ser posible para los hosts que ya están en monitorización activa, con el fin de acceder rápidamente a la visión general del estado cuando se produce un evento. O como muy tarde, si los eventos se van a convertir en estados, es esencial una asignación correcta.

La regla fundamental para los mensajes recibidos a través de syslog es que el nombre del host en el mensaje se corresponda con el nombre del host en la monitorización. Esto se consigue utilizando el nombre de dominio completo (FQDN) / nombre de host completo (FQHN), tanto en tu configuración de syslog como en la asignación de nombres de host en Checkmk. En Rsyslog puedes conseguirlo utilizando la directiva global $PreserveFQDN on.

Checkmk intenta hacer coincidir los nombres del host de los eventos con los de la monitorización activa lo mejor que puede de forma automática. Además del nombre del host, también se intenta el alias del host. Si el nombre abreviado se transmite a través de syslog, la asignación será correcta.

Una resolución hacia atrás de la dirección IP no tendría mucho sentido en este caso, porque a menudo se utilizan servidores de registro intermedios. Si la conversión de los nombres del host a FQDN/FQHN o la reintroducción de muchos alias lleva demasiado tiempo, puedes utilizar la configuración de la Consola de eventos Hostname translation for incoming messages para traducir los nombres del host directamente al recibir los mensajes. De este modo tienes numerosas posibilidades:

ec hostname translation

El método más flexible es trabajar con expresiones regulares, que permiten una búsqueda y sustitución inteligente dentro de los nombres del host. En particular, si los nombres del host son explícitos, pero sólo falta la parte del dominio utilizada en Checkmk, una simple regla ayuda: (.*) se convierte en \1.mydomain.test. En los casos en que todo esto no sea suficiente, puedes utilizar Explicit hostname mapping para especificar una tabla de nombres individuales y sus respectivas traducciones.

Importante: la conversión del nombre se realiza antes de comprobar las condiciones de la regla y, por tanto, mucho antes de una posible reescritura del nombre del host por la acción de la regla Rewrite hostname en la reescritura automática de texto.

La asignación es algo más sencilla con SNMP. Aquí la dirección IP del remitente se compara con las direcciones IP en caché de los hosts en la monitorización - es decir, tan pronto como estén disponibles los checks activos regulares, como la comprobación de accesibilidad del puerto Telnet o SSH en un switch, los mensajes de estado de este dispositivo enviados a través de SNMP se asignarán al host correcto.

4. La Consola de eventos en monitorización

4.1. Vistas de eventos

Los eventos generados por la Consola de eventos se muestran de forma análoga a los host y servicios del entorno de monitorización. Puedes encontrar el punto de entrada para ello en el menú Monitor en Event Console > Events:

ec open events hilites

Puedes personalizar la vista mostrada Events como cualquier otra. Puedes filtrar los eventos mostrados, ejecutar comandos, etc. Para más detalles, consulta el artículo sobre vistas. Cuando creas nuevas vistas de eventos, los eventos y el historial de eventos están disponibles como fuentes de datos.

Un clic en el ID del evento (aquí, por ejemplo, 27) te mostrará sus detalles:

ec event details

Como puedes ver, un evento tiene bastantes campos de datos, cuyo significado explicaremos poco a poco en este artículo. No obstante, los campos más importantes deben mencionarse brevemente aquí:

Campo Significado

State (severity) of event

Como se ha mencionado en la introducción, cada evento se clasifica como OK, WARN, CRIT o UNKNOWN. Los eventos de estado OK son bastante inusuales. Esto se debe a que la CE está diseñada precisamente para filtrar sólo los problemas. Sin embargo, hay situaciones en las que un evento OK puede tener sentido.

Text/Message of the event

El contenido real del evento: Un mensaje de texto.

Hostname

El nombre del host que envió el mensaje. No tiene que ser necesariamente un host que esté siendo monitorizado activamente por Checkmk. Sin embargo, si existe un host con ese nombre en la monitorización, la CE creará automáticamente un enlace. En este caso, los campos Host alias, Host contacts y Host icons también se rellenarán y el host aparecerá en la misma notación que en la monitorización activa.

Rule-ID

El ID de la regla que creó este evento. Si haces clic en este ID, accederás directamente a los detalles de la regla. Por cierto, el ID se conserva aunque la regla deje de existir mientras tanto.

Como se mencionó al principio, los eventos se muestran directamente en la Overview de la barra lateral:

The Overview snap-in with the display of events.

Aquí verás tres números

  • Events- todos los eventos abiertos y reconocidos (corresponde a la vista de tabla Event Console > Events )

  • Problems- de los cuales sólo aquellos con estado WARN / CRIT / UNKNOWN

  • Unhandled- de éstos, de nuevo, sólo los que aún no han sido reconocidos (más sobre esto dentro de un momento)

4.2. Comandos y Flujo de trabajo de los eventos

De forma análoga a lo que ocurre con los host y los servicios, también para los eventos se asigna un flujo de trabajo sencillo. Como es habitual, esto se hace mediante comandos, que se encuentran en el menú Commands. Mostrando y seleccionando con checkboxes puedes ejecutar un comando en varios eventos simultáneamente. Como característica especial está el archivo de uso frecuente de un solo evento directamente a través del icono.

Para cada uno de los comandos hay un permiso, que puedes utilizar para controlar para qué rol está permitida la ejecución del comando. Por defecto, todos los comandos están permitidos para los titulares de los roles admin y user.

ec commands menu

Están disponibles los siguientes comandos:

Actualización y Reconocimiento

El comando Update & Acknowledge muestra la siguiente zona encima de la lista de eventos:

ec commands

Con el botón Update puedes, en una sola acción, añadir un comentario al evento, añadir una persona de contacto y reconocer el evento. El campo Change contact es intencionadamente de texto libre. Aquí también puedes introducir cosas como números de teléfono. En particular, este campo no influye en la visibilidad del evento en la GUI - es puramente un campo de comentario.

El checkbox Set event to acknowledged hará que el evento pase de la fase open a acknowledged, y en adelante se mostrará como handled. Esto es análogo al Reconocimiento de problemas de host y de servicio.

La invocación posterior del comando con el checkbox desmarcado elimina el Reconocimiento.

Cambiar estado

El comando Change State permite cambiar manualmente el estado de un evento, por ejemplo, de CRIT a WARN.

Acción personalizada

Con el comando Custom Action, se pueden ejecutar acciones libremente definibles sobre los eventos. Inicialmente, sólo está disponible la acción Send monitoring notification. Ésta enviará una notificación Checkmk que se gestionará de la misma forma que la de un servicio activamente monitorizado. Ésta pasa por las reglas de notificación y puede generar correos electrónicos, un SMS o lo que hayas configurado en consecuencia. Consulta más abajo los detalles sobre la notificación por la CE.

Archivar evento

El botón Archive Event elimina permanentemente un evento de la lista de eventos abiertos. Dado que todas las acciones sobre los eventos -incluida esta eliminación- se registran también en el archivo, podrás seguir accediendo posteriormente a toda la información sobre el evento. Por eso no hablamos de eliminar, sino de archivar.

También puedes archivar cómodamente eventos individuales de la lista de eventos utilizando .

4.3. Visibilidad de los eventos

El "problema" de la visibilidad

Para proporcionar visibilidad de los host y servicios en la monitorización para usuarios normales, Checkmk utiliza grupos de contacto. Estos grupos se asignan a los host y servicios mediante la configuración de la GUI, reglas o carpetas.

Con la Consola de eventos, la situación es que esa asignación de eventos a grupos de contacto no existe, porque sencillamente no se sabe de antemano qué mensajes se van a recibir realmente. Ni siquiera se conoce la lista de hosts, porque los sockets para Syslog y SNMP son accesibles desde todas partes. Por eso, la Consola de eventos incluye algunas funciones especiales para definir la visibilidad.

Inicialmente, todo el mundo puede verlo todo

En primer lugar, al configurar los roles de usuario aparece el permiso Event Console > See all events. ¡Está activo por defecto, de modo que los usuarios normales pueden ver todos los eventos!Esto se establece deliberadamente para garantizar que los mensajes de error importantes no se queden por el camino debido a una configuración incorrecta. El primer paso para una visibilidad más precisa es eliminar este permiso del rol user.

Asignación a host

Para que la visibilidad de los eventos sea lo más coherente posible con el resto de la monitorización, la Consola de eventos intenta, en la medida de lo posible, hacer coincidir los hosts de los que recibe eventos con los hosts configurados a través de la GUI de Configuración. Lo que parece sencillo es complicado en los detalles. A veces falta el nombre del host en el evento y sólo se conoce la dirección IP. En otros casos, el nombre del host está escrito de forma distinta a la que aparece en la GUI de Configuración.

La asignación se realiza del siguiente modo:

  • Si no se encuentra ningún nombre del host en el evento, se utiliza su dirección IP como nombre del host.

  • A continuación, el nombre del host en el evento se compara caso por caso con todos los nombres de host, direcciones del host y direcciones IP de los hosts en la monitorización.

  • Si se encuentra un host de esta forma, se utilizan sus grupos de contacto para el evento, y esto se utiliza para controlar la visibilidad.

  • Si no se encuentra el host, los grupos de contacto -si están configurados allí- se toman de la regla que creó el evento.

  • Si tampoco hay grupos almacenados allí, el usuario sólo podrá ver el evento si tiene el permiso Event Console > See events not related to a known host.

Puedes influir en la asignación en un punto: a saber, si los grupos de contacto están definidos en la regla y se puede asignar el host, el mapeo suele tener prioridad. Puedes cambiar esto en una regla con la opción Precedence of contact groups:

ec outcome contact groups

Además, puedes hacer ajustes directamente en la regla para la notificación. Esto permite dar prioridad al tipo de evento sobre las responsabilidades habituales de un host.

4.4. Solución de problemas

¿Qué regla se aplica y con qué frecuencia?

Tanto para los paquetes de reglas ...

ec pack hits

... como para las reglas individuales ...

ec rule hits

... en la columna Hits encontrarás la información sobre la frecuencia con la que el paquete o la regla ya ha coincidido con un mensaje. Esto te ayuda a eliminar o reparar las reglas ineficaces. Pero también puede ser interesante para las reglas que coinciden muy a menudo. Para un rendimiento óptimo de la CE, éstas deben estar al principio de la secuencia de reglas. De esta forma puedes reducir el número de reglas que la CE tiene que probar en cada mensaje.

Puedes restablecer los contadores en cualquier momento con el elemento de menú Event Console > Reset counters.

Depurar la evaluación de reglas

En Probar una regla ya has visto cómo puedes utilizar Event Simulator para comprobar las evaluaciones de tus reglas. Puedes obtener información similar en tiempo de ejecución para todos los mensajes, si en los ajustes de la Consola de eventos estableces el valor de Debug rule execution a on.

El archivo de registro de la Consola de eventos se encuentra en var/log/mkeventd.log, en el que encontrarás la razón exacta por la que alguna regla verificada no surtió efecto:

var/log/mkeventd.log
[1481020022.001612] Processing message from ('10.40.21.11', 57123): '<22>Dec  6 11:27:02 myserver123 exim[1468]: Delivery complete, 4 message(s) remain.'
[1481020022.001664] Parsed message:
 application:    exim
 facility:       2
 host:           myserver123
 ipaddress:      10.40.21.11
 pid:            1468
 priority:       6
 text:           Delivery complete, 4 message(s) remain.
 time:           1481020022.0
[1481020022.001679] Trying rule test/myrule01...
[1481020022.001688]   Text:   Delivery complete, 4 message(s) remain.
[1481020022.001698]   Syslog: 2.6
[1481020022.001705]   Host:   myserver123
[1481020022.001725]   did not match because of wrong application 'exim' (need 'security')
[1481020022.001733] Trying rule test/myrule02n...
[1481020022.001739]   Text:   Delivery complete, 4 message(s) remain.
[1481020022.001746]   Syslog: 2.6
[1481020022.001751]   Host:   myserver123
[1481020022.001764]   did not match because of wrong text

Huelga decir que debes utilizar este registro intensivo sólo cuando sea necesario y con precaución. ¡En un entorno sólo ligeramente más complejo se generarán enormes volúmenes de datos!

5. El pleno poder de las reglas

5.1. Las condiciones

La parte más importante de una regla CE es, por supuesto, la condición (Matching Criteria). Sólo si un mensaje cumple todas las condiciones almacenadas en la regla, se ejecutan las acciones definidas en la regla y se completa así la evaluación del mensaje.

ec matching criteria

Información general sobre las comparaciones de texto

Para todas las condiciones que implican campos de texto, el texto de comparación siempre se trata como una expresión regular. La comparación siempre tiene lugar ignorando mayúsculas/minúsculas. Esto último es una excepción a las convenciones de Checkmk en otros módulos. Sin embargo, esto hace que la formulación de las reglas sea más robusta, especialmente porque los nombres del host en los eventos no son necesariamente consistentes en su ortografía si se han configurado en cada host localmente en lugar de centralmente. Por tanto, esta excepción es muy útil aquí.

Además, siempre se aplica una concordancia infix, es decir, un check del contenido del texto de búsqueda, por lo que puedes guardar un .* al principio o al final del texto de búsqueda.

Sin embargo, hay una excepción: si no se utiliza una expresión regular en la coincidencia con el nombre del host, sino un nombre del host explícito, se comprobará si hay coincidencia exacta y no si está contenido.

Atención: ¡Si el texto de búsqueda contiene un punto (.), se considerará una expresión regular y se aplicará la búsqueda infix, por ejemplo, mihost.com coincidirá también, por ejemplo, con notmyhostide!

Grupos de concordancia

Muy importante y útil aquí es el concepto de grupos de concordancia en el campo Text to match. Se refiere a las secciones de texto que coinciden con las expresiones entre paréntesis de la expresión regular.

Supongamos que quieres monitorizar el siguiente tipo de mensaje en el archivo de registro de una base de datos:

Database instance WP41 has failed

El WP41 es, por supuesto, variable y seguramente no querrás formular una regla distinta para cada instancia diferente, por lo que utilizarás .* en la expresión regular, que significa cualquier cadena:

Database instance .* has failed

Si ahora encierras la parte variable entre corchetes, la Consola de eventos memorizará(capturará) el valor real para cualquier acción futura:

Database instance (.*) has failed

Tras una coincidencia correcta de la regla, el primer grupo de concordancia se fija ahora en el valor WP41 (o en la instancia que haya producido el error).

Puedes ver estos grupos de concordancia en Event Simulator si pasas el cursor por encima de la bola verde:

ec match groups 1

También puedes ver los grupos en los detalles del evento generado:

ec match groups 2

Entre otras cosas, los grupos de concordancia se utilizan para:

Llegados a este punto, un consejo: Hay situaciones en las que necesitas agrupar algo en la expresión regular pero no quieres crear un grupo de concordancia. Puedes hacerlo colocando un ?: justo después del paréntesis de apertura. Ejemplo: La expresión one (.*) two (?:.*) three crea para una coincidencia en one 123 two 456 three sólo el único grupo de concordancia 123.

Dirección IP

En el campo Match original source IP address puedes coincidir con la dirección IPv4 del remitente del mensaje. Especifica una dirección exacta o una red en la notación X.X.X.X/Y, por ejemplo 192.168.8.0/24 para coincidir con todas las direcciones de la red 192.168.8.X.

Ten en cuenta que la coincidencia en la dirección IP sólo funciona si los sistemas monitorizados envían directamente a la Consola de eventos. Si otro servidor de syslog intermedio conectado está reenviando los mensajes, su dirección aparecerá en su lugar como remitente en el mensaje.

Prioridad y facilidad del syslog

Los campos Match syslog priority y Match syslog facility son información estandarizada, definida originalmente por la información Syslog. Internamente, un campo de 8 bits se divide en 5 bits para la facilidad (32 posibilidades) y 3 bits para la prioridad (8 posibilidades).

Las 32 facilidades predefinidas se pensaron en su día para algo como una aplicación, pero la selección no se hizo con mucha visión de futuro en aquel momento. Una de las facilidades es uucp, un protocolo que a principios de los 90 del milenio pasado ya estaba casi obsoleto.

Pero es un hecho que cada mensaje que llega a través de syslog lleva una de estas facilidades. En algunos casos también puedes asignarlas libremente al enviar el mensaje, para poder filtrarlas después, lo que resulta bastante útil.

El uso de la facilidad y la prioridad también tiene un aspecto de rendimiento. Si defines una regla que, en cualquier caso, sólo se aplica a los mensajes que tienen todos la misma facilidad o prioridad, debes definirlas adicionalmente en los filtros de la regla. La Consola de eventos podrá entonces omitir estas reglas de forma muy eficiente cuando se reciba un mensaje con valores diferentes. Cuantas más reglas tengan establecidos estos filtros, menos comparaciones de reglas serán necesarias.

Invertir una coincidencia

El checkbox Negate match: Execute this rule if the upper conditions are not fulfilled. hace que la regla sólo tenga efecto cuando no se cumpla ninguna de las condiciones. En realidad, esto sólo es útil en el contexto de dos tipos de reglas (Rule type en la caja Outcome & Action de la regla):

  • Do not perform any action, drop this message, stop processing.

  • Skip this rule pack, continue rule execution with next pack

A continuación puedes obtener más información sobre los paquetes de reglas.

5.2. Efecto de la regla

Tipo de regla: Cancelar o crear un evento

Cuando una regla coincide, especifica lo que debe ocurrir con el mensaje. Esto se hace en la caja Outcome & Action:

ec outcome

El Rule type se puede utilizar para abortar la evaluación en el punto por completo o para el paquete de reglas actual. Especialmente la primera opción se debe utilizar para deshacerse de la mayor parte del "ruido" inútil utilizando unas pocas reglas específicas al principio. Sólo con las reglas "normales" se evalúan realmente las otras opciones de esta caja.

Establecer el estado

En State, la regla establece el estado del evento en la monitorización. En la regla, este estado será WARN o CRIT. Las reglas que generan eventos OK pueden ser interesantes en excepciones para representar determinados eventos de forma puramente informativa. En tal caso, resulta interesante una combinación con una caducidad automática de estos eventos.

Además de establecer un estado explícito, hay dos opciones más dinámicas. La opción (set by syslog) asume la clasificación basada en la prioridad syslog. Esto sólo funciona si el mensaje ya ha sido clasificado utilizable por el remitente. Los mensajes recibidos directamente por syslog contendrán una de las ocho prioridades RFC, que se mapean de la siguiente manera:

Prioridad ID Estado Definición según syslog

emerg

0

CRIT

sistema inutilizable

alert

1

CRIT

se requiere acción inmediata

crit

2

CRIT

condición crítica

err

3

CRIT

error

warning

4

ADVERTENCIA

advertencia

notice

5

OK

normal, pero información significativa

info

6

OK

puramente informativo

debug

7

OK

mensaje de depuración

Además de los mensajes syslog, los mensajes del Registro de eventos de Windows y los mensajes de los archivos de texto que ya se han clasificado con el Plugin Checkmk logwatch en el sistema de destino, proporcionan estados listos para usar. Para los Trap SNMP, lamentablemente, esto no está disponible.

Un método completamente distinto es clasificar el mensaje basándose en el propio texto, lo que puede hacerse con la configuración (set by message text):

ec state by text

La coincidencia con los textos configurados aquí sólo se produce después de comprobar Text to match y de que se hayan comprobado las demás condiciones de la regla, de modo que no tengas que repetir esas comprobaciones.

Si no se encuentra ninguno de los patrones configurados, el evento devuelve el estado UNKNOWN.

Niveles de servicio

La idea que subyace en el campo Service Level es que cada host y cada servicio de una organización tiene un determinado nivel de importancia, que puede asociarse a un acuerdo de servicio específico para el host o el servicio. En Checkmk, puedes utilizar reglas para asignar dichos niveles de servicio a tus hosts y servicios y luego, por ejemplo, hacer que la notificación o los dashboards autodefinidos dependan de ello.

Dado que los eventos no se correlacionan necesariamente con los host o servicios, la Consola de eventos te permite asignar un nivel de servicio a un evento mediante una regla. Posteriormente, puedes filtrar las vistas de eventos utilizando este nivel.

Por defecto, Checkmk define cuatro niveles: 0 (sin nivel), 10 (plata), 20 (oro) y 30 (platino). Puedes cambiar esta selección según necesites en Global settings > Notifications > Service Levels. Son decisivos los números que designan los niveles, ya que los niveles se ordenan por estos números y también se comparan según la importancia relativa.

Grupos de contacto

Los grupos de contacto utilizados para la visibilidad también se utilizarán para la notificación de eventos. Aquí puedes utilizar reglas para asignar grupos de contacto explícitamente a los eventos. Encontrarás más detalles en el capítulo sobre monitorización.

Acciones

Las acciones son muy similares a los Alert handlers para host y servicios. Aquí puedes hacer que se ejecute un script autodefinido cuando se abra un evento. Más adelante, en una sección aparte, encontrarás información detallada sobre las acciones.

Borrado automático (archivado)

El borrado automático (= archivado), que puedes configurar con Delete event immediately after the actions, garantiza que un evento no sea visible en la monitorización en absoluto. Esto es útil si sólo quieres activar algunas acciones automáticamente o si sólo quieres archivar ciertos eventos para poder buscarlos más tarde.

5.3. Reescritura automática de textos

Con la función Rewriting, una regla CE puede reescribir automáticamente los campos de texto de un mensaje y añadir anotaciones. Esto se configura en una caja aparte:

ec rewriting

Al reescribir, son especialmente importantes los grupos de coincidencia, que te permiten incluir partes del mensaje original en el nuevo texto. Puedes acceder a los grupos al reescribir del siguiente modo:

\1

Será sustituido por el primer grupo de concordancia del mensaje original.

\2

Se sustituirá por el segundo grupo de concordancia del mensaje original (etc.).

0

Se sustituirá por el mensaje original completo.

En la captura de pantalla anterior, el texto del nuevo mensaje se codificará como Instance \1 has been shut down.. Por supuesto, esto sólo funciona si el Text to match de la misma regla de la expresión de búsqueda regular también tiene al menos una expresión entre paréntesis. Un ejemplo de esto sería, por ejemplo

ec rewrite match

Algunas notas más sobre la reescritura:

  • La reescritura se realiza después de la coincidencia y antes de realizar acciones.

  • Las coincidencias, la reescritura y las acciones se realizan siempre en la misma regla. No es posible reescribir un mensaje y luego procesarlo con una regla posterior.

  • Las expresiones \1, \2 etc. se pueden utilizar en todos los campos de texto, no sólo en Rewrite message text.

5.4. Cancelación automática de eventos

Algunas aplicaciones o dispositivos tienen la amabilidad de enviar posteriormente un mensaje OK adecuado en cuanto se ha resuelto el problema. Puedes configurar la CE de forma que, en tal caso, el evento abierto por el error se cierre automáticamente, lo que se denomina cancelar.

La siguiente figura muestra una regla con la que se buscan mensajes que contengan el texto database instance (.*) has failed. La expresión (.*) representa una cadena arbitraria que está atrapada en un grupo de coincidencia. La expresión database instance (.*) recovery in progress, que está en el campo Text to cancel event(s) de la misma regla, cerrará automáticamente los eventos creados con esta regla cuando se reciba un mensaje que coincida:

ec cancelling

La cancelación automática funciona siempre que

  • se reciba un mensaje cuyo texto coincida con Text to cancel event(s),

  • el valor capturado aquí en el grupo (.*) es idéntico al grupo de concordancia del mensaje original,

  • ambos mensajes procedan del mismo host, y

  • se trata de la misma aplicación (el campo Syslog application to cancel event ).

El principio del grupo de concordancia es muy importante aquí. Después de todo, no tendría mucho sentido que el mensaje database instance TEST recovery in progress cancelara un evento que había sido generado por el mensaje database instance PROD has failed, ¿verdad?

No cometas el error de utilizar el marcador de posición \1 en Text to cancel events(s). ¡Esto NO funciona! Estos marcadores de posición sólo sirven para reescribir.

En algunos casos ocurre que un texto se utiliza tanto para crear como para cancelar un evento. En tal caso, cancelar tiene prioridad.

Ejecutar acciones al cancelar

También puedes hacer que se ejecuten acciones automáticamente cuando se cancela un evento. Es importante saber que cuando se cancela un evento, una serie de campos de datos del evento se sobrescriben con valores del mensaje OK antes de que se ejecute ninguna acción. De este modo, los datos completos del mensaje OK están disponibles en el script de acción. Además, durante esta fase, el estado del evento se marca como OK. De este modo, un script de acción puede detectar una anulación y puedes utilizar el mismo script para mensajes de error y OK (por ejemplo, cuando te conectas a un sistema de tickets).

Los siguientes campos se sobrescriben a partir de los datos del mensaje OK:

  • El texto del mensaje

  • La marca de tiempo

  • La hora de la última aparición

  • La prioridad syslog

Todos los demás campos permanecen inalterados, incluido el ID del evento.

Cancelar en combinación con reescribir

Si utilizas la reescritura y la cancelación en la misma regla, debes tener cuidado al reescribir el nombre del host o la aplicación. Al cancelar, la CE siempre comprueba si el mensaje de cancelación coincide con el nombre del host y la aplicación del evento abierto. Pero si éstos se reescribiesen, la cancelación nunca funcionaría.

Por lo tanto, antes de cancelar el evento, la Consola de eventos simula una reescritura del nombre del host y de la aplicación para comparar los textos relevantes. Esto es probablemente lo que esperarías.

También puedes aprovechar este comportamiento si el campo de aplicación del mensaje de error y el posterior mensaje OK no coinciden. En este caso, simplemente reescribe el campo de aplicación a un valor fijo conocido, lo que de hecho conduce al resultado de que este campo será ignorado.

Cancelación basada en la prioridad del syslog

Hay situaciones (por desgracia) en las que el texto de los mensajes de error y OK es absolutamente idéntico. En la mayoría de los casos, el estado real no está codificado en el texto, sino en la prioridad del syslog.

Para ello existe la opción Syslog priority to cancel event. Introduce aquí el intervalo debug... notice, por ejemplo. Normalmente se considera que todas las prioridades de este intervalo tienen un estado OK. Cuando utilices esta opción, debes introducir igualmente un texto adecuado en el campo Text to cancel event(s), ya que de lo contrario la regla coincidirá con todos los mensajes OK que afecten a la misma aplicación.

5.5. Contar mensajes

En la caja Counting & Timing encontrarás opciones para contar mensajes similares. La idea es que algunos mensajes sólo son relevantes si ocurren con demasiada frecuencia o con muy poca frecuencia dentro de periodos de tiempo especificados.

Mensajes demasiado frecuentes

Puedes activar el check de mensajes que ocurren con demasiada frecuencia con la opción Count messages in interval:

ec counting

Aquí especificas primero un periodo de tiempo en Time period for counting y el número de mensajes que deben provocar la apertura de un evento en Count until triggered. En el ejemplo anterior, esto se establece en 10 mensajes por hora. Por supuesto, no se trata de 10 mensajes arbitrarios, sino de mensajes que coinciden con la regla.

Normalmente, tiene sentido no contar globalmente todos los mensajes coincidentes, sino sólo los que se refieren a la misma "causa". Para controlar esto, existen los tres checkbox de las opciones prefijadas por Force separate events for different …​. Están preconfigurados de tal forma que los mensajes sólo se cuentan juntos si coinciden en:

Esto te permite formular reglas como "Si se reciben más de 10 mensajes por hora del mismo host, la misma aplicación y allí el mismo site, entonces..." Debido a la regla, esto puede dar lugar a que se generen varios eventos diferentes.

Si, por ejemplo, desmarcas los tres checkbox, el recuento se hará sólo globalmente y la regla sólo podrá generar un evento en total.

Por cierto, puede tener sentido introducir 1 como recuento. De este modo podrás controlar eficazmente las "tormentas de eventos". Si, por ejemplo, en un breve espacio de tiempo se reciben 100 mensajes del mismo tipo, sólo se creará un evento. Verás en los detalles del evento

  • la hora en que se produjo el primer mensaje,

  • la hora en que se produjo el mensaje más reciente, y

  • el número total de mensajes combinados en este evento.

A continuación, mediante dos checkbox puedes definir cuándo debe abrirse un nuevo evento. Normalmente, el Reconocimiento del evento crea una situación en la que, si se reciben más mensajes, se inicia un nuevo recuento y se activa un nuevo evento. Puedes desactivar esta función con Continue counting when event is acknowledged.

La opción Discontinue counting after time has elapsed garantiza que siempre se abra un evento distinto para cada periodo de comparación. En el ejemplo anterior, se especificó un umbral de 10 mensajes por hora. Si esta opción está activada, se añadirá un máximo de 10 mensajes de una hora a un evento ya abierto. En cuanto haya transcurrido la hora, si se ha recibido un número suficiente de mensajes, se abrirá un nuevo evento.

Por ejemplo, si estableces el número en 1 y el intervalo de tiempo en un día, sólo verás un máximo de un evento de este tipo de mensaje al día.

La configuración de Algorithm puede resultar un poco sorprendente a primera vista, pero seamos realistas: ¿qué quieres decir realmente con "10 mensajes por hora"? ¿A qué hora te refieres con eso? ¿Siempre a horas completas del día? Podría ser que en el último minuto de una hora se recibieran nueve mensajes, y otros nueve en el primer minuto de la hora siguiente. Eso hace entonces 18 mensajes en sólo dos minutos de tiempo transcurrido, pero siguen siendo menos de 10 por hora, por lo que la regla no se aplicaría. Eso no suena muy razonable...

Como no hay una solución única a este problema, Checkmk proporciona tres definiciones diferentes de lo que debe significar exactamente "10 mensajes por hora":

Algoritmo Funcionalidad

Interval

El intervalo de recuento comienza en el primer mensaje de coincidencia entrante. Se genera un evento en la fase counting. Si transcurre el tiempo especificado antes de que se alcance el recuento, el evento se elimina silenciosamente. Sin embargo, si se alcanza el recuento antes de que expire el tiempo, el evento se abre inmediatamente (y se desencadenan las acciones que se hayan configurado).

Token Bucket

Este algoritmo no funciona con intervalos de tiempo fijos, sino que implementa un método que se utiliza a menudo en las redes para dar forma al tráfico. Supongamos que has configurado 10 mensajes por hora. Es decir, una media de uno cada 6 minutos. La primera vez que se recibe un mensaje coincidente, se genera un evento en la fase counting y el recuento se establece en 1. Por cada mensaje posterior, se aumenta en 1. Y cada 6 minutos, el contador vuelve a disminuir en 1, independientemente de que haya llegado un mensaje o no. Si el contador vuelve a bajar a 0, el evento se borra. Por tanto, el activador se dispara cuando la tasa media de mensajes es permanentemente superior a 10 por hora.

Dynamic Token Bucket

Se trata de una variante del algoritmo Token Bucket, en el que cuanto más pequeño es el contador en un momento dado, más lentamente disminuye. En el ejemplo anterior, si el contador fuera 5, sólo disminuiría cada 12 minutos en lugar de cada 6 minutos. El efecto general de esto es que las tasas de notificación justo por encima de la tasa permitida abrirán un evento (y por tanto serán notificadas) mucho más rápido.

Entonces, ¿qué algoritmo debes elegir?

  • Interval es el más sencillo de entender y más fácil de seguir si más adelante quieres realizar un recuento exacto en tu archivo syslog.

  • Token Bucket por otro lado es más inteligente y "suave". Hay menos anomalías en los bordes de los intervalos.

  • Dynamic Token Bucket hace que el sistema sea más reactivo y genere notificaciones más rápidamente.

Los eventos que aún no han alcanzado el número establecido, están latentes pero no son visibles automáticamente para el operador. Están en la fase counting. Puedes hacer visibles estos eventos con el filtro phase en la vista de tabla:

ec phase filter counting

Mensajes demasiado infrecuentes o ausentes

Al igual que la llegada de un mensaje concreto puede significar un problema, la ausencia de un mensaje también puede significar un problema. Puedes esperar al menos un mensaje al día de un trabajo concreto. Si este mensaje no llega, es probable que el trabajo no esté funcionando y deba arreglarse urgentemente.

Puedes configurar algo así en Counting & Timing > Expect regular messages:

ec expect messages

Al igual que con el recuento, tienes que especificar un periodo de tiempo en el que esperas que aparezca el mensaje o mensajes. Aquí, sin embargo, se utiliza un algoritmo completamente diferente, que tiene mucho más sentido en este punto. La periodicidad siempre se alinea exactamente con las posiciones definidas. Por ejemplo, el intervalo hour siempre comienza en el minuto y segundo cero. Tienes las siguientes opciones:

Intervalo Alineación

10 seconds

En un número de segundos divisible por 10

minute

En el minuto completo

5 minutes

A las 0:00, 0:05, 0:10, etc.

15 minutes

A las 0:00, 0:15, 0:30, 0:45, etc.

hour

Al principio de cada hora completa

day

Exactamente a las 00:00, pero en una zona horaria configurable. Esto también te permite decir que esperas un mensaje entre las 12:00 y las 12:00 del día siguiente. Por ejemplo, si tú mismo estás en la zona horaria UTC +1, especifica UTC -11 hours.

two days

Al principio de una hora completa. Aquí puedes especificar un desfase horario de 0 a 47, referido a 1970-01-01 00:00:00 UTC.

week

A las 00:00 de la mañana del jueves en la zona horaria UTC más el desfase, que puedes indicar en horas. Jueves porque el 1/1/1970, el inicio de la "época", fue un jueves.

¿Por qué es tan complicado? Para evitar falsas alarmas. ¿Esperas un mensaje de copia de seguridad al día, por ejemplo? Seguramente habrá ligeras diferencias en el tiempo de ejecución de la copia de seguridad, de modo que los mensajes no se reciban exactamente con 24 horas de diferencia. Por ejemplo, si esperas que el mensaje llegue hacia medianoche, más o menos una hora o dos, un intervalo de 12:00 a 12:00 será mucho más realista que uno de 00:00 a 00:00. Sin embargo, si el mensaje no aparece, sólo recibirás una notificación a las 12:00 del mediodía.

Múltiples apariciones del mismo problema

La opción Merge with open event está preconfigurada de forma que, en caso de que aparezca repetidamente el mismo mensaje, se actualizará el evento existente. Puedes modificarlo para que se abra un nuevo evento cada vez.

5.6. Temporización

En Counting & Timing hay dos opciones que afectan a la apertura y/o cierre automático de eventos.

La opción Delay event creation es útil si trabajas con la cancelación automática de eventos. Establece, por ejemplo, un retraso de 5 minutos, entonces, en el caso de un mensaje de error, el evento creado permanecerá en el estado delayed durante 5 minutos, con la esperanza de que el mensaje OK llegue en ese tiempo. Si es así, el evento se cerrará automáticamente y sin complicaciones, y no aparecerá en la monitorización. Sin embargo, si el tiempo expira, el evento se abrirá y se ejecutará cualquiera de sus posibles acciones definidas:

ec delay

Más o menos lo contrario se hace con Limit event lifetime. Con esto puedes hacer que los eventos se cierren automáticamente después de un tiempo determinado. Esto es útil, por ejemplo, para eventos informativos con un estado OK que te gustaría mostrar, pero para los que no quieres que la monitorización genere ninguna actividad. Al "apagarse" automáticamente te ahorras la eliminación manual de tales mensajes:

ec limit livetime

Reconociendo el mensaje se detendrá la desconexión por el momento. Este comportamiento se puede controlar con los dos checkbox.

5.7. Paquetes de reglas

Los paquetes de reglas no sólo tienen la ventaja de hacer las cosas más manejables, sino que también pueden simplificar la configuración de múltiples reglas similares y, al mismo tiempo, acelerar la evaluación.

Supongamos que tienes un conjunto de 20 reglas que giran todas en torno al registro de eventos de Windows Security. Todas estas reglas tienen en común que comprueban en la condición un determinado texto en el campo de aplicación (el nombre de este archivo de registro se utiliza en los mensajes de la CE como Application). En tal caso, procede como sigue:

  1. Crea tu propio paquete de reglas.

  2. Crea las 20 reglas para Security en este paquete o muévelas allí (lista de selección Move to pack…​ a la derecha de la tabla de reglas).

  3. Elimina la condición sobre la aplicación de todas estas reglas.

  4. Crea como primera regla del paquete una regla por la que los mensajes salgan inmediatamente del paquete si la aplicación no es Security.

Esta regla de exclusión se estructura como sigue:

  • Matching Criteria > Match syslog application (tag) en Security.

  • Matching Criteria > Invert matching en Negate match: Execute this rule if the upper conditions are not fulfilled.

  • Outcome & Action > Rule type en Skip this rule pack, continue rule execution with next rule pack

Cualquier mensaje que no proceda del registro de seguridad será "rechazado" por la primera regla de este paquete. Esto no sólo simplifica el resto de reglas del paquete, sino que también acelera el proceso, ya que en la mayoría de los casos no es necesario comprobar las demás reglas en absoluto.

6. Acciones

6.1. Tipos de acciones

La Consola de eventos incluye tres tipos de acciones, que puedes ejecutar manualmente o al abrir o cancelar eventos:

  • Ejecución de scripts shell escritos por ti mismo.

  • Envío de correos electrónicos autodefinidos.

  • Generación de notificaciones Checkmk

6.2. Scripts shell y correos electrónicos

Primero debes definir los correos electrónicos y los scripts en la configuración de la Consola de eventos, que encontrarás en la entrada Actions (Emails & Scripts):

ec add action

Ejecutar scripts shell

Con el botón Add new action puedes crear una nueva acción. El siguiente ejemplo muestra cómo crear un simple script shell como una acción del tipo Execute Shell Script. Los detalles de los eventos están disponibles para el script a través de variables de entorno, por ejemplo la $CMK_ID del evento, la $CMK_HOST, el texto completo $CMK_TEXT o el primer grupo de coincidencia como $CMK_MATCH_GROUP_1. Para obtener una lista completa de las variables de entorno disponibles, consulta la ayuda en línea.

ec define action

Las versiones anteriores de Checkmk permitían variables del entorno, así como macros como $TEXT$, que se sustituían antes de ejecutar el script. Debido al peligro de que un atacante pueda inyectar comandos a través de un paquete UDP especialmente diseñado que se ejecute con los privilegios del proceso de Checkmk, no debes hacer uso de macros. Actualmente, las macros siguen admitiéndose por motivos de compatibilidad, pero nos reservamos el derecho a eliminarlas en una versión futura de Checkmk.

El script de ejemplo que se muestra en la captura de pantalla crea el archivo tmp/test.out en el directorio del site, en el que escribe un texto que contiene los valores concretos de las variables para el último evento correspondiente:

cat << EOF > ${OMD_ROOT}/tmp/test.out
Something happened:

Event-ID: $CMK_ID
Host: $CMK_HOST
Application: $CMK_APPLICATION
Message: $CMK_TEXT
EOF

Los scripts se ejecutan en el siguiente entorno:

  • /bin/bash se utiliza como intérprete.

  • El script se ejecuta como usuario del site con el directorio de inicio del site (por ejemplo, /omd/sites/mysite).

  • ¡Mientras se ejecuta el script se detiene el proceso de otros eventos!

Si es posible que tu script contenga tiempos de espera, puedes hacer que se ejecute de forma asíncrona utilizando el spooler de Linux at. Para ello, crea el script en un archivo separado local/bin/myaction e inícialo con el comando at, por ejemplo:

echo "$OMD_ROOT/local/bin/myaction '$HOST$' '$TEXT$' | at now

Enviar correos electrónicos

El tipo de acción Send Email envía un simple correo electrónico de texto. En realidad, también podrías hacerlo con un script, por ejemplo utilizando el comando de línea de comandos mail. Pero de esta forma es más cómodo. Ten en cuenta que también se permiten marcadores de posición en los campos Recipient email address y Subject.

ec define action email

6.3. Notificaciones a través de Checkmk

Además de ejecutar scripts y enviar correos electrónicos (simples), la CE tiene un tercer tipo de acción: enviar notificaciones a través del sistema de notificaciones Checkmk. La CE puede generar notificaciones de la misma forma que las notificaciones de host y servicios de la monitorización activa. Las ventajas en comparación con los simples correos electrónicos descritos anteriormente son obvias:

  • La notificación se configura para la monitorización activa y la basada en eventos, juntas en una ubicación central.

  • Dispone de funciones como notificaciones masivas, correos electrónicos HTML y otras funciones útiles.

  • Las reglas de notificación definidas por el usuario, la desactivación de notificaciones y similares funcionan como de costumbre.

El tipo de acción Send monitoring notification siempre procesa automáticamente y no necesita ser configurado.

Como los eventos difieren algo de los host o servicios "normales", hay algunas peculiaridades en sus notificaciones, que puedes conocer con más detalle en la siguiente sección.

Asignación a hosts existentes

Los eventos pueden proceder de cualquier host, independientemente de si están configurados en la monitorización activa o no. Al fin y al cabo, los puertos syslog y SNMP están abiertos a todos los hosts de la red. Como resultado, los atributos extendidos del host, como alias, tags del host, contactos, etc., no están disponibles inicialmente. Por eso, en particular, las condiciones de las reglas de notificación no funcionan necesariamente como cabría esperar.

Por ejemplo, al notificar, la CE intenta encontrar un host dentro de la monitorización activa que coincida con el evento. Para ello se utiliza el mismo procedimiento que para la visibilidad de los eventos. Si se encuentra un host de este tipo, se toman los siguientes datos de este host

  • La ortografía correcta del nombre del host.

  • El alias del host

  • La dirección IP principal configurada en Checkmk.

  • Los tags del host

  • La carpeta en la GUI de Configuración

  • La lista de contactos y grupos de contacto

Como resultado, el nombre del host en la notificación procesada puede no coincidir exactamente con el nombre del host en el mensaje original. Sin embargo, la codificación de los textos de notificación que se ajustan a los de la monitorización activa simplifica la formulación de reglas de notificación uniformes que incluyen condiciones que se aplican al nombre del host.

El mapeo se realiza en tiempo real enviando una consulta Livestatus al core de monitorización que se ejecuta en el mismo site que el CE que recibió el mensaje. Por supuesto, ¡esto sólo funciona si los mensajes syslog, Trap SNMP, etc. se envían siempre al site Checkmk en el que se está monitorizando activamente el host!

Si la consulta no funciona o no se puede encontrar el host, se aceptarán datos sustitutivos:

Nombre del host

El nombre del host del evento.

Alias del host

El nombre del host que se utilizará como alias.

Dirección IP

El campo dirección IP contiene la dirección del remitente original del mensaje.

Tags del host

El host no recibirá ningún tag del host. Si tienes grupos de tags de host con tags vacíos, el host adoptará esos tags, pero de lo contrario no tendrá tags del grupo. Ten esto en cuenta cuando definas condiciones referentes a tags del host en las reglas de notificación.

Configurar carpeta GUI

Sin carpeta. Todas las condiciones que van a una carpeta específica son, por tanto, incumplibles, incluso en el caso de la carpeta principal.

Contactos

La lista de contactos está vacía. Si hay contactos de reserva, se introducirán.

Si no se puede asignar el host en la monitorización activa, esto puede dar lugar, por supuesto, a problemas con las notificaciones. Por un lado, debido a las condiciones, que entonces pueden dejar de aplicarse, y también debido a la selección de contactos. Para estos casos, puedes modificar tus reglas de notificación, de modo que las notificaciones de la Consola de eventos se gestionen específicamente utilizando sus propias reglas. Para ello hay una condición independiente con la que puedes hacer coincidir positivamente sólo a las notificaciones de la CE, o viceversa, excluirlas:

ec notification condition

Campos de notificación restantes

Para que las notificaciones de la CE pasen a través del sistema de notificación de la monitorización activa, la CE debe adaptarse para ajustarse a su esquema. En el proceso, los campos de datos típicos de una notificación se rellenan de la forma más eficaz posible. Acabamos de describir cómo se determinan los datos del host. Otros campos son:

Tipo de notificación

Las notificaciones de la CE siempre se consideran mensajes de servicio.

Descripción del servicio

Es el contenido del campo Application del evento. Si este campo está vacío, se introducirá Event Console.

Número de notificación

Está fijado en 1, por lo que no es posible el escalado en este caso, al igual que cuando se producen varios eventos consecutivos del mismo tipo independientemente unos de otros. Actualmente la CE no admite la notificación repetida cuando un evento no ha sido reconocido.

Fecha/Hora

Para los eventos contabilizados, es la hora de la última aparición de un mensaje asociado al evento.

Salida del Plugin

El contenido textual del evento.

Estado del servicio

Estado del evento, es decir, OK, WARN, CRIT o UNKNOWN.

Estado anterior

Dado que los eventos no tienen estado previo, aquí se introduce siempre OK para los eventos normales, y CRIT cuando se cancela un evento. Esta regla es lo más parecido a lo que se necesita para las reglas de notificación que tienen una condición sobre el cambio de estado exacto.

Definir manualmente grupos de contacto

Como se ha descrito anteriormente, puede que no sea posible determinar automáticamente los contactos para un evento. En tales casos, puedes especificar los grupos de contacto directamente en la regla de notificación que se va a utilizar. Es importante que no olvides marcar la caja Use in notifications:

ec set contact groups

Conmutador global para notificaciones

Existe un conmutador central para notificaciones en el snap-in Master control. Esto también se aplica a las notificaciones reenviadas por la CE:

The Master control snap-in with notifications switched off.

Al igual que con la asignación de host, la consulta del conmutador por parte de la CE requiere el acceso de Livestatus al núcleo local de monitorización. Una consulta realizada con éxito puede verse en el archivo de registro de la Consola de Eventos:

var/log/mkeventd.log
[1482142567.147669] Notifications are currently disabled. Skipped notification for event 44

Tiempos de mantenimiento programados del host

La Consola de eventos es capaz de detectar host que se encuentran en un tiempo de mantenimiento programado y no envía notificaciones en tales situaciones. En el archivo de registro tendrá el siguiente aspecto:

var/log/mkeventd.log
[1482144021.310723] Host myserver123 is currently in scheduled downtime. Skipping notification of event 433.

Por supuesto, esto también requiere que el host se encuentre correctamente en la monitorización activa. Si esto no se consigue, se asume que el host no está en tiempo de mantenimiento y, en cualquier caso, se generará una notificación.

Macros adicionales

Cuando escribas tus propios scripts de notificación, especialmente para las notificaciones procedentes de la Consola de eventos, dispondrás de una serie de variables adicionales que describen el evento original (a las que se accede como siempre con el prefijo NOTIFY_):

EC_ID

ID del evento.

EC_RULE_ID

ID de la regla que creó el evento.

EC_PRIORITY

Prioridad del syslog como un número desde 0 (emerg) hasta 7 (debug).

EC_FACILITY

Facilidad de syslog - también como un número. El rango de valores va de 0 (kern) a 32 (snmptrap).

EC_PHASE

Fase del evento. Como sólo los eventos abiertos desencadenan acciones, debe ser open. Para una notificación manual de un evento ya reconocido, ack debe estar aquí.

EC_COMMENT

El campo de comentario del evento.

EC_OWNER

El campo Owner.

EC_CONTACT

El campo de comentario con la información de contacto específica del evento.

EC_PID

El ID del proceso que envió el mensaje (para eventos syslog).

EC_MATCH_GROUPS

Los grupos de concordancia de coincidencias en la regla.

EC_CONTACT_GROUPS

Los grupos de contacto opcionales definidos manualmente en la regla.

6.4. Ejecutar acciones

Más arriba en Comandos ya has aprendido sobre la ejecución manual de acciones por parte del operador. Más emocionante es la ejecución automática de acciones, que puedes configurar con reglas CE en la sección Outcome & Action:

ec rule actions

Aquí puedes seleccionar una o más acciones que se ejecutarán siempre que se abra o cancele un evento en función de la regla. Para esto último puedes utilizar la lista Do cancelling actions para especificar si la acción sólo debe ejecutarse si el evento cancelado ya ha llegado a la fase open. Al utilizar el recuento o el retraso puede ocurrir que se cancelen eventos que aún están en estado de espera y todavía no son visibles para el usuario .

La ejecución de las acciones se registra en el archivo de registro var/log/mkeventd.log:

var/log/mkeventd.log
[1481120419.712534] Executing command: ACTION;1;cmkadmin;test
[1481120419.718173] Exitcode: 0

También se escriben en el archivo.

7. Traps SNMP

7.1. Configurar la recepción de traps SNMP

Como la Consola de eventos tiene su propio motor SNMP integrado, configurar la recepción de traps SNMP es muy sencillo. No necesitas snmptrapd del sistema operativo. Si ya lo tienes en ejecución, detenlo.

Como se describe en la sección sobre la configuración de la Consola de eventos, utiliza omd config para activar el receptor de trampas en este site:

ec config traps

Dado que en cada servidor el puerto UDP para las trampas sólo puede ser utilizado por un proceso, esto sólo puede hacerse en un site Checkmk por ordenador. Al iniciar el site, en la línea que contiene mkeventd puedes comprobar si se ha habilitado la recepción de trampas:

OMD[mysite]:~$ omd start
Creating temporary filesystem /omd/sites/mysite/tmp...OK
Starting mkeventd (builtin: snmptrap)...OK
Starting liveproxyd...OK
Starting mknotifyd...OK
Starting rrdcached...OK
Starting cmc...OK
Starting apache...OK
Starting dcd...OK
Starting redis...OK
Initializing Crontab...OK

Para que los traps SNMP funcionen, el emisor y el receptor deben estar de acuerdo en ciertas credentials. En el caso de SNMP v1 y v2c se trata de una simple contraseña, que se conoce como "Comunidad". Con la versión 3 necesitas algunas credenciales más. Estas credenciales se configuran en los ajustes de la Consola de eventos, en Credentials for processing SNMP traps. Puedes utilizar el botón Add new element para configurar varias credenciales diferentes que los dispositivos pueden utilizar como alternativas:

ec trap credentials

La parte mucho más compleja es ahora, por supuesto, especificar la dirección de destino de todos los dispositivos que se van a monitorizar y configurar aquí también las credenciales.

7.2. Probando

Lamentablemente, muy pocos dispositivos ofrecen capacidades de prueba significativas. Al menos, puedes probar fácilmente la recepción de trampas manualmente utilizando la propia Consola de eventos enviando una trampa de prueba, preferiblemente desde otro sistema Linux. Esto puede hacerse con el comando snmptrap. El siguiente ejemplo envía una trampa a 192.168.178.11. El nombre del host del remitente se especifica después de .1.3.6.1 y debe ser resoluble o especificarse como una dirección IP (aquí 192.168.178.30):

user@host:~$ snmptrap -v 1 -c public 192.168.178.11 .1.3.6.1 192.168.178.30 6 17 '' .1.3.6.1 s "Just kidding"

Si has configurado Log level como Verbose logging en los ajustes, podrás ver la recepción y evaluación de las trampas en el archivo de registro de la CE:

var/log/mkeventd.log
[1482387549.481439] Trap received from 192.168.178.30:56772. Checking for acceptance now.
[1482387549.485096] Trap accepted from 192.168.178.30 (ContextEngineId "0x80004fb8054b6c617070666973636816893b00", ContextName "")
[1482387549.485136] 1.3.6.1.2.1.1.3.0                        = 329887
[1482387549.485146] 1.3.6.1.6.3.1.1.4.1.0                    = 1.3.6.1.0.17
[1482387549.485186] 1.3.6.1.6.3.18.1.3.0                     = 192.168.178.30
[1482387549.485219] 1.3.6.1.6.3.18.1.4.0                     =
[1482387549.485238] 1.3.6.1.6.3.1.1.4.3.0                    = 1.3.6.1
[1482387549.485258] 1.3.6.1                                  = Just kidding

En caso de credenciales incorrectas, sólo verás una única línea:

var/log/mkeventd.log
[1482387556.477364] Trap received from 192.168.178.30:56772. Checking for acceptance now.

Y así es como se ve un evento generado por una trampa de este tipo:

ec trap event

7.3. Convertir números en texto: Traducir traps

SNMP es un protocolo binario y es muy parco en descripciones textuales de los mensajes. El tipo de trap se comunica internamente mediante una secuencia de números en los llamados OID, que se muestran como secuencias de números separadas por puntos (por ejemplo, 1.3.6.1.6.3.18.1.3.0).

Con la ayuda de los llamados archivos MIB, la Consola de eventos puede traducir estas secuencias numéricas en textos. Así, por ejemplo, 1.3.6.1.6.3.18.1.3.0 se convierte en el texto SNMPv2-MIB::sysUpTime.0.

La traducción de las trampas puede activarse en los ajustes de la Consola de eventos:

ec translate traps

La trampa de prueba anterior genera ahora un evento ligeramente distinto:

ec trap event translated

Si has activado la opción Add OID descriptions, todo se vuelve mucho más detallado -y más confuso-. Sin embargo, ayuda a comprender mejor lo que hace realmente una trampa:

ec trap event translated2

7.4. Cargar tus propias MIB

Lamentablemente, las ventajas del código abierto aún no se han extendido a los autores de archivos MIB, por lo que nosotros, desde el proyecto Checkmk, lamentablemente no podemos ofrecer archivos MIB específicos de un proveedor. Sólo viene preinstalada una pequeña colección de MIB básicas gratuitas que, por ejemplo, ofrece una traducción de sysUpTime.

Sin embargo, puedes añadir estos archivos a la Consola de eventos del módulo SNMP MIBs for trap translation a través de la entrada de menú Add one or multiple MIBs para cargar tus propios archivos MIB, como se ha hecho a continuación con algunos MIB de los Smart Switches de Netgear:

ec mibs for translation

Notas sobre las MIBs:

  • En lugar de archivos sueltos, también puedes subir archivos ZIP con colecciones de MIB en una sola acción.

  • Las MIB tienen dependencias entre sí. Checkmk te mostrará las MIB que falten.

  • Las MIB cargadas también se utilizan en la línea de comando mediante cmk --snmptranslate.

8. Monitorización de archivos de registro

El agente Checkmk puede analizar los archivos de registro mediante el plugin de logwatch. Este plugin proporciona, en primer lugar, su propia monitorización de los archivos de registro independientemente de la Consola de eventos, incluida la posibilidad de reconocer los mensajes directamente en la monitorización. También existe la posibilidad de transferir los mensajes encontrados por el plugin 1:1 a la Consola de eventos.

En el agente de Windows, la monitorización de archivos de registro está permanentemente integrada, en forma de un plugin para la evaluación de archivos de texto y otro para la evaluación de registros de eventos de Windows. El plugin mk_logwatch, codificado en Python, está disponible para Linux y Unix. Se puede acceder a los tres a través de Agent bakery para su instalación o configuración. Utiliza para ello los siguientes conjuntos de reglas:

  • Text logfiles (Linux, Solaris, Windows)

  • Finetune Windows Eventlog monitoring

La configuración precisa del Plugin Logwatch no es objeto de este artículo. Lo importante, sin embargo, es que sigas realizando el mejor prefiltrado posible de los mensajes en el propio Plugin Logwatch y no te limites a enviar el contenido completo de los archivos de texto a la Consola de eventos.

No confundas esto con la reclasificación posterior a través del conjunto de reglas Logfile patterns. Esto sólo puede cambiar el estado de los mensajes que ya han sido enviados por el agente. Sin embargo, si ya has configurado estas plantillas y quieres pasar simplemente de Logwatch a la Consola de eventos, puedes mantener los patrones. Para ello, las reglas de reenvío (Logwatch Event Console Forwarding) incluyen la opción Reclassify messages before forwarding them to the EC.

En este caso, todos los mensajes pasan por un total de tres secuencias de reglas: en el agente, a través de la reclasificación y ¡en la Consola de eventos!

Ahora cambia Logwatch de forma que los mensajes encontrados por los plugins ya no se controlen con el check plugin normal de Logwatch, sino que simplemente se reenvíen 1:1 a la Consola de eventos y se procesen allí. Esto se hace con el conjunto de reglas Logwatch Event Console Forwarding:

ec logwatch forwarding

Algunas notas al respecto:

Si tienes un entorno distribuido en el que cada site no tiene su propia Consola de eventos, los sites remotos deben reenviar sus mensajes al site central a través de syslog. El valor predeterminado para esto es UDP, sin embargo, no es un protocolo seguro. Una solución mejor es utilizar syslog a través de TCP, pero tendrás que habilitarlo en el site central (omd config).

Cuando reenvíes, especifica cualquier Syslog facility. De este modo podrás reconocer fácilmente los mensajes reenviados en la CE. Muy adecuados para ello son local0 a local7.

Con List of expected logfiles puedes monitorizar la lista de archivos de registro esperados y recibir un aviso si ciertos archivos no se encuentran como se esperaba.

Importante: Guardar la regla por sí sola no consigue nada. Esta regla sólo se activa durante un descubrimiento de servicios. Sólo cuando vuelvas a ejecutarla, se eliminarán los servicios anteriores de Logwatch y, en su lugar, se creará un nuevo servicio llamado Log Forwarding para cada host.

ec log forwarding check

Este check también te mostrará más adelante si se produce algún problema al reenviarlo a la Consola de eventos.

8.1. Nivel de servicio y prioridades de syslog

Como los archivos de registro reenviados a menudo carecen de clasificación syslog en función del formato utilizado, puedes definir la reclasificación en el conjunto de reglas Logwatch Event Console Forwarding en Log Forwarding. Además, en los conjuntos de reglas que definas como parte de Rule packs siempre es posible establecer el estado y los niveles de servicio individualmente.

9. Estado de los eventos en la monitorización activa

Si también quieres ver qué host de la monitorización activa tienen actualmente eventos problemáticos abiertos, puedes añadir un check activo para cada host que resuma el estado actual del evento del host. Para un host sin eventos abiertos, tendrá el siguiente aspecto:

ec events check none

Si sólo hay eventos en estado OK, el check muestra su número, pero permanece verde:

ec events check ok

He aquí un ejemplo de un caso con eventos abiertos en estado CRIT:

ec events check crit

Creas este check activo utilizando una regla del conjunto de reglas Check event state in Event Console. También puedes especificar si los eventos que ya han sido reconocidos deben seguir contribuyendo al estado o no:

ec check remote

Con la opción Application (regular expression) puedes restringir el check a los eventos que tengan un texto específico en el campo aplicación. En este caso puede tener sentido tener más de un check de eventos en un host y separar los checks por aplicación. Para que se distingan por su nombre, también necesitas la opción Item (used in service description), que añade un texto que tú especifiques al nombre del servicio.

Si tu Consola de eventos no se está ejecutando en el mismo site Checkmk que el que también está monitorizando el host, necesitas configurar Access to Event Console para un acceso remoto vía TCP:

ec events check

Para que esto funcione, la Consola de eventos debe permitir el acceso vía TCP. Puedes configurarlo en los ajustes de la Consola de eventos a la que se va a acceder:

ec remote access

10. El archivo

10.1. Cómo funciona el archivo

La Consola de eventos mantiene un registro de todos los cambios que experimenta un evento. Este registro puede encontrarse de dos formas:

  • En la vista de tabla global Recent event history, que puedes encontrar en Monitor > Event Console.

  • En los detalles de un evento a través del elemento de menú Event Console Event > History of Event.

En la vista de tabla global hay un filtro que sólo muestra los eventos de las últimas 24 horas. Sin embargo, como es habitual, puedes personalizar los filtros.

La siguiente figura muestra el historial del evento 33, que ha sufrido un total de cuatro cambios. Primero se creó el evento (NEW), luego se cambió manualmente el estado de OK a WARN (CHANGESTATE), después se reconoció con un comentario añadido (UPDATE), y finalmente se archivó/eliminó el evento (DELETE):

ec history

El archivo contiene los siguientes tipos de acción que se muestran en la columna Action:

Tipo de acción Descripción

NEW

El evento se creó de nuevo (debido a un mensaje recibido o a una regla que esperaba un mensaje que no apareció).

UPDATE

El evento fue editado por el operador (cambio de comentario, información de contacto, Reconocimiento).

DELETE

El evento fue archivado.

CANCELLED

El evento se canceló automáticamente mediante un mensaje OK.

CHANGESTATE

El operador cambió el estado del evento.

ARCHIVED

El evento se archivó automáticamente porque no se aplicó ninguna regla y Force message archiving estaba activado en la configuración global.

ORPHANED

El evento se archivó automáticamente porque mientras estaba en la fase counting, se eliminó su regla asociada.

COUNTREACHED

El evento se movió de counting a open porque se alcanzó el número de mensajes configurado.

COUNTFAILED

El evento se archivó automáticamente porque no se alcanzó el número de mensajes requerido en counting.

NOCOUNT

El evento se archivó automáticamente porque mientras estaba en la fase counting, su regla asociada se cambió a "no contar".

DELAYOVER

El evento se abrió porque expiró el retraso configurado en la regla.

EXPIRED

El evento se archivó automáticamente porque su tiempo de vida configurado había expirado.

EMAIL

Se envió un correo electrónico.

SCRIPT

Se ejecutó una acción automática (script).

AUTODELETE

El evento se archivó automáticamente inmediatamente después de abrirse, porque así estaba configurado en su regla correspondiente.

10.2. Ubicación del archivo

Como ya se ha mencionado, el archivo de la Consola de eventos no se ha diseñado como un archivo syslog completo. Para que la implementación y, especialmente, la administración sean lo más sencillas posible, se ha omitido un backend de base de datos. En su lugar, el archivo se escribe en archivos de texto sencillos. Cada entrada consta de una línea de texto, que contiene columnas separadas por pestañas. Puedes encontrar los archivos en ~/var/mkeventd/history:

OMD[mysite]:~$ ll var/mkeventd/history/
total 1328
-rw-rw-r-- 1 stable stable 131 Dec 4 23:59 1480633200.log
-rw-rw-r-- 1 stable stable 1123368 Dec 5 23:39 1480892400.log
-rw-rw-r-- 1 stable stable 219812 Dec 6 09:46 1480978800.log

Por defecto, se inicia automáticamente un nuevo archivo cada día. En los ajustes de la Consola de eventos puedes personalizar la rotación del archivo. El ajuste Event history logfile rotation te permite cambiar a una rotación semanal.

Los nombres de los archivos se ajustan a la marca de tiempo Unix de la hora de creación del archivo (segundos desde el 1/1/1970 UTC).

Los archivos se conservan durante 365 días, a menos que lo cambies en el ajuste Event history lifetime. Además, los archivos también son registrados por la gestión central de espacio en disco de Checkmk, que se puede configurar en los Ajustes globales en Site management. En este caso, se aplica el límite de tiempo más corto establecido en cada caso. La gestión global tiene la ventaja de que, si el espacio libre en disco se vuelve marginal, borra automáticamente los datos históricos de Checkmk de forma coherente, empezando por los más antiguos.

Si tienes problemas de espacio, también puedes eliminar manualmente los archivos del directorio o intercambiarlos. No pongas archivos comprimidos ni de ningún otro tipo en este directorio.

10.3. Archivo automático

A pesar de las limitaciones de los ficheros de texto, teóricamente es posible archivar un gran número de mensajes en la Consola de eventos. La escritura en los ficheros de texto del archivo es muy eficaz, pero a costa de una búsqueda posterior menos eficiente. Puesto que los ficheros sólo tienen como índice el periodo de solicitud, para cualquier solicitud hay que leer y buscar completamente todos los ficheros relevantes.

Normalmente, la CE sólo escribirá en el archivo aquellos mensajes para los que realmente se haya abierto un evento, pero puedes hacerlo de dos formas distintas para ampliarlo a todos los eventos:

  1. Creas una regla que coincida con todos los eventos (posteriores) y en Outcome & actions activas la opción Delete event immediately after the actions.

  2. Activas el interruptor Force message archiving en la configuración de la Consola de eventos.

Esto último garantiza que los mensajes que no estén sujetos a ninguna regla se escriban, no obstante, en el archivo (tipo de acción ARCHIVED).

11. Rendimiento y puesta a punto

11.1. 11.1. Proceso de mensajes

Incluso en tiempos en que los servidores tienen 64 núcleos y 2 TB de memoria principal, el rendimiento del software sigue siendo importante. Especialmente en el proceso de eventos, los mensajes entrantes pueden perderse en situaciones extremas.

La razón es que ninguno de los protocolos utilizados (Syslog, Trap SNMP, etc.) prevé el control de flujo. Si miles de host envían simultáneamente mensajes cada segundo, el receptor no tiene ninguna posibilidad de ralentizarlos.

Por eso, en entornos algo más grandes, es importante que vigiles los tiempos de proceso de los mensajes, lo que depende del número de reglas que hayas definido y de cómo estén estructuradas.

Medir el rendimiento

Para medir tu rendimiento existe un snap-in independiente para la barra lateral con el nombre Event Console Performance. Puedes incluirlo de la forma habitual con :

ec performance

Los valores que se muestran aquí son promedios de aproximadamente el último minuto. Una tormenta de eventos que dure sólo unos segundos no puede leerse aquí directamente, pero las cifras se han suavizado un poco y, por tanto, son más fáciles de leer.

Para probar el máximo rendimiento, puedes generar artificialmente una tormenta de mensajes sin clasificar (¡por favor, sólo en el sistema de pruebas!), por ejemplo, en un bucle de shell escribiendo continuamente el contenido de un archivo de texto en la tubería de eventos.

OMD[mysite]:~$ while true ; do cat /etc/services > tmp/run/mkeventd/events ; done

Las lecturas más importantes del snap-in tienen el siguiente significado:

Valor Significado

Received messages

Número de mensajes recibidos actualmente por segundo.

Rule tries

Número de reglas que se intentan. Esto proporciona información valiosa sobre la eficacia de la secuencia de reglas, especialmente junto con el siguiente parámetro.

Rule hits

Número de reglas por segundo que están golpeando actualmente. También puede tratarse de reglas que descartan mensajes o que simplemente cuentan. Por lo tanto, no todas las reglas golpeadas dan lugar a un evento.

Rule hit ratio

La relación entre Rule tries y Rule hits. En otras palabras: Cuántas reglas tiene que probar la CE antes de que una (finalmente) surta efecto. En el ejemplo de la captura de pantalla, la tasa es alarmantemente pequeña.

Created events

Número de nuevos eventos creados por segundo. Dado que la Consola de eventos sólo debe mostrar problemas relevantes (comparables a los problemas de host y servicio de la monitorización), ¡el número 0.73/s de la captura de pantalla sería, por supuesto, demasiado alto en la práctica!

Processing time per message

Aquí puedes leer cuánto tiempo se tardó en procesar un mensaje. Atención: En general, no es la inversa de Received messages. Porque faltan los tiempos en los que la Consola de eventos no tuvo nada que hacer, simplemente porque no entraron mensajes. Aquí se mide realmente el tiempo real puro transcurrido entre la llegada de un mensaje y la finalización del proceso. Puedes ver aproximadamente cuántos mensajes puede gestionar la CE en un tiempo determinado. Ten en cuenta también que no se trata de tiempo de CPU, sino de tiempo real. En un sistema con suficientes CPUs libres, estos tiempos son aproximadamente los mismos. Pero en cuanto el sistema esté tan cargado que no todos los procesos obtengan siempre una CPU, el tiempo real puede llegar a ser mucho mayor.

Consejos de ajuste

Puedes ver cuántos mensajes puede procesar por segundo la Consola de eventos en Processing time per message. Este tiempo suele estar relacionado con el número de reglas que hay que probar antes de procesar un mensaje. Aquí tienes varias opciones de optimización:

  • Las reglas que excluyen muchos mensajes deben colocarse, en la medida de lo posible, al principio de la secuencia de reglas.

  • Trabaja con paquetes de reglas para agrupar conjuntos de reglas relacionadas. La primera regla de cada paquete debe abandonar el paquete inmediatamente si no se cumple la condición base común.

Además, hay una optimización en la CE basada en la prioridad y la facilidad del syslog. Para cada combinación de prioridad y facilidad, se crea internamente una secuencia de reglas independiente en la que sólo se incluyen las reglas que son relevantes para los mensajes de esta combinación.

Cada regla que contenga una condición sobre la prioridad, la facilidad o, preferiblemente, ambas, no se incluirá en todas estas cadenas de reglas, sino, de forma óptima, sólo en una. Esto significa que no es necesario comprobar la regla para mensajes con una clasificación syslog diferente.

Tras un reinicio, en ~/var/log/mkeventd.log verás un resumen de las cadenas de reglas optimizadas:

var/log/mkeventd.log
[8488808306.233330]  kern        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233343]  user        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233355]  mail        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233367]  daemon      : emerg(120) alert(89) crit(89) err(89) warning(89) notice(89) info(89) debug(89)
[8488808306.233378]  auth        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233389]  syslog      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233408]  lpr         : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233482]  news        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233424]  uucp        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233435]  cron        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233446]  authpriv    : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233457]  ftp         : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233469]  (unused 12) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233480]  (unused 13) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233498]  (unused 13) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233502]  (unused 14) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233589]  local0      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233538]  local1      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233542]  local2      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233552]  local3      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233563]  local4      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233574]  local5      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233585]  local6      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233595]  local7      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233654]  snmptrap    : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)

En el ejemplo anterior puedes ver que, en cualquier caso, hay 67 reglas que deben comprobarse. Para los mensajes de la instalación daemon son relevantes 89 reglas, sólo para la combinación daemon/emerg deben comprobarse 120 reglas. Cada regla que recibe una condición sobre la prioridad o la instalación reduce aún más el número de 67.

Por supuesto, ¡sólo puedes establecer estas condiciones si estás seguro de que las cumplen los mensajes correspondientes!

11.2. El recuento de eventos actuales

El número de eventos actuales también puede afectar al rendimiento de la CE, es decir, cuando se descontrola gravemente. Como ya se ha dicho, la CE no debe considerarse como un sustituto de un archivo syslog, sino sólo para mostrar los "problemas actuales". La Consola de eventos puede gestionar ciertamente varios miles de problemas, pero ése no es su verdadero propósito.

En cuanto el número de eventos actuales supera unos 5.000, el rendimiento empieza a deteriorarse notablemente. Por un lado, esto se nota en la GUI, que reacciona más lentamente a las peticiones. Por otro, el proceso también se vuelve más lento, ya que en algunas situaciones hay que comparar los mensajes con todos los eventos actuales. Los requisitos de memoria también pueden llegar a ser problemáticos.

Por razones de rendimiento, la Consola de eventos siempre guarda todos los eventos actuales en la RAM. Éstos se escriben en el archivo ~/var/mkeventd/status una vez por minuto (ajustable) y al finalizar el procesamiento. Si éste se hace muy grande (por ejemplo, más de 50 megabytes), este proceso también se hace cada vez más lento. Puedes comprobar rápidamente el tamaño actual con ll. (alias de ls -alF):

OMD[mysite]:~$ ll -h var/mkeventd/status
-rw-r--r-- 1 mysite mysite 386K Dez 14 13:46 var/mkeventd/status

Si tienes demasiados eventos actuales debido a una regla torpe (por ejemplo, una que coincide en todo), no es razonablemente posible una eliminación manual a través de la GUI. En este caso, simplemente eliminar el archivo de estado ayudará:

OMD[mysite]:~$ omd stop mkeventd
Stopping mkeventd...killing 17436......OK
OMD[mysite]:~$ rm var/mkeventd/status
OMD[mysite]:~$ omd start mkeventd
Starting mkeventd (builtin: syslog-udp)...OK

Atención: Por supuesto, se perderán todos los eventos actuales, así como el contador almacenado y otros estados. En particular, los nuevos eventos volverán a empezar con el ID 1.

Protección automática contra desbordamiento

La Consola de eventos tiene una protección automática contra el "desbordamiento", que limita el número de eventos actuales por host, por regla y globalmente. No sólo se cuentan los eventos abiertos, sino también los eventos en otras fases, como delayed o counting. Los eventos archivados no se cuentan.

Esto te protegerá en situaciones en las que, debido a un problema sistemático en tu red, se estén inundando miles de eventos críticos y la Consola de eventos se "apagaría". Por un lado, esto evita una degradación del rendimiento de la Consola de eventos, que tendría que retener demasiados eventos en su memoria principal. Por otro lado, la Vista general para el operador está (en cierto modo) protegida y los eventos que no forman parte de la tormenta permanecen visibles.

Una vez alcanzado el límite, se producirá una de las siguientes acciones:

  • Se detiene la creación de nuevos eventos (para este host, regla o globalmente).

  • Lo mismo, pero además se crea un "evento de desbordamiento".

  • Lo mismo, pero además se notifica a los contactos apropiados.

  • Como alternativa a las tres variantes anteriores, también puedes hacer que se elimine el evento más antiguo para dejar espacio al nuevo.

Los límites, así como el efecto asociado al alcanzarlos, se definen en la configuración de la Consola de eventos con Limit amount of current events. La siguiente figura muestra la configuración por defecto:

ec limit open events

Si has habilitado un valor con …​create overflow event, cuando se alcance el límite, se creará un único evento artificial, informando al operador de la situación de error:

ec overflow event

Si además has habilitado un valor con …​notify contacts, se notificará a los contactos adecuados mediante la notificación de Checkmk. Esa notificación pasará por las reglas de notificación de Checkmk. Estas reglas no tienen por qué seguir la selección de contactos de la Consola de eventos, pero pueden modificarla. La siguiente tabla muestra qué contactos se seleccionan si has configurado Notify all contacts of the notified host or service (que es la configuración por defecto):

Límite Selección de contactos

por host

Los contactos del host, que se determinan del mismo modo que para la notificación de eventos a través de Checkmk.

por regla

Deja vacío el campo nombre del host. Si se definen grupos de contacto en la regla, se seleccionarán; de lo contrario, se aplicarán los contactos de reserva.

Global

Los contactos alternativos.

11.3. Archivo demasiado grande

Como se muestra arriba, la Consola de eventos tiene un archivo de todos los eventos y sus pasos de proceso, que se almacena en archivos de texto para facilitar su implementación y administración.

Los archivos de texto son difíciles de superar en cuanto a rendimiento al escribir datos, por ejemplo, utilizando bases de datos, sólo con un enorme esfuerzo de optimización. Esto se debe, entre otros factores, a la optimización de este tipo de acceso por parte de Linux y a la completa jerarquía de memoria de los discos y las SAN. Sin embargo, esto es a costa de los accesos de lectura. Como los archivos de texto no tienen índice, es necesaria una lectura completa al buscar en los archivos.

En su forma más simple, la Consola de eventos utiliza los nombres de los archivos de registro como índice para el tiempo de los eventos. Cuanto más limites el periodo de consulta, más rápida será la búsqueda.

Sin embargo, es muy importante que tu archivo no se haga demasiado grande. Si utilizas la Consola de eventos sólo para procesar mensajes de error reales, esto no puede ocurrir realmente. Si intentas utilizar la CE como sustituto de un archivo syslog real, esto puede dar lugar a archivos muy grandes.

Si te encuentras con una situación en la que tu archivo se ha hecho demasiado grande, puedes simplemente borrar los archivos más antiguos en ~/var/mkeventd/history/. Además, en Event history lifetime puedes limitar generalmente la vida útil de los datos para que su borrado sea el predeterminado en el futuro. Por defecto se almacenan 365 días. Tal vez puedas arreglártelas con bastante menos.

11.4. Medir el rendimiento a lo largo del tiempo

Checkmk inicia automáticamente un servicio para cada site de la Consola de eventos, que registra sus datos de rendimiento en curvas y también te avisa si se producen desbordamientos.

Siempre que hayas instalado un agente Linux en el servidor de monitorización, el check se encontrará automáticamente y se configurará como de costumbre:

ec check

El check viene con muchos tipos de mediciones interesantes, por ejemplo, el número de mensajes entrantes por cada periodo de tiempo y cuántos de ellos se descartaron:

ec graph message rate

La eficacia de tu secuencia de reglas se representa mediante una comparación entre las reglas comprobadas y las que funcionaron:

ec graph rule efficiency

Este gráfico muestra el tiempo medio que se tarda en procesar un mensaje:

ec graph processing time

También hay bastantes gráficos adicionales.

12. Monitorización distribuida

Cómo utilizar la Consola de eventos en una instalación con varios sitios Checkmk, consulta el artículo sobre monitorización distribuida.

13. La interfaz de estado

La Consola de eventos a través del socket Unix ~/tmp/run/mkeventd/status proporciona tanto acceso al estado interno como la posibilidad de ejecutar comandos. El protocolo utilizado aquí es un subconjunto de Livestatus muy restringido. A esta interfaz accede el núcleo de monitorización y pasa los datos a la GUI para proporcionar también una monitorización distribuida para la Consola de eventos.

Las siguientes restricciones se aplican al Livestatus simplificado de la Consola de eventos:

  • Las únicas cabeceras permitidas son Filter: y OutputFormat:.

  • Por lo tanto, no es posible KeepAlive y sólo se puede realizar una solicitud por conexión.

Están disponibles las siguientes tablas:

events

Lista de todos los eventos actuales.

history

Acceso al archivo. Una consulta en esta tabla accederá a los ficheros de texto del archivo. Asegúrate de utilizar un filtro sobre la hora de la entrada para evitar el acceso completo a todos los archivos.

status

Valores de estado y rendimiento de la CE. Esta tabla siempre tiene exactamente una fila.

Se pueden escribir comandos en el socket utilizando unixcat con una sintaxis muy sencilla:

OMD[mysite]:~$ echo "COMMAND RELOAD" | unixcat tmp/run/mkeventd/status

Están disponibles los siguientes comandos:

DELETE

Archiva un evento. Argumentos: ID del evento y abreviatura del usuario.

RELOAD

Recarga la configuración.

SHUTDOWN

Sale de la Consola de eventos.

REOPENLOG

Reabre el archivo de registro. Este comando es necesario para la rotación del archivo de registro.

FLUSH

Borra todos los eventos actuales y archivados.

SYNC

Inicia una actualización inmediata del archivo ~/var/mkeventd/status.

RESETCOUNTERS

Restablece los contadores de aciertos de regla (corresponde al elemento de menú Event Console > Reset counters de la GUI de configuración).

UPDATE

Ejecuta una actualización a partir de un evento. Los argumentos son, por orden, identificador del evento, abreviatura del usuario, Reconocimiento (0/1), comentario e información de contacto.

CHANGESTATE

Cambia los estados OK / WARN / CRIT / UNKNOWN de un evento. Los argumentos son el ID del evento, la abreviatura del usuario y el dígito de estado (0/1/2/3).

ACTION

Ejecuta una acción definida por el usuario sobre un evento. Los argumentos son el ID del evento, la abreviatura del usuario y el ID de la acción. El ID especial @NOTIFY representa una notificación sobre Checkmk.

14. Archivos y directorios

Ruta del archivo Descripción

var/mkeventd

Directorio de trabajo del daemon de eventos.

var/mkeventd/status

Estado actual completo de la Consola de eventos. Incluye principalmente todos los eventos abiertos en ese momento (y los que están en fase de transición, como counting, etc.). En caso de una configuración errónea que provoque muchos eventos abiertos, este archivo puede llegar a ser enorme y reducir drásticamente el rendimiento de la CE. En tal situación, puedes detener el servicio mkeventd, borrar el archivo y volver a iniciar el servicio para borrar todos los eventos abiertos a la vez.

var/mkeventd/history/

Ubicación del archivo.

var/log/mkeventd.log

Archivo de registro de la Consola de eventos.

etc/check_mk/mkeventd.d/wato/global.mk

La configuración global de la Consola de eventos en sintaxis Python.

etc/check_mk/mkeventd.d/wato/rules.mk

Todos tus paquetes de reglas y reglas configurados en sintaxis de Python.

tmp/run/mkeventd/events

Una tubería con nombre en la que puedes escribir mensajes directamente con echo u otros comandos para pasarlos a la CE. Asegúrate de que sólo una aplicación escribe en esta tubería en cada momento, de lo contrario los textos de los mensajes pueden mezclarse.

tmp/run/mkeventd/eventsocket

Un socket Unix que realiza la misma función que la tubería, pero permite que varias aplicaciones escriban en él simultáneamente. Para escribir en él, necesitas el comando unixcat o socat.

tmp/run/mkeventd/pid

El ID del proceso actual del daemon de eventos mientras se está ejecutando.

tmp/run/mkeventd/status

Un socket Unix que permite consultar el estado actual y enviar comandos. Las peticiones GUI van primero al núcleo de monitorización, que accede a este socket.

local/share/snmp/mibs

Archivos MIB cargados por ti para la traducción de Trap SNMP.

En esta página