jusaba/supervision

By jusaba

Updated almost 5 years ago

Supervision de servidores Serverpic

Image

10K+

Supervisor de servidores Serverpic

Esta imagen ha sido creada para construir una máquina capaz de supervisar un conjunto de servidores Serverpic

Una vez puesto en marcha el contenedor, un programa python se conecta a cada uno de los servidores Serverpic relacionados en un fichero de configuración cliente.json. El programa envia de forma secuencial a cada uno de los servidores el comando Latido, si se recibe Ok es que existe conexión.

Cuando arranca el contenedor.se conecta al servidor y al sexto Latido con éxito, envía un Pushover para informar de que el sesrvidor esta Ok. El programa python sigue enviando Latidos y, cuando no hay conexión durante 6 Latidos consecutivos manda un Pushover para informar de que el servidor está fuera de servicio, en ese momento, el contenedor intentará conectar de nuevo con el servidor y volverá a avisar cuando establezca la conexión y haya mandado 6 Latidos consecutivos con éxito.

El programa se compone de dos ficheros Supervision.py y Supervisor.py. Supervisor.py contiene la clase Supervisor que es la encargada de conectar con servidor, mnadar los látidos, supervisar el numero de cuentas de Latidos fallidos o con exito y nabdar el pushover, Supervision.py es el programa principal que carga los datos de los servidores a supervisar y los lanza como objetos de la clase Supervisor

Los datos de los servidores se encuentran en el fichero cliantes.json y tienen la siguiente estructura

{
        "clients":[
                {
                "servidor": "servidor1.jusaba.es",
                "eth": 2000,
                "usuario": "lleida",
                "dispositivo": "Iphone_Julian",
                "sonido": "cosmic",
                "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "user": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
                }, 
                {
                "servidor": "servidor2.com",
                "eth": 2000,
                "usuario": "tarragona",
                "dispositivo": "Iphone_Oscar",
                "sonido": "cosmic",
                "token":"wwwwwwwwwwwwwwwwwwwwwwwwwwwwww",
                "user": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
                }                
        ]
}

token y user corresponden a los datos proporcionados por la cuenta de pushover, sonido ee el sónido que deseamos para el aviso, dispositivo es el dispositivo asociado a la cuenta de Pushover que recibirá el aviso, usuario es el nombre con el que queremos que se conecte al servidor, eth es el puerto del servidor y servidor, es la dirección donde está el servidor Serverpic.

Se pueden poner tantos servidores como se desee, el límite está en el tiempo que se tarda en realizar todo el ciclo de servidores, si se excede el tiempo que da el servidor entre Látidos para la desconexión, el sistema no funcionará. Al final de cada ciclo de interrogación hay un tiempo de inactividad para no sobrecargar de Latidos los servidores, se debe llegar a un compromiso entre ese tiempo y el maximo que admite Serverpic sin recibir Latido para evitar la desconexión del objeto python al servidor. El tiempo se puede prefijar al arrancar el contenedor en la variable TPing ( Tiempo de ping ). Un valor adecuado de TPing para un numero discreto de servidores ( podria ser hasta 10 servidores) podría ser 10

Instalación 🔧

Para descargar la imagen

docker push jusaba/supervisor:latest

Como se ha construido la imagen 🛠️

Pre-requisitos 📋

Para crear el contenedor, en el directorio donde se encuentre Dockerfile y se vaya a hacer el build se necesita los ficheros con nombre Supervisor.py y Supervision.py.

El contenido del Dockerfile es el siguiente

FROM debian

ENV TZ=Europe/Madrid

LABEL version=1.0
LABEL autor=Jualian_Salas

RUN     apt-get update -y && \
        apt-get upgrade -y  && \
        apt-get install -y cron

RUN  apt install python3 -y && \
     apt-get install python-pip -y && \
     pip install --upgrade pip  && \
     pip install requests

WORKDIR /home/pi/supervision
VOLUME /home/pi/supervisio/data

COPY ./Supervision.py Supervision.py
COPY ./Supervisor.py  Supervisor.py

CMD python Supervision.py ${TPing}

Para la creación del contenedor se ha utilizado buildx para hacerlo multiplataforma

docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -t jusaba/supervision:latest . --push
 

Se puede utilizar simplemente build si no se necesita que sea multiplataforma

docker build -t jusaba/supervision:latest . --push
 

El fichero clientes.json se debe ubicar en /home/pi/supervision/data. En ese mismo directorio el contenedor deja un fichero de Supervisor.log para monitorizar la actividad de la máquina.

Arranque del contenedor ⚙️

El contenedor se debe arrancar de la siguiente forma

docker run --name supervision -v /home/pi/supervision/data:/home/pi/supervision/data -e TPing=10 -d  jusaba/supervision:latest

Contribuyendo 🖇️

Wiki 📖

Versionado 📌

Autores ✒️

  • Julián Salas Barolome Desarrollo y documentación

Licencia 📄

Este proyecto es libre para utilizarlo como cliente de minidyndns

Expresiones de Gratitud 🎁

  • Comenta a otros sobre este proyecto 📢
  • Invita una cerveza 🍺 o un café ☕ a alguien del equipo.
  • Da las gracias públicamente 🤓.
  • etc.

⌨️ La presentación de esta documentación ha sido posible gracias a Villanuevand 😊

Docker Pull Command

docker pull jusaba/supervision