Checkmk
to checkmk.com

1. Grundsätzliches

Mit Docker haben Sie die Möglichkeit, Checkmk innerhalb einer leichtgewichtigen, in sich abgeschlossenen Container-Umgebung zu installieren. In diesem Artikel führen wir Sie durch die Einrichtung von Checkmk in Docker und zeigen Ihnen einige Tricks, die das Leben mit Checkmk in Docker einfacher machen.

Tip

Checkmk stellt offizielle Docker-Images bereit, hat aber keine Kontrolle darüber, welche Eigenschaften das Host-System hat, auf dem Sie die entsprechenden Container einrichten. Hier gelten die bekannten Vor- und Nachteile von containerisierten Umgebungen. Es kann in speziellen Fällen zu unerwarteten Problemen in Bezug auf die Performance kommen, beispielsweise wenn der Kernel des Host-Systems deutlich neuer oder deutlich älter ist als der Kernel, den die Checkmk-Installation im Container erwartet. In diesen Fällen können zusätzliche sysctl-Einstellungen nötig sein.

2. Voraussetzungen

Zur Ausführung der in diesem Artikel vorgestellten Befehle benötigen Sie eine funktionierende Installation der Docker Engine und Grundkenntnisse in deren Nutzung.

3. Ein Checkmk-Image beziehen

Um Ihnen die Nutzung als Container so einfach wie möglich zu machen, stellen wir für jede Checkmk-Edition eigene Images zur Verfügung:

CRE Checkmk Raw

Docker Hub, Checkmk-Download-Seite

Kommerzielle Editionen

Checkmk-Download-Seite, Checkmk-Kundenportal

Beim ersten Start eines dieser Images wird nicht nur der passende Container ausgeführt, sondern auch gleich eine Monitoring-Instanz mit dem Namen cmk eingerichtet und gestartet. Diese ist sofort bereit zur Anmeldung mit dem Benutzer cmkadmin.

3.1. Images für Checkmk Raw

CRE Für Checkmk Raw können Sie das gewünschte Docker-Image direkt aus dem Docker Hub beziehen. Bei bestehender Internetverbindung sucht die Docker Engine automatisch im Docker Hub nach dem Image-Namen, den Sie zum Anlegen eines Containers angeben. Sie können direkt zum Abschnitt Start eines Checkmk-Containers springen.

Alternativ dazu laden Sie das Image selbst aus dem Docker Hub oder von der Checkmk-Download-Seite herunter und hinterlegen Sie es auf dem System, in dem Sie einen Checkmk Raw-Container starten möchten. Mit docker load -i check-mk-*.tar.gz stellen Sie die Image-Datei für die Docker Engine auf Ihrem Docker-Node zur Verfügung:

root@linux# docker load -i check-mk-*.tar.gz
346f14bf17b9: Loading layer [==================================================>]  80.41MB/80.41MB
87334b162001: Loading layer [==================================================>]  2.048kB/2.048kB
4c6fcf6a2c87: Loading layer [==================================================>]  335.7MB/335.7MB
1ba0c3ef2749: Loading layer [==================================================>]  279.7MB/279.7MB
bebf82ffc112: Loading layer [==================================================>]  1.291GB/1.291GB
88b55249828a: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: checkmk/check-mk-raw:2.4.0p9

3.2. Images für die kommerziellen Editionen

CEE Die Images der kommerziellen Editionen sind nicht frei im Docker Hub verfügbar. Sie können das gewünschte Image entweder manuell herunterladen und auf Ihrem Docker-Node hinterlegen, oder Sie lassen die Docker Engine das Image selbst aus der dafür vorgesehenen Checkmk Docker-Registry herunterladen.

Für das manuelle Herunterladen finden Sie Ihre gewünschte Edition und Version auf der Checkmk-Download-Seite oder im Checkmk-Kundenportal. Verwenden Sie nach dem Herunterladen docker load -i wie im Abschnitt Images für Checkmk Raw beschrieben.

Um das Image von der Docker Engine herunterladen zu lassen, loggen Sie sich zunächst in der Checkmk Docker-Registry mit Ihrem Kundenportal-Login ein. Zum Einloggen nutzen Sie den Credential Store von Docker oder den folgenden Befehl:

root@linux# docker login registry.checkmk.com --username myusername
Password:
Login Succeeded

