Alertas de Centreon con la IA local Ollama

¡Muy buenas! La intención de este post es hacer un mero ejemplo de cómo podemos usar la IA en nuestro entorno de monitorización, en este primer documento lo orientaremos a la recepción de las alertas, en este caso de Centreon. Así que si estás aburrido de las notificaciones tradicionales, ha venido la IA para cambiarlo!

 

 

Lo dicho, en este primer post veremos cómo usar la IA de Ollama para que nos traslade las notificaciones de nuestro sistema de monitorización de una manera más amable, más humana… Si queremos podemos decirla que nos dé recomendaciones o consejos para actuar, o que lo haga en verso… La idea es que Centreon le mandará por API a Ollama cada vez que un Host o un Servicio tenga un problema, crearemos pues un par de scripts muy sencillos que los usaremos para que la alerta sea enviada a Ollama, con un texto donde le detallaremos qué queremos de ella y le pasaremos como argumentos el Host o Servicio que falla, así como su estado…

 

Empezamos por lo tanto creando esos 2 scripts, en mi caso usaré notificaciones con Telegram, así que si vas a usar mail u otro servicio esa parte la tendrás que hacer distinta.

 

Creamos el script para las notificaciones de los hosts, le llamamos ‘/usr/lib/centreon/plugins/notifica_telegram_ia_ollama_host.sh’ por ejemplo. En él le daremos las indicaciones oportunas que consideremos, yo os dejo mi ejemplo, tendréis que tener en cuenta de modificar la IP de Ollama, así como el Chat ID del grupo de Telegram, el Token de Telegram, el modelo de lenguaje LLM utilizado o por ejemplo la temperatura para que sea más o menos creativo. Este sería el contenido:

#!/bin/bash

texto="Por favor, genera un texto para una notificación que será enviada al smartphone del usuario con información útil. Eres un agente personal útil que genera texto para técnicos de sistemas. Tus respuestas pueden ser técnicas, no te ofrezcas como ayuda, ni des recomendaciones. El mensaje que tienes que decir es sobre un problema de tipo: "$1", en el equipo "$2" ya que está en el estado "$3". No saludes, no digas Hola y no te despidas, ni des las gracias por nada. La respuesta debe ser en Español y el mensaje debe ser breve."

texto_generado=$(/usr/bin/curl http://DIRECCION_IP_OLLAMA:11434/api/generate  -H "Content-Type: application/json" -d '{
  "model": "llama3",
  "prompt": "'"$texto"'",
  "temperature": 0.1,
  "stream": false,
  "max_length": 50
}' | jq -r '.response')

texto_generado_sin_comillas=`echo "$texto_generado" | sed 's/\"//g'`

/usr/bin/curl -X POST -H "Content-Type: application/json" -d '{
  "chat_id": "-XXXXXXXXXX",
  "text": "'"$texto_generado_sin_comillas"'"
}' "https://api.telegram.org/botTOKEN_BOT_TELEGRAM/sendMessage"

 

E igualmente deberemos generar el script que usará Centreon para notificar cualquier problema en los Servicios, para ello, igualmente creamos por ejemplo este script llamado ‘/usr/lib/centreon/plugins/notifica_telegram_ia_ollama_servicio.sh’ donde si os fijáis es muy parecido, pero tiene 1 argumento más.

#!/bin/bash

texto="Por favor, genera un texto para una notificación que será enviada al smartphone del usuario. Eres un agente personal que genera texto para técnicos de sistemas. Tus respuestas pueden ser técnicas. El mensaje que tienes que decir es sobre un problema de tipo: "$1", en el equipo "$2" ya que el servicio "$3" está en el estado "$4". No saludes. No te despidas. No des las gracias. La respuesta debe ser en Español. El mensaje debe ser breve, en un parrafo tu respuesta"

texto_generado=$(/usr/bin/curl http://DIRECCION_IP_OLLAMA:11434/api/generate  -H "Content-Type: application/json" -d '{
  "model": "llama3",
  "prompt": "'"$texto"'",
  "temperature": 0.1,
  "stream": false,
  "max_length": 50
}' | jq -r '.response')

texto_generado_sin_comillas=`echo "$texto_generado" | sed 's/\"//g'`

/usr/bin/curl -X POST -H "Content-Type: application/json" -d '{
  "chat_id": "-ID_CHAT_TELEGRAM",
  "text": "'"$texto_generado_sin_comillas"'"
}' "https://api.telegram.org/botTOKEN_TELEGRAM/sendMessage"

 

Tras ello, recordar hacerlos ejecutables (con chmod +d) y lo siguiente sería crear los Comandos de tipo notificación en Centreon, vamos a «Configuration» > «Commands» > «Notifications» y creamos un par de ellos, uno para notificar problemas con los Hosts y otro para los Servicios, cada uno con su Command Line:

  • /usr/lib/centreon/plugins/notifica_telegram_ia_ollama_host.sh ‘$HOSTSTATE$’ \ ‘$HOSTNAME$’ \ ‘$HOSTOUTPUT$’
  • /usr/lib/centreon/plugins/notifica_telegram_ia_ollama_servicio.sh ‘$SERVICESTATE$’ \ ‘$HOSTNAME$’ \ ‘$SERVICEDESC$’ \ ‘$SERVICEOUTPUT$’

 

Y una vez creados los Comandos de notificación quedará asociarlos a un Usuario o a un Grupo, así que selecciona al usuario o grupo que tengas asociado en tus Hosts y Servicios e indicamos los Comandos recién creados en ‘Host Notification Commands’ y en ‘Service Notification Commands’.

Grabamos y exportamos, por si hace falta, y listo!

 

Y nada, ahora cada vez que tengáis una alerta en vuestro datacenter pues será distinta, tan curiosa como vosotr@s queráis que sea, corta, larga, con opciones de resolución, en euskera, en suajili…

Espero que os haya resultado curioso y nada, lo dicho, como siempre que vaya todo estupendamente!

Un abrazo!

 

Héctor Herrero