Notificaciones de servidor Raspberry Pi con bot de Telegram

Bot de Telegram enviando notificaciones de servidor
3 min. Lectura
0 Vistas
0 Valoración

Controlar que todos los servicios de la Raspberry se están ejecutando correctamente, es un trabajo enorme. Hay una manera que la Raspberry se comunique con nosotros cuando algo no vaya del todo bien, y es utilizar un bot de Telegram.

Necesitamos un bot

El primer paso es crear el bot que vamos a utilizar. Puedes seguir este artículo que utilicé para la utilización de un bot en OpenHAB.

Configurando los ficheros

Cuando tengamos nuestra API_KEY y nuestro CHAT_ID, creamos un directorio en /etc/telegram como root:

sudo mkdir /etc/telegram

Y creamos el siguiente archivo:

sudo nano /etc/telegram/key.sh
export TELEGRAM_KEY="API_KEY"
export CHAT_ID=CHAT_ID

Script de envío de mensajes

Ahora creamos el script que enviará el mensaje:

sudo nano /usr/local/bin/telegram.sh
#!/bin/bash
source /etc/telegram/key.sh
URL="https://api.telegram.org/bot$TELEGRAM_KEY/sendMessage"
curl -s -d "chat_id=$CHAT_ID&disable_web_page_preview=1&text=$1" $URL > /dev/null

Le damos acceso de ejecución:

sudo chmod +x /usr/local/bin/telegram.sh

Probar el script

Y podemos probarlo desde cualquier ubicación y con nuestro usuario:

telegram.sh "¡Hola! He llegado, soy tu servidor"

A partir de ahora, podemos utilizarlo para que nos informe de cualquier cosa que suceda en nuestro servidor.

Avisos de nuevas conexiones SSH

Modificamos el archivo .bashrc y añadimos al final la línea siguiente:

nano .bashrc
telegram.sh "Nueva conexión SSH con la IP $(echo $SSH_CLIENT | awk '{ print $1}')"

Tomar la temperatura

telegram.sh $(/opt/vc/bin/vcgencmd measure_temp)

Controlar servicios de systemd

El procedimiento anterior podemos utilizarlo, por ejemplo, para que nos informe de cualquier error en la ejecución de cualquier servicio. Para ello, vamos a crear el fichero:

sudo nano /usr/local/bin/unit-status-telegram.sh
#!/bin/bash

UNIT=$1

UNITSTATUS=$(systemctl status $UNIT)
ALERT=$(echo -e "\u26A0")

telegram.sh "$ALERT Unit failed $UNIT $ALERT Status: $UNITSTATUS"

Le damos acceso de ejecución:

sudo chmod +x /usr/local/bin/unit-status-telegram.sh

Probar el script

Y lo podemos probar, por ejemplo, con el siguiente comando:

unit-status-telegram.sh systemd-journald

Y casi al instante, nos debería llegar un mensaje a nuestro Telegram, con toda la información.

Crear servicio de notificación

Ahora sólo nos queda crear la unidad en systemd que se activará en caso de error:

sudo nano /etc/systemd/system/unit-status-telegram@.service
[Unit]
Description=Unit Status Telegram Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/unit-status-telegram.sh %I

Activar notificaciones en servicios

¡Listo! Ahora solo tenemos que añadir en la sección [Unit] del servicio que queremos controlar la siguiente línea:

OnFailure=unit-status-telegram@%n.service

Estos servicios son algunos ejemplos que hemos visto en algún momento:

/etc/systemd/system/arch-audit.service
/etc/systemd/system/autoupdate.service
/etc/systemd/system/lynis.service
/etc/systemd/system/certbot.service
/etc/systemd/system/rkhunter-email.service

Notificaciones de apagado y arranque

Mensaje al apagar

sudo nano /etc/systemd/system/shutdown_msg.service
[Unit]
Description=Send message to shutdown
OnFailure=unit-status-telegram@%n.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=telegram.sh "Sorry, the server is going down..."

[Install]
WantedBy=multi-user.target

Nos aseguramos de activar y recargar:

sudo systemctl enable shutdown_msg.service --now
sudo systemctl daemon-reload

Mensaje al arrancar

sudo nano /etc/systemd/system/start_msg.service
[Unit]
Description=Send message after network becomes reachable
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=telegram.sh "Hi, the server is now becomes reacheable... "
TimeoutStartSec=0

[Install]
WantedBy=default.target

Nos aseguramos de activar y recargar:

sudo systemctl enable start_msg.service --now
sudo systemctl daemon-reload

Resumen de notificaciones configuradas

Con esta configuración ya tienes un sistema completo de notificaciones que te avisará sobre:

  • ✓ Nuevas conexiones SSH al servidor
  • ✓ Fallos en servicios de systemd
  • ✓ Apagado del servidor
  • ✓ Arranque del servidor
  • ✓ Temperatura del sistema (bajo demanda)

Tu Raspberry Pi ahora te mantendrá informado de todo lo que sucede, permitiéndote reaccionar rápidamente ante cualquier problema. ¡Hello, it's me, everything's all right here! 📱

¿Te ha sido útil?

Ayúdame a mejorar con tu puntuación y comentarios.

0.0 (0 votos)
Jaume Ferré

Jaume Ferré

Soy un entusiasta de las nuevas tecnologías, apasionado por explorar su potencial innovador. Colecciono CDs en formato físico y disfruto creando mezclas musicales. Además, la fotografía es otra de mis pasiones, capturando momentos y expresiones con cada disparo. ¡Gracias por leerme!

💬 Comentarios

Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!