Instalar Healthchecks en Docker de Synology

Hoy veremos cómo instalar Healthchecks en Synology. Healthchecks es una aplicación de código abierto que monitoriza tareas programadas (cron jobs) mediante pings enviados a través de peticiones HTTP o a cuentas de correo electrónico.

Healthchecks dispone de un plan gratuito y varias opciones de pago en su web oficial (https://healthchecks.io/). Al ser software de código abierto, lo desplegaremos en nuestro Synology mediante un contenedor Docker; aunque también es perfectamente instalable en cualquier distribución Linux.

healthchecks en docker de synology

Cómo funciona Healthchecks

Por cada dispositivo o tarea programa que deseemos monitorizar se crea un «check», este esta compuesto por:

  • Dirección URI única: https://hc-ping.com/7666df5a-9c3c-468c-82df-0ae71cd5b0f3 (Opción recomendada)
  • Dirección correo electrónico exclusivo: 7666df5a-9c3c-468c-82df-0ae71cd5b0f3@hc-ping.com

A cada check se le indica una fecha-hora específicas o un intervalo de repetición personalizado de cuando deben recibir el ping o correo:

  • Si llega dentro del plazo previsto, el check permanece en estado en verde.
  • Si el check no se recibe en el tiempo esperado, se dispara una alerta inmediata y su estado cambia a rojo.

Basta con que se envíe uno de los dos métodos para mantener su monitorización en verde.

Las alertas pueden enviarse a: correo electrónico, Microsoft Teams, Slack y mucho más…

Los checks se agrupan en proyectos. Un proyecto puede representar a un cliente —incluyendo todos sus dispositivos y la monitorización de sus copias—, o bien una agrupación de NAS, o incluso dedicarse exclusivamente a las copias realizadas con Hyper Backup. Vosotros decidís cómo configurarlo según vuestras necesidades.

A diferencia de herramientas más sofisticadas como Zabbix, Centreon o Nagios, Healthchecks apuesta por un modelo ligero y muy fácil de desplegar. Su funcionamiento se basa en el mecanismo de “dead man’s switch”: si recibe las notificaciones con normalidad, todo va bien; pero en cuanto deja de recibirlas en el tiempo esperado, se generan las alertas correspondientes.

Qué podemos monitorizar con Healthchecks

Con Healthchecks puedes monitorizar cualquier equipo o servicio capaz de hacer un ping HTTP o enviar un correo. Por ejemplo:

  • Estaciones de trabajo y servidores: Windows, Linux o macOS, físicos o virtuales.
  • NAS: QNAP, Synology, etc.
  • Copias de seguridad: HyperBackup, Active Backup for Microsoft 365, Veeam Backup, y otros.
  • Y mucho más..

Dispositivos

Para dispositivos basta con programar una tarea que envie el ping HTTP usando wget.

wget URI-UNICA -T 10 -t 5 -O /dev/null

Copias de seguridad

En el caso de las copias de seguridad, es necesario un script que valide el resultado del backup y, según el estado, envíe el ping o no, o que lo envie con los fallos como se muestra en la imagen.

Al usar el protocolo HTTP, es posible enviar datos adicionales. Por ejemplo: qué copias se han realizado, cuáles han fallado o la hora exacta de ejecución.

monitorizar copias de seguridad con healthchecks

Depúes de toda esta teoria pero creo que necesario pasamos a instalar healthchecks en un contenedor docker.

Requisitos previos para instalar Healthchecks en Synology

Necesitamos cumplir varios requisitos antes de continuar al siguiente punto:

  • Abrir puerto 443 TCP del Router (para recibir los ping HTTP)
  • Tener un DDNS de Synology y un certificado Wilcard para este, mira este post si aún no lo tienes. Esto es necesario porque usaremos el subdominio del DDNS, en mi caso: healthchecks.labsmac-n1.synology.me y tiene que estar protegido por el certificado.
  • Si tienes activo el cortafuegos de Synology, crea una regla para los contenedores docker.
  • Portainer, al desplegar este docker usando portainer, necesitarás instalarlo. Aquí un post de cómo hacerlo
  • Cuenta de correo Gmail y contraseña de aplicación. Necesario para enviar los correos cuando algo falla. Aunque si tienes tu propio servidor de correo, puedes usar los datos que tengas.
  • Saber el UID y GID del usuario administrador del NAS. Para la mayoría el valor de UID es 1026 y para GID 100, para asegurarte compruebalo con el comando id conectado desde SSH.

Desplegar Healthchecks en Synology usando Portainer

Crear regla Proxy Inverso para Healthchecks

Para crear la regla de Proxy Inverso vamos a Panel de Control > Portal de inicio de sesión > Avanzado > Proxy Inverso y Crear.

Establecemos lo siguiente y clicamos en Guardar.

Ahora clicamos en Encabezado personalizado > Crear > WebSocket.

Automáticamente se crearán dos lineas, luego clicamos en Guardar.

Crear carpeta para el docker Healthchecks

Dentro de la carpeta de docker de Synolgy, creamos la carpeta healthchecks y dos subcarpetas, data y db.

Crear docker Healthchecks con Portainer

Finalmente crearemos el docker dentro Portainer, clicamos en Stacks y luego en Add stack. Establecemos un nombre para nuestro docker y pegamos el siguiente codigo en la que tienes que personalizar con tus datos:

  • user: 1026:100
  • SITE_NAME: Nombre para el sitio
  • SITE_ROOT: https://healthchecks.ddns.synology.me
  • DEFAULT_FROM_EMAIL: tuCorreo@correo.com
  • EMAIL_HOST: smtp.gmail.com (si usas gmail usa este valor, sino usa tu servidor smtp)
  • EMAIL_HOST_USER: tuCorreo@correo.com
  • EMAIL_HOST_PASSWORD: Contraseña de aplicación o contraseña de correo
services:
  db:
    image: postgres:16
    container_name: Healthchecks-DB
    hostname: healthchecks-db
    mem_limit: 512m
    cpu_shares: 768
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "healthchecks", "-U", "hcuser"]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/healthchecks/db:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_DB: healthchecks
      POSTGRES_USER: hcuser
      POSTGRES_PASSWORD: hcpass
    restart: on-failure:5

  healthchecks:
    image: healthchecks/healthchecks:latest
    command: bash -c 'while !</dev/tcp/healthchecks-db/5432; do sleep 1; done; uwsgi /opt/healthchecks/docker/uwsgi.ini'
    container_name: Healthchecks
    hostname: healthchecks
    mem_limit: 4g
    cpu_shares: 768
    security_opt:
      - no-new-privileges:true
    read_only: true
    user: 1026:100
    ports:
      - 8357:8000
    volumes:
      - /volume1/docker/healthchecks/data:/data:rw
    environment:
      DB: postgres
      DB_HOST: healthchecks-db
      DB_PORT: 5432
      DB_NAME: healthchecks
      DB_USER: hcuser
      DB_PASSWORD: hcpass
      DEBUG: 'False'
      REGISTRATION_OPEN: 'True'
      SITE_NAME: NombreDelSitio
      SITE_ROOT: https://healthchecks.ddns.synology.me
      SECRET_KEY: 76JNTas6KDh5H85UyrcJ%9@x3&y%:$oNj35xm>AS
      DEFAULT_FROM_EMAIL: tuCorreo@correo.com
      EMAIL_HOST: smtp.gmail.com
      EMAIL_HOST_USER: tuCorreo@correo.com
      EMAIL_HOST_PASSWORD: aaaa bbbb cccc dddd
      EMAIL_PORT: 587
      EMAIL_USE_TLS: 'True'
      EMAIL_USE_SSL: 'False'
      EMAIL_USE_VERIFICATION: 'True'
    restart: on-failure:5
    depends_on:
      db:
        condition: service_healthy

