jusaba/supervision
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
Para descargar la imagen
docker push jusaba/supervisor:latest
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.
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
Este proyecto es libre para utilizarlo como cliente de minidyndns
⌨️ La presentación de esta documentación ha sido posible gracias a Villanuevand 😊
docker pull jusaba/supervision