Monitorizar web con Python y Telegram 3

En los artículos anteriorer 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 script, y nos falta lo más importante, el bot de telegram, el monitor y el ciclo de vida del script.

Script en Python

Python y Telegram: Crear el script

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.

Conectar con Telegram

El momento correcto de conectar con Telegram es el momento en el que levantamos el contexto del demonio que hemos visto en Monitorizar web con Python y Telegram 2, para ello vamos a realizar los siguiente cambios:

with context:
    logger = getLogger()
    updater = Updater(token=cfg['TOKEN'], use_context=True)
    dispatcher = updater.dispatcher
    start_handler = CommandHandler('start', start)
    dispatcher.add_handler(start_handler)
    status_handler = CommandHandler('status', status)
    dispatcher.add_handler(status_handler)
    token_handler = CommandHandler('token', token)
    dispatcher.add_handler(token_handler)
    restart_handler = CommandHandler('restart', restart)
    dispatcher.add_handler(restart_handler)
    check_thread = threading.Thread(
        target=monitorProc, args=(updater, logger, ))
    check_thread.start()
    do_main_program(logger, updater)

Podemos ver una definición principal que es updater, este objeto se utilizará en todas las llamadas realizadas a Telegram, el segundo punto es el uso del dispacher para definir comandos del bot y que función python va a ejecutar la respuesta a dicho comando del bot, definimos 4 comandos para el bot:

start

Monitorizar web con Python y Telegram 3 1

Esta función debe mostrar un mensaje de presentación cuando se accede por primera vez al bot o cuando se ejecuta directamente. Lo definimos en el contexto con:

dispatcher = updater.dispatcher
    start_handler = CommandHandler('start', start)
    dispatcher.add_handler(start_handler)

Y podemos ver como añadimos por un lado un manejador de los comandos del bot “CommandHandler” cuyos argumentos son el comando del bot y la función que se llamará cuando el bot reciba dicho comando:

def start(update, context):
    update.message.reply_text(
        'Hello {}'.format(update.message.from_user.first_name))
    if monitor():
        context.bot.send_message(
            chat_id=update.effective_chat.id,
            text=cfg['MONITOR_NAME'] + ".
Read the rest “Monitorizar web con Python y Telegram 3”

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.

Script en Python

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:

sudo apt-get update && sudo apt-get install -y curl python3 python3-urllib3 python3-psutil python3-daemon python3-yaml python3-setuptools python3-pip && sudo pip3 install python-telegram-bot

Más documentación sobre la librerías en:

Argumentos

La aplicación se ha configurado para que tenga el formato:

command CONFIGFILE.yml [start|stop|status|reload]

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:

LOCK_WAIT_TIMEOUT: 5
CHAT_ID: TELEGRAM_PRIVATE_CHANNEL_ID
TOKEN: TELEGRAM_BOT_TOKEN
PIDFILE: '/var/run/disasterproject_bot.pid'
MONITOR_NAME: "Disasterproject"
MONITOR_URL: "https://www.disasterproject.com"
CMD: "sudo /usr/local/bin/executable"

Podemos ver los siguientes valores de configuración:

  • LOCK_WAIT_TIMEOUT: Tiempo de espera para comprobar que la aplicación ya está funcionando.
  • CHAT_ID: El identificador del canal privado que hemos obtenido en el artículo anterior
  • TOKEN: El identificador del Bot de Terraform
  • PIDFILE: Fichero que guarda el identificador del proceso y que se bloqueará mientras la aplicación esté en uso
  • MONITOR_NAME: Nombre identificador que aparecerá en el bot
  • MONITOR_URL: URL que queremos monitorizar
  • CMD: Comando que se ejecutará a través del bot

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)”,… Read the rest “Monitorizar web con Python y Telegram 2”

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

Monitorizar web con Python y Telegram 1 4

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.

Monitorizar web con Python y Telegram 1 5

Lo primero que vamos a hacer es iniciar en este bot con el comando “/start“:

Monitorizar web con Python y Telegram 1 6

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“:

Monitorizar web con Python y Telegram 1 7

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.… Read the rest “Monitorizar web con Python y Telegram 1”

Entorno de pruebas en AWS 1: Elegir Ansible o Terraform

Vamos a plantear un entorno de pruebas en AWS ya que el diseñado en anteriores capítulos está al límite de lo que es un portátil y muchas veces vamos a necesitar que dicho entorno sea accesible por un cliente al que no tenemos acceso.

Hablaremos de un entorno en Amazon Web Service, aunque la idea es utilizar herramientas que puedan adaptarse a otros proveedores, intentando no casarnos de ninguna manera con el proveedor, pensando especialmente en lo que sería un entorno de demostración.

Diseño de referencia

Entorno de pruebas en AWS 1: Elegir Ansible o Terraform 13

Para empezar plantemos una arquitectura de referencia, para ello tomamos lo que es un diseño tradicional con MZ y DMZ, evitando en lo posible elementos que salgan fuera de lo que sería un entorno de demostración (por ejemplo balanceadores, CDN, caché, etc) ya que nos interesa que el despliegue sea rápido y la pretensión es que dure poco en el tiempo (y por lo tanto reducir en lo posible sus costes).

De manera resumida tenemos los siguientes elementos:

  • Entorno de pruebas: Máquinas virtuales con Kubernetes y los servicios desplegados que formarán parte de la prueba. No serán accesibles desde internet.
  • Bastión: Máquina virtual que será accesible desde Internet y cuya principal función será desplegar servicios.
  • DMZ: Red donde están las máquinas virtuales con Kubernetes, accesible desde la red de bastión (MZ), pero no desde Internet, para salir a Internet requiere de NAT.
  • MZ: Red que dispone de salida a Internet y cuyos dos elementos (NAT GW y bastión) dispone de IP de Internet accesible.