Una vez que hayas revisado bien, le damos a Deploy y esperamos a que finalice.

Si hemos hecho todo bien (sé que son muchas cosas xD), los dos contenedores: healthchecks y healthchecks-db tienen que estar en verde.

Ingresar a Healthchecks y creación de la cuenta

Ahora si ingresamos a nuestra web con el subdominio personalizado, debe cargar desde la LAN e Internet. En mi caso:

https://healthchecks.labsmac-n1.synology.me/

Para crear la cuenta clicamos en Sign Up, escribimos nuestro correo y luego a Email Me a Link. Nos llegará un correo para su creación.

Los correos de creación, restablecimiento y todo lo demás se enviarán desde el correo que configuramos en el Docker.

Al clicar en Log In. Se mostrará automáticamente un Proyecto generado y un ping llamado «My First Check»

Deshabilitar registro de cuentas

Si no deshabilitamos el registro de cuentas cualquiera podrá crearse una, por lo que debemos cerrar esto una vez hayamos creado todas las cuentas.

¿Cómo lo hacemos? Volvemos al stack de Portainer y clicamos en el Editor, cambiamos la linea de:

REGISTRATION_OPEN: 'True'

a

REGISTRATION_OPEN: 'False'

Luego clicamos en Update the stack para actualizar el docker. Una vez que los dos contenedores vuelven a verde, regresamos a la página y nos encontramos con una diferencia: ya no se permite la creación de cuentas.

Y esto es todo por hoy. Ha sido un día intenso preparando este tutorial, y espero que el proceso de instalar Healthchecks en Synology usando Portainer les haya resultado claro y útil.

Healthchecks es una herramienta extremadamente potente: en los próximos posts abordaremos la configuración inicial, la creación de proyectos, la activación de MFA y, más adelante, la programación de tareas para monitorizar vuestros NAS Synology y sus copias de seguridad.

Si te ha gustado el post me ayudarías mucho con una contribución para continuar con este proyecto 😀

Dona aquí: https://ko-fi.com/labsmac