In dieser Anleitung zeige ich euch, wie ihr innerhalb weniger Minuten Healthchecks mittels Docker und Traefik bereitstellen könnt.
Bei Healthchecks handelt es sich um ein Monitoring Tool mit dem ihr eure Cron-Jobs oder Skripte überwachen und z.B. auch deren Laufzeit messen könnt. Zusätzlich können Logs oder Status Codes übergeben und in Healthchecks angesehen werden.
Datum | Änderungen |
---|---|
16.08.2023 | Erstellung dieser Anleitung |
01.06.2023 | Anpassung der Traefik Labels, MariaDB Healthcheck hinzugefügt @christian |
1. Vorraussetzung
- Docker mit Docker Compose installiert (Anleitung für Ubuntu / Debian)
- TRAEFIK V2 + 3 – REVERSE-PROXY MIT CROWDSEC IM STACK EINRICHTEN
2. Verzeichnis anlegen
Als ersten Schritt legen wir uns ein Verzeichnis für Healthchecks an:
mkdir -p /opt/containers/healthchecks
3. Anlegen der docker-compose.yml
nano /opt/containers/healthchecks/docker-compose.yml
Inhalt der docker-compose.yml
version: '3.3' services: healthchecks-app: image: healthchecks/healthchecks container_name: healthchecks-app restart: unless-stopped environment: - ALLOWED_HOSTS=healthchecks.euredomain.de - DB=mysql - DB_HOST=healthchecks-db - DB_PORT=3306 - DB_NAME=healthchecks_database - DB_USER=root - DB_PASSWORD=hc_root_pw - DEBUG=False - DEFAULT_FROM_EMAIL=mail@euredomain.de - EMAIL_HOST=mail.euredomain.de - EMAIL_HOST_USER=mail@euredomain.de - EMAIL_HOST_PASSWORD=mail_pw - EMAIL_PORT=587 - EMAIL_USE_TLS=True - EMAIL_USE_VERIFICATION=True - MATTERMOST_ENABLED=False - MSTEAMS_ENABLED=False - OPSGENIE_ENABLED=False - PAGERTREE_ENABLED=False - PD_ENABLED=False - PING_BODY_LIMIT=10000 - PROMETHEUS_ENABLED=False - REGISTRATION_OPEN=False - SECRET_KEY=super-sicherer-secret-key - SITE_NAME=Healthchecks - SITE_ROOT=https://healthchecks.euredomain.de - SLACK_ENABLED=False - SPIKE_ENABLED=False - USE_PAYMENTS=False - VICTOROPS_ENABLED=False - WEBHOOKS_ENABLED=False - ZULIP_ENABLED=False volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro labels: - "traefik.enable=true" - "traefik.http.routers.healthchecks.entrypoints=websecure" - "traefik.http.routers.healthchecks.rule=Host(`healthchecks.euredomain.de`)" - "traefik.http.routers.healthchecks.tls=true" - "traefik.http.routers.healthchecks.tls.certresolver=http_resolver" - "traefik.http.routers.healthchecks.middlewares=default@file" - "traefik.http.routers.healthchecks.service=healthchecks" - "traefik.http.services.healthchecks.loadbalancer.server.port=8000" - "traefik.docker.network=proxy" networks: - proxy - default depends_on: healthchecks-db: condition: service_healthy healthchecks-db: image: mariadb container_name: healthchecks-db restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=hc_root_pw - MYSQL_DATABASE=healthchecks_database volumes: - /etc/localtime:/etc/localtime:ro - ./database:/var/lib/mysql/ healthcheck: test: ["CMD-SHELL", "mysqladmin ping -P 3306 -p$$MYSQL_ROOT_PASSWORD | grep 'mysqld is alive' || exit 1"] interval: 2s retries: 120 networks: - default healthchecks-backup: image: tiredofit/db-backup container_name: healthchecks-backup restart: unless-stopped environment: - DB_TYPE=mariadb - DB_HOST=healthchecks-db - DB_NAME=healthchecks_database - DB_USER=root - DB_PASS=hc_root_pw - DB_DUMP_FREQ=1440 - DB_DUMP_BEGIN=0300 - DB_CLEANUP_TIME=8640 - COMPRESSION=GZ - CONTAINER_ENABLE_MONITORING=FALSE volumes: - /etc/localtime:/etc/localtime:ro - ./backups:/backup depends_on: - healthchecks-db networks: - default networks: proxy: external: true
Notwendige Anpassungen:
- 3x Eure URL (“healthchecks.euredomain.de”)
- 3x DB-Name (“healthchecks_database”)
- 3x DB-Root-PW (“hc_root_pw”):
Ihr könnt natürlich auch einen eigenen DB-User nehmen, dann müsst ihr aber beim DB-Container andere Variablen setzen. - Eure Mail-Server-Daten:
- EMAIL_HOST (“mail.euredomain.de”)
Domain eures Mail-Servers - DEFAULT_FROM_EMAIL / EMAIL_HOST_USER (“mail@euredomain.de”)
Absender der Mails von Healthchecks - EMAIL_HOST_PASSWORD (“mail_pw”)
Passwort des oben genannten Mail-Accounts - EMAIL_PORT / EMAIL_USE_TLS
individuell und passend zu eurem Mail-Server einstellen
- EMAIL_HOST (“mail.euredomain.de”)
- 1x Secret Key (“super-sicherer-secret-key”):
Kein Passwort, aber wichtig fürs Backend. Am Besten lang und kompliziert. - Environment-Variablen des Containers “healthchecks-app”:
Ich habe hier quasi alle möglichen Dienste, mit denen man informiert werden kann, deaktiviert. Das könnt ihr natürlich ändern. Welche Variablen es gibt, findet ihr hier in der Doku von Healthchecks.
Anmerkung zum Backup-Container:
Ich habe hier als dritten Container – neben der eigentlichen Anwendung und dem DB-Container – noch einen Backup-Container hinzugefügt. Dieser macht automatisch ein Backup eurer Datenbank. Die Parameter zum Einstellen der Backups findet ihr hier.
4. Healthchecks starten
docker compose -f /opt/containers/healthchecks/docker-compose.yml up -d
5. Super-User einrichten
Damit ihr einen Admin-User habt, müsst ihr diesen über die Kommandozeile erstellen. Wechselt zunächst in das Verzeichnis:
cd /opt/containers/healthchecks
Gebt dann folgenden Befehl ein und wählt dann im folgenden Schritt euren Usernamen und euer Passwort:
docker compose run healthchecks-app /opt/healthchecks/manage.py createsuperuser
6. Healthchecks testen und einrichten
Ruft im Browser eure URL (“healthchecks.euredomain.de”) auf und loggt euch dort mit den zuvor gewählten Zugangsdaten ein.
Nun könnt ihr eure Checks einrichten. Die URL für den Check bzw. die ID findet ihr in der Übersicht. Falls ihr Fragen zu Healthchecks habt, dann werden diese sehr wahrscheinlich in der Doku beantwortet.
7. Runitor einrichten
Damit ihr z.B. von einem Cron-Job automatisch euer Skript starten und den Ping absetzen könnt, gibt es das Tool Runitor.
Damit kann man extrem einfach und kompakt beides in einer Zeile machen. Positiver Nebeneffekt: Ihr seht in Healthchecks direkt wenn euer Skript läuft und die Laufzeit wird dabei auch direkt noch gemessen. Auch etwaige Rückgabewerte oder Logs werden direkt mitgeschickt.
Wir installieren uns also Runitor:
wget https://github.com/bdd/runitor/releases/download/v0.10.1/runitor-v0.10.1-linux-amd64 -O runitor mv runitor /usr/local/bin/ chmod +x /usr/local/bin/runitor
Nun nutzen wir den bereits eingerichteten ersten Check in Healthchecks und probieren aus, ob alles klappt:
runitor -uuid f0d8fc16-e713-4bf8-9f83-0def8819b62e -api-url https://healthchecks.deinedomain.de/ping -- ifconfig
Wir rufen also lokal “ifconfig” auf und prüfen dann in der Healthchecks-UI im Browser, ob unser neuer Healthchecks-Server die Infos bekommen hat.
Wichtig hierbei ist die “uuid”, die wir immer aus der Web-Oberfläche von Healthchecks kopieren können. Die “api-url” bleibt immer konstant. Sie muss dort stehen, da sonst der Default-Server von Healthchecks genommen wird. Die URL kann wohl auch via Umgebungsvariable “HC_API_URL” gesetzt werden. Dies habe ich aber nicht getestet. Der eigentliche Skript-Aufruf kommt dann nach den beiden Strichen “–“. Die UUID oben ist eine zufällig generierte. Ihr müsst sie natürlich mit eurer UUID tauschen.
Nach dem gleichen Muster können jetzt entsprechende Cron-Jobs abgeändert werden und wir haben immer im Überblick was unsere Skripte so machen.
8. Quellen
https://healthchecks.io/docs/self_hosted_docker/
https://github.com/tiredofit/docker-db-backup
https://github.com/bdd/runitor
Hallo, bei mir startet der DB-Container nicht(wartet). Kann es sein, dass der healthcheck nicht funktioniert?
Gruß Lars