En este primer capítulo vamos a plantear dos posibles opciones de infraestructura como código (IaC) para desplegar el entorno y las ventajas/desventajas de cada una. Las soluciones que vamos a plantear son Ansible y Terraform. En el segundo artículo iremos revisando como son los elementos en cada una de las soluciones y que opciones tenemos ante las deficiencias de cada uno.… Read the rest “Entorno de pruebas en AWS 1: Elegir Ansible o Terraform”

Dashboards de Kubernetes 3

Tras un primer artículo (Dashboards de Kubernetes 1) sobre Dashboards de Kubernetes generalistas, y un segundo (Dashboards de Kubernetes 2) centrado en dashboards específicos.

Vamos a analizar aquellas herramientas que aunque no son exactamente dashboards integrados en kubernetes si que van a funcionar como clientes externos que dan acceso a la plataforma.

Dashboards de Kubernetes

Octant

Está herramienta opensource de VMware (Con más de 3100 estrellas en github) y dentro del marco de herramientas VMware-Tanzu, está orientada a servir de herramienta explicativa de como está configurado y diseñado un entorno Kubernetes.

La herramienta funciona como un servicio web, por lo que puede ponerse como un servicio o ejecutarse en la máquina local con la condición de que se disponga de un .kube/config configurado con un usuario con permisos suficientes. Tanto en octant como en el resto de entornos probados hemos usado el usuario admin.

Como se instala

Nos descargamos el .deb o el .rpm de https://github.com/vmware-tanzu/octant/releases y lo instalamos con las herramientas del sistema operativo, si tenemos el .kube/config para acceder al cluster a revisar basta con ejecutar octant desde la linea de comandos.

Características

Dispone de un limitado conjunto de los objetos de Kubernetes, suficiente para los objetivos de dicha aplicación, pero incompleto para un gestor de Kubernetes.

En el siguiente gráfico podemos ver la lista de eventos que se muestra como un elemento más del menú de objetos.

Dashboards de Kubernetes 3 14

Pese a la limitación anterior y que no permite la modificación de los elementos, si dispone en cada elemento de una pestaña “Resource Viewer” donde se nos mostrará el estado del objeto examinado y de todos aquellos relacionados, algo que se ella a faltar en los gestor que hemos visto anteriormente y que nos permite discernir de un solo vistazo donde tenemos un problema con un servicio, como puede ser en el siguiente ejemplo:

Dashboards de Kubernetes 3 15

Otro ejemplo más de Resource Viewer

Dashboards de Kubernetes 3 16

Facilidad de uso

Cumple sin problemas con su capacidad de herramienta de demostración, pero a la espera de que su diseño basado en plugins de frutos (extensiones que nos permita una gestión de Kubernetes), no es una herramienta que salga de su planteamiento original.… Read the rest “Dashboards de Kubernetes 3”

Dashboards de Kubernetes 2

Tras un primer artículo (Dashboards de Kubernetes 1) sobre Dashboards de Kubernetes generalistas, este artículo se centra en aquellos dashboards que están orientados a ciertas necesidades.

Concretamente nos centraremos en tres dashboards que van a tres necesidades: Ver el estado de un gran número de pods, ver las relaciones entre objetos y obtener una visión de conjunto sobre una plataforma kubernetes sobre docker.

Dashboards de Kubernetes

Kube-ops-view

Con 1200 estrellas en Github este proyecto nos presenta un dashboard muy básico pensando en grandes granjas de servidores, en donde tengamos un importante volumen de pods que necesitemos revisar de un vistazo.

Como se instala

Creamos un espacio de nombres para instalar kube-ops-view:

kubectl create namespace kube-ops-view --dry-run -o yaml | kubectl apply -f -

Creamos una cuenta de sistema con capacidades de administrador

kubectl create -n kube-ops-view serviceaccount kube-ops-view-sa --dry-run -o yaml | kubectl apply -f -
kubectl create clusterrolebinding kube-ops-view-sa --clusterrole=cluster-admin --serviceaccount=kube-ops-view:kube-ops-view-sa --dry-run -o yaml | kubectl apply -f -

Y realizamos la ejecución de un despliegue junto con un servicio para su publicación

cat <<EOF |kubectl apply -n kube-ops-view -f -
 ---
apiVersion: v1
kind: Service
metadata:
  name: kube-ops-view
  namespace: kube-ops-view
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: kube-ops-view
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: kube-ops-view
  name: kube-ops-view
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-ops-view
  template:
    metadata:
      labels:
        app: kube-ops-view
    spec:
      serviceAccountName: kube-ops-view-sa
      containers:
      - image: hjacobs/kube-ops-view:0.11
        name: kube-ops-view
        ports:
        - containerPort: 8080

Pese a ser un único servicio (sin autenticación, importante) su contenedor tiene un tamaño parecido al de las soluciones anteriormente mostradas:

docker.io/hjacobs/kube-ops-view                   0.11                fd70a70b6d70d       40.8MB

Por lo que su despliegue ha de ser rápido.

Características

Su interfaz, mostrado en la siguiente figura es mínimo:

Dashboards de Kubernetes 2 43

Sin opciones de entrar en los objetos o de editar, la información aparece al pasar por encima de las “cajas”.… Read the rest “Dashboards de Kubernetes 2”

Navegación de entradas

1 2 3 4
Volver arriba