Nach dem erfolgreichen Einloggen kann die Docker Engine über die Registry auf das Image für die gewünschte Version zugreifen. Geben Sie dazu beim Containerstart den vollen Pfad zum gewünschten Image an. Die Docker Engine prüft dann, ob das Image bereits lokal verfügbar ist, und lädt es andernfalls automatisch herunter.

Für die Version 2.4.0p9 von Checkmk Enterprise geben Sie beim Containerstart den vollen Pfad für das Image wie folgt an: registry.checkmk.com/enterprise/check-mk-enterprise:2.4.0p9

Für die entsprechenden Versionen von Checkmk Cloud oder Checkmk MSP ersetzen Sie in diesem Pfad alle Vorkommen von enterprise durch cloud beziehungsweise managed.

4. Start eines Checkmk-Containers

Sie können Checkmk-Images entweder mit docker compose und einer Compose-Datei oder mit docker container run unter Angabe einer Reihe von Parametern starten. Welche Option Sie wählen, hängt von Ihrem konkreten Einsatzszenario ab.

4.1. Start mit docker compose

Das folgende Beispiel zeigt die Variante mit docker compose, in der es mit wenig Aufwand möglich ist, parallel weitere Container zu starten.

In der Datei compose.yaml beschreiben Sie mit Parametern die gewünschten Eigenschaften für den zu startenden Docker-Container. Hier können auch mehrere Container beschrieben werden, die dann zusammen gestartet werden.

Das folgende Beispiel für eine geeignete compose.yaml-Datei zeigt die Parameter zum Starten eines einzigen Checkmk-Containers. Die enthaltenen Parameter und ihre Werte werden nachfolgend erläutert.

compose.yaml
services:
  checkmk:
    image: "checkmk/check-mk-raw:2.4.0-latest"
    container_name: "monitoring"
    environment:
      - CMK_PASSWORD=mypassword
      - TZ=Europe/Berlin
    volumes:
      - monitoring:/omd/sites
    tmpfs:
      - /opt/omd/sites/cmk/tmp:uid=1000,gid=1000
    ports:
      - 8080:5000
      - 8000:8000
    restart: always

volumes:
  monitoring:

Nähere Informationen zu den benutzten Optionen:

Option Beschreibung

checkmk:

Selbstgewählter sprechender Name für den Docker-Service, für den der Checkmk-Container gestartet werden soll.

image: "checkmk/check-mk-raw:2.4.0-latest"

Bezeichnung des Checkmk-Images im Format <Repository>:<Tag>. Die Bezeichnungen können Sie über den Befehl docker images auslesen. Falls Sie das Image aus der Checkmk Docker-Registry beziehen, muss das Image mit seinem vollen Pfad angegeben werden.

container_name: "monitoring"

Selbstgewählter sprechender Name für den Container. Dieser Name muss eindeutig sein und darf auf dem Docker-Node kein zweites Mal verwendet werden.

environment:
  - CMK_PASSWORD=mypassword
  - TZ=Europe/Berlin

Mit der Umgebungsvariable CMK_PASSWORD legen Sie fest, wie das Passwort zum Einloggen als cmkadmin-Benutzer in der Checkmk-Instanz lauten soll. Sie können dieses Passwort jederzeit ändern, indem Sie innerhalb des Containers als OMD-Benutzer cmk-passwd cmkadmin ausführen.

 

TZ ist die Zeitzone, die Sie für den Container einstellen. Falls Sie diese Einstellung weglassen, wird der Container (und damit auch Ihre Checkmk-Instanz) automatisch mit UTC arbeiten, bis Sie die Einstellung im Container ändern.

volumes:
  - monitoring:/omd/sites

Diese Angabe bindet die Daten der Instanz in diesem Container an eine persistente Stelle im Dateisystem des Docker-Nodes. Das Volume namens monitoring wird im Container im Pfad /omd/sites eingebunden. Volumes werden von der Docker Engine verwaltet und können mit docker volume eingesehen oder verändert werden. Wenn der Container entfernt wird, gehen die Daten nicht verloren.

tmpfs:
  - /opt/omd/sites/cmk/tmp:uid=1000,gid=1000

