Centreon Akustische Alarme mit Ollama und Piper AI
In diesem Beitrag werden wir mehrere Elemente kombinieren, um Sprachbenachrichtigungen in unserem Überwachungssystem zu haben. Wir werden selbstverständlich lokale und sichere Künstliche Intelligenz nutzen (Ollama) einen freundlichen und menschlichen Text mit dem Centreon-Alarm zu generieren, um es später auf unserem 7-Zoll-Bildschirm abzuspielen″ Dank Piper und einer Stimme in perfektem Spanisch.
Also, was ich gesagt habe, si tienes un sistema de monitorización basado en Centreon sabrás que puedes recibir alertas cuando exista un problema en un Servicio o Host monitorizado, así te enterarás de cualquier problema en tu datacenter. In einem post pasado vimos cómo hacer que los mensajes que genera Centreon sean más ‘humanos’ gracias a la IA de Ollama, en aquella ocasión mandaba la alerta en formato texto por Telegram. Hoy la diferencia es que haremos que el mensaje sea reproducido por una voz humana (gracias a Piper) y suene por los altavoces de una pequeña Raspberry Pi, que uso en mi 7 Bildschirm″ de monitorización.
Este sería un ejemplo de audio:
Ah, Natürlich, recordar que todo lo que veremos en este post es open source, lokal, sicher, sin necesidad de Internet
Piper
Empezamos por tanto con Piper, que como dicen en Die offizielle Website es un ‘un sistema neuronal rápido y local de texto a voz que suena genial’. Es un TTS (Text-to-speech) que podremos instalar en la Raspberry Pi para convertir cualquier texto en audio con una variedad inmensa de voces en distintos idiomas que nos vendrán genial!
Lo más sencillo para tener Piper instalado en la Raspberry Pi, será descargándonos ya el binario compilado para nuestra arquitectura de CPU. Que lo sabremos ejecutando: ‘cat /proc/cpuinfo’.
- Para el escritorio Linux de 64-bit: AMD64
- Para la Raspberry Pi 4 de 64-bit: Arm64
- Para la Raspberry Pi 3/4 de 32-bit: Armv7
Descargaros la última versión que encontréis en su GitHub, los links se quedarán obsoletos. Nos lo descargamos, descomprimimos y entramos en su directorio:
wget https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_armv7.tar.gz
tar zxfv piper_armv7.tar.gz
cd piper
Escogemos un modelo de voz entrenada de su repositorio: https://github.com/rhasspy/piper/#voices y cuando elijamos la que más nos guste nos descargamos el fichero ONNX y el JSON. Por cierto si queréis escucharlas para ver cómo suenan, usar esta web: https://rhasspy.github.io/piper-samples/. Kommen, nos los descargamos:
wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/sharvard/medium/es_ES-sharvard-medium.onnx?download=true -O es_ES-sharvard-medium.onnx wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/sharvard/medium/es_ES-sharvard-medium.onnx.json?download=true.json -O es_ES-sharvard-medium.onnx.json
Y podemos probarlo ya, Wir haben zwei Möglichkeiten, crear el streaming de audio y escucharlo por los altavoces de la Raspberry Pi directamente, o generar un fichero .wav para lo que necesitemos. Laufen:
echo 'Hola, esto es un ejemplo de una frase.' | ./piper --model es_ES-sharvard-medium.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -
Y sonará algo así:
Integración con Centreon
Si queremos llamar a Piper desde una alerta de notificación, estos son los pasos que yo he seguido. Primero en la Raspberry Pi le crearemos un script al que Centreon le llame cuando haya una notificación, ejecutará este script que notificará por los altavoces de la alerta generada. El script recibirá como primera y única variable el texto que debe reproducir. Me ha quedado algo así (/home/pi/piper/alerta_piper.sh):
#!/bin/bash cd /home/pi/piper rm alerta.wav echo $1 | ./piper --model es_ES-sharvard-medium.onnx --length_scale 1.1 --output_file alerta.wav systemctl stop snapclient aplay alerta_inicio.wav aplay alerta.wav aplay alerta_fin.wav systemctl start snapclient
Algunos detalles que veréis es que le ralentizo un poquíto la voz, y que paro unos servicios de snapclient, ya que desde esta pantalla también suele sonar música ambiental y para detenerla temporalmente mientras suena el mensaje.
Tras hacer el script ejecutable, deberemos llamarlo/ejecutarlo desde el servidor de Centreon Central, o desde un Poller si es el caso. Um dies zu tun,, será necesario hacer un fingerprint entre el servidor de Centreon y la Raspberry Pi, para que pueda acceder por SSH sin pedir credenciales, y de esa manera ejecutaremos el script en remoto.
su centreon-engine
ssh-keygen -t rsa
cat /var/lib/centreon-engine/.ssh/id_rsa.pub
ssh-rsa AAA...ySHsfu0= centreon-engine@os-poller-osit
Así que en el Centreon nos logueamos como el usuario que ejecuta las cosicas en Centreon, generamos una clave privada y pública en caso de no tenerlas; luego con cat veremos la clave pública recién creada y la copiamos.
Pegamos la clave pública del Centreon Central o Poller en la Raspberry Pi en el fichero /home/pi/.ssh/authorized_keys
Y probamos a ver si conectamos desde Centreon con centreon-engine a la Raspberry Pi con un SSH::
ssh pi@DIRECCION_IP_RASPBERRY_PI
Ahora queda dar de alta los comandos en Centreon que se usarán para notificar cuando un Host o un Servicio tienen problemas. Si usamos In diesem vorherigen Beitrag como referencia, donde generamos ya los scripts para lanzar el mensaje generado por la IA de Ollama a Telegram, pues simplemente tendremos que añadirles una línea al final que llame al script creado en la Raspberry Pi y ya. Así recibiremos la notificación en Telegram y por los altavoces. Os dejo un resumen del script que alerta problemas en los Hosts, Wie ich schon sagte, lo importante es la última línea:
#!/Mülleimer/Bash # Genera el mensaje la IA de Ollama al gusto texto="Bitte, Generiert einen Text für eine Benachrichtigung, der mit nützlichen Informationen an das Smartphone des Benutzers gesendet wird. Sie sind ein hilfreicher persönlicher Agent, der Text für IT-Techniker generiert. Ihre Antworten können technisch sein, Biete dich nicht als Hilfe an, Geben Sie keine Empfehlungen. Die Botschaft, die Sie zu sagen haben, bezieht sich auf ein Problem vom Typ: "$1", Im Team "$2" da es sich in dem Bundesstaat befindet "$3". Sag nicht Hallo, Sag nicht Hallo und verabschiede dich nicht, Danke dir nicht einmal für irgendetwas. Die Antwort sollte auf Spanisch sein und die Nachricht sollte kurz sein." texto_generado=$(/usr/bin/curl http://DIRECCION_IP_OLLAMA:11434/api/generieren -H "Inhaltstyp: application/json" -d '{ "Modell": "Lama3", "prompt": "'"$Text"'", "Temperatur": 0.1, "Bach": FALSCH, "max_length": 50 }' | jq -r '.response') texto_generado_sin_comillas='Echo "$texto_generado" | sed 's/\"//g'` # Manda a Telegram /usr/bin/curl -X POST -H "Inhaltstyp: application/json" -d '{ "chat_id": "ID_CHAT_TELEGRAM", "Text": "'"$texto_generado_sin_comillas"'" }' "https://api.telegram.org/botTOKEN_BOT_TELEGRAM/sendMessage" # Alerta en la Raspberry Pi con Piper por los altavoces ssh pi@DIRECCION_IP_RASPBERRYPI "sudo /home/pi/piper/alerta_piper.sh \"$texto_generado_sin_comillas\""
¡Y chimpún! Ya lo tenemos listo, script creado y el que tenga dudas tiene en los posts anteriores cualquier dato que necesite para crear el Comando, darlo de alta en Centreon, montar la IA local y segura de Ollama, montarse Centreon…
Como siempre y por ser muy original, espero que os haya resultado de interés, que podáis aplicarlo en otro tipo de tecnologías, ideas… La verdad que Piper y Ollama en mi hogar con Home Assistant son totalmente necesarios, le dan un toque original, ahora sí que podemos empezar a llamarle poquito a poco hogar inteligente… pero eso, en otros posts, ya veremos!
Umarmungen, portaros bien!