Monitorizar web con Python y Telegram 2

En el artículo anterior de como Monitorizar una web con Python y que nos avise por Telegram (Monitorizar web con Python y Telegram 1), hemos hablado de como crear un bot de Telegram que nos avisará si la web cae, y nos permite a su vez ejecutar un comando que remedie el problema. Crear el script en Python En estos punto vamos a proceder a crear el script, es importante ya que la intención no es llegar a desplegar una aplicación, sino tener un ejemplo de como con un script se pueden realizar tareas sin necesidad de desplegar aplicaciones que nos pueden llevar incluso más tiempo el asegurar su comportamiento. Dependencias Lo primero son las dependencias, este script tiene varios componentes que se reflejan en las librerías que va a usar: urllib3 para comprobar el estado web, psutil para comprobar si el script está en ejecución, daemon para que funcione como demonio, yaml para guardar la configuración de forma cómoda, pip para poder instalar la librería telegram-bot que nos permitirá usar Telegram. Una instalación de dependencias en Debian/Ubuntu sería: Más documentación sobre la librerías en: Argumentos La aplicación se ha configurado para que tenga el formato: Este formato nos permitirá integrarlo con systemd para poder, por ejemplo, ejecutarlo al iniciar el equipo. Configuración CONFIGFILE.yml es la ruta completa del archivo de configuración que tendrá formato siguiente: Podemos ver los siguientes valores de configuración: La potencia de disponer de una configuración en yaml es que el proceso de carga es realmente simple, siendo el principal componente un simple “yaml.load(file)”, en el siguiente trozo de código vemos una función con parámetro el fichero yaml y que nos devuelve un hash con los valores. Registrar eventos Un punto importante en cualquier script es que vuelque la suficiente información como para identificar que se está haciendo. La siguiente función devuelve un manejador de eventos, que llamaremos con logger = getLogger() y que usaremos con logger.info(cfg[‘MONITOR_NAME’] + ” mensaje”) Funcionando como demonio Muchas veces es interesante que el script funcione de manera autónoma sin tener que ejecutarlo de manera periódica, para ello lo ejecutaremos en modo demonio, comprobando de manera periódica tanto la monitorización como la gestión del bot de Telegram. Hemos elegido la librería python-daemon por ser muy sencilla de utilizar y permitir un control sencillo sobre las señales (que usaremos para gestionar el ciclo de vida del script) y el contexto (donde realmente […]

Monitorizar web con Python y Telegram 1

Hace tiempo decidí monitorizar este sitio web con Python y que enviase avisos a Telegram cuando estuviese caída. La infraestructura del sitio está formada por una combinación de contenedores y realmente me basta con saber si la web es accesible y algún método de reiniciar toda la infraestructura si se detecta un problema. En esté artículo y el siguiente voy a explicar como lo he realizado, aunque debemos de tener en cuenta que por comodidad he creado un script en Python y no una aplicación. Los componentes que conforman la solución son: Un bot y un canal privado de Telegram y un script en Python que use python-bot-telegram y urllib3. Dicho script va a estar ejecutándose continuamente y se podrá desplegar como si fuese un servicio. El código de este artículo es accesible en https://github.com/aescanero/disasterproject/tree/master/python Dar de alta un bot en Telegram El primer paso es la creación del bot de Telegram que utilizaremos en el script, para ello ya deberíamos disponer de una cuenta en Telegram y buscamos @BotFather para la creación del bot Una vez accedemos al mismo nos saldrá un mensaje informativo sobre la utilidad principal de este bot y que no es otra que gestionar la creación, mantenimiento y eliminación de los bots de los usuarios de la plataforma. Lo primero que vamos a hacer es iniciar en este bot con el comando “/start“: Además de los mostrados, existe una larga lista de comando para gestionar los bots, a nosotros lo que nos interesa es crear uno, por lo que usamos el comando “/newbot“: En este paso anterior nos pedirá primero un nombre descriptivo (en mi caso “disasterproject”, después el nombre del bot (debe acabar en “bot”, hemos seleccionado “disasterproject_bot”) y nos devolverá un mensaje de creación del bot donde tenemos después del texto “Use this token to access the HTTP API:” dos bloques de código separados por “:”, la cadena entera (incluyendo los “:”) es el token que se necesita para utilizar el bot. Crear un canal privado y añadir el bot Por ahora tenemos un bot y el token correspondiente, pero necesitamos un lugar donde el bot nos envíe la información que solamente nosotros debemos ver del mismo. Es importante tener en cuenta que el bot es accesible vía comandos (/start, /status, etc.) y que los mismos se le van a enviar directamente en un chat. El bot puede responder en ese mismo chat, […]

Volver arriba