Für eine optimale Performance können Sie ein temporäres Dateisystem direkt im RAM des Docker-Nodes nutzen. Mit dieser Option geben Sie den Pfad zu diesem Dateisystem an. Wenn Sie die ID der Instanz ändern, so muss auch dieser Pfad entsprechend angepasst werden.

ports:
  - 8080:5000
  - 8000:8000

Der Webserver des Containers lauscht standardmäßig auf Port 5000. In diesem Beispiel wird der Port 8080 des Docker-Nodes an den Port 5000 des Containers gebunden, damit dessen Web-Interface von außen erreichbar ist. Wenn Sie keinen anderen Container oder Prozess haben, welcher den Standard-HTTP-Port 80 benutzt, können Sie den Container auch daran binden. In diesem Fall würde die Option so aussehen: 80:5000. Die Nutzung von HTTPS wird im Abschnitt HTTPS erläutert.

Zusätzlich müssen Sie noch den Port des Agent Receivers veröffentlichen, um die Registrierung des Agent Controllers durchführen zu können.

 

Für bestimmte Szenarien, die über die Grundfunktionalität von Checkmk hinausgehen, müssen weitere Ports explizit freigegeben werden. Dies betrifft beispielsweise den Zugriff auf Livestatus per TCP im verteilten Monitoring oder die Nutzung der Event Console innerhalb eines Checkmk-Containers. Einen Überblick über die dafür relevanten Ports finden Sie im Artikel Ports.

restart: always

Normalerweise startet ein Container nicht neu, wenn er gestoppt wurde. Mit dieser Option sorgen Sie dafür, dass er eben doch automatisch neu startet. Wenn Sie allerdings einen Container manuell stoppen, wird er nur neu gestartet, wenn der Docker-Daemon neu startet oder der Container selbst manuell neu gestartet wird.

volumes:
  monitoring:

Hier erscheinen alle Volumes, die innerhalb von Services benötigt werden. In diesem Fall ist das nur das Volume monitoring.

Zusätzlich zum checkmk-Service können Sie in Ihrer compose.yaml-Datei noch weitere Services definieren, die in der gleichen Containergruppe gestartet werden sollen.

Sobald Sie alles wie gewünscht beschrieben haben, können Sie die Container anlegen und starten. Führen Sie dazu in dem Verzeichnis, in dem Ihre compose.yaml-Datei liegt, docker compose up aus. Bei docker compose up -d (für detached) werden die Container im Hintergrund gestartet. docker compose up sorgt dafür, dass alle Container und ihre zugehörigen Volumes ordnungsgemäß angelegt werden.

Falls Sie noch kein Image heruntergeladen und auf Ihrem System hinterlegt haben, dauert das Ausführen von docker compose up einige Minuten, da zu diesem Zeitpunkt das angegebene Image aus dem Docker Hub (nur für Checkmk Raw möglich) oder aus der Checkmk Docker-Registry geladen wird. Die Ausgabe hier basiert auf einem Szenario, in dem das Image mit docker load -i vorbereitet wurde.

root@linux# docker compose up
[+] Running 3/3
  Network cmk_compose_default      Created                           0.0s
  Volume "cmk_compose_monitoring"  Created                           0.0s
  Container monitoring             Created                           0.0s
Attaching to monitoring
monitoring  | ### CREATING SITE 'cmk'
monitoring  | Generating configuration for core (type nagios)...
monitoring  | Precompiling host checks...OK
monitoring  | Adding /opt/omd/sites/cmk/tmp to /etc/fstab.
monitoring  | Going to set TMPFS to off.
monitoring  | Updating core configuration...
monitoring  | Executing post-create script "01_create-sample-config.py"...OK
monitoring  | Executing post-create script "02_cmk-compute-api-spec"...OK
monitoring  | Executing post-create script "03_message-broker-certs"...OK
monitoring  | Adding /opt/omd/sites/cmk/tmp to /etc/fstab.
monitoring  | Going to set TMPFS to off.
monitoring  | Skipping Apache restart.
monitoring  | Created new site cmk with version 2.4.0p9.cre.
monitoring  |
monitoring  |   The site can be started with omd start cmk.
monitoring  |   The default web UI is available at http://2403d4ed552d/cmk/
monitoring  |
monitoring  |   The admin user for the web applications is cmkadmin with password: mypassword
monitoring  |   For command line administration of the site, log in with 'omd su cmk'.
monitoring  |   After logging in, you can change the password for cmkadmin with 'cmk-passwd cmkadmin'.
monitoring  |
monitoring  | ### STARTING XINETD
monitoring  |  * Starting internet superserver xinetd
monitoring  |    ...done.
monitoring  | ### STARTING SITE
monitoring  | Starting agent-receiver...OK
monitoring  | Starting mkeventd...OK
monitoring  | Starting rrdcached...OK
monitoring  | Starting redis...OK
monitoring  | Starting npcd...OK
monitoring  | Starting automation-helper...OK
monitoring  | Starting ui-job-scheduler...OK
monitoring  | Starting nagios...OK
monitoring  | Starting apache...OK
monitoring  | Starting crontab...OK
monitoring  | ### STARTING CRON
monitoring  | ### CONTAINER STARTED

