Cómo usar webhooks de Discord para recibir notificaciones sobre el estado de su sitio web en Ubuntu 18.04

El autor seleccionó a Apache Software Foundation para recibir una donación como parte del programa Write for DOnations.
Introducción
Si tiene sitios web importantes, querrá saber cuándo experimentan algún problema para poder solucionarlo antes de que afecte a sus usuarios. Una forma de recibir notificaciones es configurar alertas a través de un sistema de chat basado en texto.
Discord es un sistema de chat alojado similar a Slack. Con Discord, puedes configurar un sistema de mensajería gratuito que te permite comunicarte con mensajes de texto, imágenes, audio y video. Si bien ofrece funciones premium, puedes registrarte de forma gratuita y tiene clientes disponibles para Windows, macOS, Linux, Android e iOS.
En este tutorial, configurará su propio servidor de Discord, creará un webhook de Discord, escribirá un script Bash que verificará el estado de una lista de sitios web y probará las notificaciones de su servidor a su canal de Discord.
Prerrequisitos
Antes de comenzar esta guía necesitarás lo siguiente:
-
Un servidor Ubuntu 18.04 que ejecutará tu script de monitoreo y se comunicará con Discord ( monitor-server ). Puedes configurar este servidor siguiendo esta Guía de configuración inicial del servidor.
-
Si aún no tiene un sitio web que desee monitorear, configure el servidor Apache con Cómo instalar el servidor web Apache en Ubuntu 18.04 y asegúrese de completar el Paso 5 para configurar un host virtual.
-
Una cuenta de Discord. Puedes visitar la página de registro de Discord para registrarte y obtener una cuenta gratuita de Discord.
Paso 1: configuración del webhook de Discord
Una vez que hayas abierto tu cuenta de Discord, podrás crear tu propio servidor privado de Discord.
Primero, inicie sesión en su cuenta de Discord en su navegador o inicie su aplicación Discord y haga clic en el botón Crear un servidor .
Luego elija un nombre para su servidor y haga clic en el botón Crear un servidor .
A continuación, configurarás tu webhook de Discord. Los webhooks son URL únicas que puedes usar para vincular servicios entre sí. Los webhooks de Discord te permiten automatizar tus mensajes y enviar actualizaciones de datos a tus canales de texto de Discord.
En este tutorial, enviarás una notificación a tu webhook cuando un servicio específico en tu servidor deje de funcionar, y Discord se asegurará de que recibas esos mensajes en tu canal.
Para crear un webhook, primero debes hacer clic en tu canal y luego hacer clic en el botón Editar canal justo al lado del nombre de tu canal.
Luego haga clic en la pestaña Webhooks y haga clic en el botón Crear webhook .
Después de eso, elige un nombre para tu webhook, en este tutorial lo usaremos Alerts
ya que es lo que hará nuestro script Bash: alertarnos en caso de que uno de nuestros sitios web deje de funcionar.
Copia la URL de tu webhook y guárdala para más adelante. Por último, haz clic en el botón Guardar .
Ahora tienes tu cuenta de Discord, tu servidor y tu webhook. Ahora puedes continuar creando un archivo de prueba para que tu script lo monitoree.
Paso 2: creación de un archivo de prueba (opcional)
Si aún no tiene su propio sitio web para probar, complete este paso para agregar un archivo de prueba y comprobar cómo funcionará su script de monitoreo. Asegúrese de ejecutar estos comandos en su servidor apache .
Primero, crea el archivo de prueba con el siguiente comando:
- nano /var/www/your_domain/test
Agrega algo de contenido a tu archivo para que puedas comprobar que funciona:
prueba
test
Guardar y salir del archivo.
Ahora navegue en su navegador para asegurarse de que puede recibir el texto en el archivo.http://your_domain/test
test
En el siguiente paso, comenzarás a crear tu script de monitoreo.
Paso 3: creación de su secuencia de comandos de monitoreo
Ahora que has configurado tu webhook, procede a crear tu script de Bash que comprobará el código de respuesta de tus sitios web. En caso de que alguno de los sitios web devuelva un estado distinto a 200 OK
, tu script enviará una solicitud al webhook de Discord para que recibas una notificación en tu canal de Discord.
Nota: puedes usar cualquier otro lenguaje de programación para crear un script como este.
Primero, acceda mediante SSH al servidor de monitorización que está utilizando para ejecutar su script de monitorización.
check_status.sh
Comience por crear un archivo en su carpeta de inicio. En este tutorial, lo llamaremos archivo .
Con tu editor de texto favorito abre el archivo:
- nano ~/check_status.sh
Para que el cargador de programas reconozca este archivo ejecutable como un script Bash, agregue la siguiente línea en la parte superior del archivo:
~/check_status.sh
#!/bin/bash
Todas las líneas que comienzan con a #
son comentarios. Los comentarios son opcionales, pero tener comentarios en el script facilitará que otras personas comprendan lo que hace el script:
~/check_status.sh
#!/bin/bash### Website status check script# Author: Your Name# Date: 01/01/2020##. . .
A continuación, especifica tu webhook de Discord como variable. Agrega la URL que copiaste antes para tu webhook:
~/check_status.sh
. . .### Discord webhook# Change the 'your_discord_webhook_name' with your actual Discord Webhook##url="your_discord_webhook_name". . .
Como probablemente usarás este script para verificar el estado de varios sitios web, crea una variable llamada websites_list
y almacena los nombres de dominio o las direcciones IP de los sitios web que deseas monitorear. Si estás usando el archivo de prueba opcional en este tutorial, asegúrate de agregar /test
después de tu nombre de dominio o dirección IP:
~/check_status.sh
. . .### List of websites to check##websites_list="your_domain/test". . .
En el caso de que estés monitoreando más de un sitio web, puedes agregar más nombres de dominio o direcciones IP a la websites_list
variable y usar el espacio como separador:
~/check_status.sh
. . .websites_list="your_domain1/test your_domain2 your_domain3". . .
Ahora querrá recorrer la lista de sitios web y comprobar su estado. Para ello, agregue el siguiente for
bucle a su archivo:
~/check_status.sh
. . .for website in ${websites_list} ; do status_code=$(curl --write-out %{http_code} --silent --output /dev/null -L ${website}) echo $status_codedone. . .
Este for
bucle recorrerá cada elemento de la websites_list
variable y comprobará el estado del sitio web con el curl
comando.
La echo $status_code
declaración imprimirá el estado de respuesta del curl
comando. Si el sitio web se ejecuta como se espera, el curl
comando devolverá un código de respuesta 200 OK
, lo que significa que el sitio web está en funcionamiento. De lo contrario, recibirá otro código de respuesta.
Dentro del for
bucle, agrega una if
declaración para verificar si el código de respuesta está 200
o no. Si el código de respuesta está 200
, significa que el sitio web está funcionando y no necesitarás una notificación de Discord. Agrega el siguiente bloque condicional a tu archivo:
~/check_status.sh
. . . if [[ "$status_code" -ne 200 ]] ; then # POST request to Discord Webhook with the domain name and the HTTP status code else echo "${website} is running!" fi. . .
Si hay algún problema con el sitio web, recibirás un código de respuesta diferente; en este caso, querrás recibir una notificación a través de tu webhook de Discord.
Para enviar la notificación, puede utilizar el curl
comando para enviar una POST
solicitud a la URL del webhook de Discord.
Añade la siguiente curl
solicitud dentro de tu if
declaración:
~/check_status.sh
. . . if [[ "$status_code" -ne 200 ]] ; then # POST request to Discord Webhook with the domain name and the HTTP status code curl -H "Content-Type: application/json" -X POST -d '{"content":"'"${domain} returned: ${status_code}"'"}' $url else echo "${website} is running!" fi. . .
Ahora examinemos los diferentes argumentos:
-H
:Indicacurl
que desea agregar un encabezado adicional en su solicitud."Content-Type: application/json"
:Define el tipo de datos que debe esperar el webhook (HTTP JSON).-X POST
:Especifica que desea utilizar aPOST
como método de solicitud.-d
:Envía los datos JSON especificados al webhook de Discord.
Esta será la versión final de tu guión:
~/check_status.sh
#!/bin/bash### Website status check script# Author: Your Name# Date: 01/01/2020##### Discord webhook# Change the 'your_discord_webhook_name' with your actual Discord Webhook##url="your_discord_webhook_name"### List of websites to check# To add more websites just use space as a separator, for example:# websites_list="your_domain1 your_domain2 your_domain3"##websites_list="your_domain/test your_domain2"for website in ${websites_list} ; do status_code=$(curl --write-out %{http_code} --silent --output /dev/null -L ${website}) if [[ "$status_code" -ne 200 ]] ; then # POST request to Discord Webhook with the domain name and the HTTP status code curl -H "Content-Type: application/json" -X POST -d '{"content":"'"${domain} : ${status_code}"'"}' $url else echo "${website} is running!" fidone
El script recorrerá esta lista y comprobará el estado de cada sitio web.
Ejecute el script con el siguiente comando para asegurarse de que funcione como se espera:
- bash ~/check_status.sh
Después de ejecutar el script, recibirá el siguiente resultado en su terminal confirmando que su sitio web está funcionando:
Outputyour_domain1 is running!your_domain2 is running!
A continuación, probarás tus notificaciones de Discord.
Paso 4: prueba tus notificaciones de Discord
Ahora es el momento de comprobar si sus webhooks funcionan como se espera utilizando el archivo de prueba.
En el servidor Apache, ejecute el siguiente comando para cerrar los permisos de acceso a este archivo:
- sudo chmod 000 /var/www/your_domain/test
A continuación, regrese a su servidor de monitorización y ejecute el script:
- bash check_status.sh
Ve a tu aplicación Discord y revisa tus alertas. Recibirás un error :403 . Esto indica que no tienes los permisos configurados correctamente y que no puedes ver el archivo.
Ahora, para probar un error diferente, elimine este archivo por completo de su servidor apache :
- sudo rm /var/www/your_domain/test
A continuación, regrese a su servidor de monitorización y ejecute el script:
- bash check_status.sh
Ve a tu aplicación Discord y revisa tus alertas. Recibirás un error :404 . Esto indica que el archivo no está disponible.
Si tienes Discord instalado en tu teléfono, también recibirás alertas allí.
Ahora tienes un script que te avisa cuando tus sitios web experimentan algún problema. A continuación, configuremos el script para que se ejecute automáticamente cada cinco minutos.
Paso 5: Automatizar el proceso
Una de las formas de automatizar las comprobaciones es crear un trabajo cron que se ejecutará cada 5 minutos aproximadamente.
Primero, vuelve a tu servidor de monitorización . Luego, antes de poder ejecutar el script automáticamente, debes ordenar los permisos de archivo y asegurarte de que el script sea ejecutable, de lo contrario, no se ejecutará. Para hacer que el script sea ejecutable:
- chmod u+x ~/check_status.sh
Ejecute lo siguiente para editar su crontab:
- crontab -e
Luego agregue lo siguiente al archivo:
*/5 * * * * /home/your_user/check_status.sh
Luego guarde el archivo crontab
y su script se ejecutará cada 5 minutos.
Conclusión
En este artículo, configuraste tu propio webhook de Discord y creaste un script para notificarte en caso de que ocurra un error específico en tu sitio web. Ahora puedes usar tu lenguaje de programación favorito y escribir un bot más complejo.
Para obtener más información sobre cómo configurar la infraestructura de monitoreo, consulte nuestra página de temas de Monitoreo.
Y, si está interesado en aprender más sobre scripts de shell, consulte nuestra serie de tutoriales Introducción a scripts de shell.
Para obtener más información sobre los webhooks de Discord, puedes consultar la documentación oficial de los webhooks de Discord.
Deja una respuesta