Backrest, notificaciones vía Telegram

2024-07-15

Si no leíste este articulo donde explico que es Backrest y su funcionamiento, decirte que Backrest proporciona una interfaz web para crear copias de seguridad mediante la utilidad restic de una manera muy sencilla.

Backrest soporta Hooks en respuesta a los eventos ocurridos durante la la ejercicio de un plan.

Los tipos de eventos disponibles son:

  • Any Error: cualquier operación ha fallado.
  • Snapshot Start: el inicio de una operación de copia de seguridad (por ejemplo, corresponde a una llamada a restic backup)
  • Snapshot End: el final de una operación de copia de seguridad (por ejemplo, corresponde a restic backup completado). Ten en cuenta que si una copia de seguridad falló, Snapshot End todavía se llamará igual.
  • Snapshot Error: se produjo un error durante una operación de copia de seguridad (p.ej. restic backup devuelve un código de salida no cero O, salida inválida).

Utilizando esos Hooks podemos enviar notificaciones con el resultado del plan, si ha habido algún error, si ha finalizado correctamente, número y tamaño de ficheros copiados, etc.

Los servicios de notificación disponibles son a través de Discord webhook, Gotify y mediante comandos, como por ejemplo un script de shell.

Precisamente utilizando comandos Shell vamos a realizar el envio de esas notificaciones a Telegram

🗨️ Puedes profundizar mas sobre el uso de las funciones y variables utilizadas por los Hooks en https://github.com/garethgeorge/backrest/wiki/Hooks-and-Notifications

Hooks

⚠️ Antes de nada necesitamos crear un bot en Telegram donde enviar las notificaciones, doy por hecho que sabes hacerlo y si no, hay multitud de sitios donde te explican como hacerlo.

Editamos el plan del backup para el que deseamos recibir las notificaciones sobre su ejecución.

Pulsamos en el botón Add Hook y pulsamos en Command

Automáticamente se nombrará como Hook 0, si pulsas en el desplegable Runs when… elegimos el tipo de evento a monitorizar, podemos seleccionar solo uno o varios, haciendo check sobre el que nos interesa.

Por ejemplo, quiero que me envié una notificación cuando se inicia la copia o si se produjo un error durante una operación de copia de seguridad o si cualquier operación ha fallado.

Si se produce alguno de estos eventos se ejecutara el siguiente script

chatid="xxxxxx"
api="xxxxxxxxxxxxxxxxxxxxxxxxx"
log={{ .ShellEscape .Summary }}
curl -s \
  --data parse_mode=HTML \
  --data chat_id=$chatid \
  --data text="$log" \
  "https://api.telegram.org/bot$api/sendMessage"
  • chatid=“xxxxxx” es tu id de telegram
  • api=“xxxxxxxxxxxxxxxxxxxxxxxxx” es el token de tu bot

Hago uso de las funciones .ShellEscape y .Summary

  • .ShellEscape : escapa de una cadena para ser utilizado de forma segura en la mayoría de los ambientes shell.

  • .Summary : Imprime un resumen predeterminado del evento actual.

Si todo funciona correstamente deberias de recibir una notificación en tu bot parecida a esta:

Puedes ir añadiendo más Hooks si así lo necesitas, por ejemplo, quiero que me mande otra notificación cuando finalice la copia de seguridad.

Espero que te haya gustado, pasa un gran día 🐧


Ingrese la dirección de su instancia