Laufende Container stoppen Sie mit docker compose stop. Um bereits angelegte Container erneut zu starten, führen Sie docker compose start aus.

Sie können die Ausgaben des Containers monitoring mit docker container logs monitoring einsehen. Ausführliche Informationen über den Container, beispielsweise über die in ihn eingebundenen Volumes, erhalten Sie mit docker inspect monitoring.

4.2. Start mit docker container run

Alternativ zum Ausführen mit docker compose können Sie das Checkmk-Image mit docker container run starten. Dabei übergeben Sie die Angaben aus der compose.yaml-Datei nun als Parameter.

Der folgende Befehl erzeugt den gleichen Container mit den gleichen Eigenschaften wie im eben gezeigten Beispiel. Die gezeigte Ausgabe basiert auf einem Szenario, in dem das Image noch nicht manuell heruntergeladen wurde.

root@linux# docker container run -dit \
          --name monitoring  \
          -e CMK_PASSWORD='mypassword' \
          -e TZ='Europe/Berlin' \
          -v monitoring:/omd/sites \
          --tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 \
          -p 8080:5000 \
          -p 8000:8000 \
          --restart always \
          checkmk/check-mk-raw:2.4.0-latest
Unable to find image 'checkmk/check-mk-raw:2.4.0-latest' locally
2.4.0-latest: Pulling from checkmk/check-mk-raw
215ed5a63843: Pull complete
942691e22878: Pull complete
fafdf3fa2522: Pull complete
1888d204a5e5: Pull complete
c126aa904d34: Pull complete
b469f01932b5: Pull complete
Digest: sha256:bbabed3f4f5e88775f872bcf0f1df36660e13d0ebf613e4e6141f4c81e5c6354
Status: Downloaded newer image for checkmk/check-mk-raw:2.4.0-latest
c850572de41592afff9de610d1ef3faecb267bf4fbccf2a9d8dae92dec11aacb

Hier wird der Container im detached-Modus ausgeführt (-d). Um die Ausgaben aus dem Container einzusehen, nutzen Sie docker container logs monitoring. Ausführliche Informationen über den Container erhalten Sie mit docker inspect monitoring.

Tip

Beim Start mit docker container run haben Sie die Möglichkeit, von Anfang an festzulegen, dass der Container und seine Volumes nach dem Stoppen automatisch entfernt werden sollen. Der persistente Datenspeicher wird durch den Parameter -v monitoring:/omd/sites angelegt. Lassen Sie diese Option weg, wird kein persistenter Speicher angelegt.

4.3. Weitere Optionen bei der Einrichtung

Die bisher gezeigten Beispiele dienen der einfachen Einrichtung von Checkmk-Containern. Für besondere Anwendungsszenarien stehen Ihnen einige weitere Optionen zur Verfügung.

HTTPS

Auch innerhalb eines Docker-Containers können Sie die Weboberfläche Ihrer Instanz über HTTPS absichern. Gängige Praxis hierfür ist es, einen Reverse Proxy zu nutzen, der die Schnittstelle für HTTP(S)-Verbindungen zwischen den Containern in Ihrem System und der Außenwelt darstellt. Dieser Proxy kann sicherstellen, dass nur HTTPS-Verbindungen akzeptiert bzw. an den Checkmk-Container durchgereicht werden.

