Alertas por Telegram cuando tu servidor tiene problemas
El correo electrónico es muy bueno para muchas cosas, pero para alertas críticas se queda corto: puede caer en spam, puede llegar con diez minutos de retraso, y si estás lejos de la laptop simplemente no te vas a enterar. Telegram, en cambio, te pega un ping instantáneo en el celular, en la compu o en el reloj, y es gratis. Por eso cada vez más administradores migran sus alertas ahí.
Por qué Telegram gana al correo para alertas
- Entrega instantánea: los mensajes llegan en segundos, sin depender de colas SMTP o reputación de IP.
- Sin spam: los mensajes de un bot aprobado por ti nunca caen en una carpeta de no deseados.
- Multidispositivo: recibís la alerta en todos tus aparatos simultáneamente.
- Gratis y con API abierta: no hay plan de pago escondido.
- Formato rich: podés enviar Markdown, negritas, enlaces y hasta emojis para distinguir niveles de severidad.
Crear un bot con BotFather
Abrí Telegram, buscá @BotFather, iniciá chat con él y escribí /newbot. Te pedirá un nombre y un username (debe terminar en "bot"). Cuando termines, te entrega un token parecido a 1234567890:AAEabc...defXYZ. Guardalo bien porque es la llave para mandar mensajes desde cualquier script.
Obtener tu chat_id
Un bot no puede escribirle a alguien si ese alguien no le habló primero. Abrí tu bot recién creado y mandale cualquier mensaje, por ejemplo "hola". Después, abrí en el navegador:
https://api.telegram.org/bot<TU_TOKEN>/getUpdates
Vas a ver un JSON. Buscá el campo "chat":{"id":123456789.... Ese número es tu chat_id personal. Si querés que las alertas lleguen a un grupo, agregá el bot al grupo y repetí el proceso: verás un chat_id negativo, eso es normal.
Script bash simple para enviar alertas
Con el token y el chat_id ya podés enviar mensajes. Un script mínimo sería así:
#!/bin/bash
TOKEN="1234567890:AAEabc...defXYZ"
CHAT_ID="123456789"
MENSAJE="$1"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d parse_mode="Markdown" \
-d text="${MENSAJE}" > /dev/null
Guardalo como /usr/local/bin/tg-alert, dale permisos con chmod +x y ya podés hacer tg-alert "Disco al 95 por ciento en web01" desde donde quieras.
Integración con monitoreo
La gracia del script es que lo podés llamar desde cualquier otra herramienta. Algunos casos prácticos:
- Cron: un script que chequea el uso del disco cada 5 minutos y llama a
tg-alertsi supera cierto umbral. - Monit: en la directiva
execpodés invocar el script cuando un servicio se reinicia. - Prometheus Alertmanager: aunque soporta Telegram nativo, también podés dispararle un webhook a un pequeño endpoint que ejecute el script.
- Fail2ban: en el action del jail podés llamar a
tg-alertcada vez que se banea una IP. - Backups: al terminar un backup nocturno, el script de respaldo manda un "Backup OK, 2.3 GB, 4 minutos".
Ejemplo: alerta de carga alta
#!/bin/bash LOAD=$(cut -d' ' -f1 /proc/loadavg) if (( $(echo "$LOAD > 4.0" | bc -l) )); then tg-alert "*ALERTA* carga alta en $(hostname): $LOAD" fi
Lo agregás al crontab cada minuto y listo. Algo parecido podés hacer para disco, memoria, respuesta HTTP o cualquier otra cosa.
Buenas prácticas
Creá un grupo de Telegram dedicado a alertas para separarlo de los chats personales. Usá emojis como banderas rojas o verdes para que incluso en una mirada rápida sepas si es crítico o informativo. Y, muy importante, tu token es una credencial: nunca lo subas a un repositorio público.