Falls Sie einen Reverse Proxy nutzen, geben Sie beim Start Ihres Checkmk-Containers gar keine Ports mehr explizit frei. Stattdessen werden dann alle eingehenden und ausgehenden Verbindungen ausschließlich über den Reverse Proxy abgewickelt.

Zusätzliche Umgebungsvariablen

Die Tabelle zeigt alle Checkmk-spezifischen Umgebungsvariablen, die Sie beim Containerstart nutzen können, um Ihren Container wunschgemäß einzurichten. Dabei geben Sie die Variablenwerte in der Compose-Datei beziehungsweise in der Parameterliste beim Aufruf von docker container run jeweils in der gleichen Form an wie die schon erwähnten Umgebungsvariablen CMK_PASSWORD und TZ.

CMK_SITE_ID

Selbstgewählter Name der zu erstellenden Checkmk-Instanz innerhalb des Containers, falls Sie vom Standard-Instanznamen cmk abweichen möchten.

CMK_LIVESTATUS_TCP

Einstellung für die Verwendung von Livestatus über TCP. Wählen Sie als Wert hierfür on, wird innerhalb des Containers für die Instanz der Befehl omd config set LIVESTATUS_TCP on ausgeführt.

MAIL_RELAY_HOST

Adresse eines von Ihnen bereitgestellten Mail-Relay-Servers (z.B. mailrelay.mydomain.com) zum Senden von Checkmk-Benachrichtigungen. Benachrichtigungen werden zunächst von der Instanz innerhalb des Containers an den hier angegebenen Mailserver (SMTP-Relay-Server, Smarthost ohne Authentifizierung) außerhalb des Containers weitergereicht, um von dort dann an das eigentliche Ziel verschickt zu werden.

5. Nutzung von Checkmk im laufenden Container

Nachdem alle benötigten Dateien geladen wurden und der Container gestartet ist, sollten Sie die GUI von Checkmk über http://localhost:8080/cmk/check_mk/ beziehungsweise über die Adresse des Docker Nodes erreichen:

Checkmk-Anmeldedialog.

Sie können sich nun erstmals einloggen und Checkmk ausprobieren.

Um über die Befehlszeile auf Ihre Instanz innerhalb des Containers zuzugreifen, loggen Sie sich als Instanzbenutzer im Container ein. Dieser Benutzer hat in Checkmk immer den gleichen Namen wie die Instanz, die er verwaltet. Mit dem folgenden Befehl öffnen Sie eine interaktive Bash-Sitzung im Container monitoring und loggen sich darin als Benutzer cmk an:

root@linux# docker container exec -it -u cmk monitoring bash

Danach können Sie Ihre Befehle an die Instanz übergeben.

6. Update

Wie Sie Checkmk im Docker-Container aktualisieren können, ist im Artikel Updates und Upgrades beschrieben.

7. Deinstallation

Wenn Sie einen Container nicht mehr benötigen, können Sie ihn entfernen und bei Bedarf auch die dazugehörigen Volumes löschen. Die Befehle dazu finden Sie in den folgenden Abschnitten.

7.1. Deinstallation mit docker compose

Um einen Container zu entfernen, führen Sie docker compose down (bei laufendem Container) oder docker compose rm (bei gestopptem Container) aus.

root@linux# docker compose down
[+] Running 2/2
  Container monitoring         Removed                    6.3s
  Network cmk_compose_default  Removed                    0.1s

Wenn Sie die Option -v ergänzen, werden zusammen mit dem Container auch die dazugehörigen Volumes auf dem Docker-Node entfernt.

7.2. Deinstallation nach dem Start mit docker container run

Einen mit docker container run gestarteten Container namens monitoring stoppen Sie mit docker container stop monitoring. Danach können Sie mit docker rm monitoring den Container entfernen. Ein Volume namens monitoring, das Sie nach dem Entfernen des dazugehörigen Containers nicht mehr benötigen, löschen Sie mit docker volume rm monitoring.

7.3. Das Checkmk-Image löschen

Möchten Sie das gewählte Checkmk-Image gar nicht mehr benutzen, können Sie es mit docker rmi myimageid entfernen. Der Befehl docker images listet alle vorhandenen Images auf. Identifizieren Sie das Image, das Sie löschen möchten, und fügen Sie die entsprechende Image-ID in Ihren Aufruf von docker rmi ein.

Auf dieser Seite