Check_MK-Server im Docker-Container

1. Check_MK im Docker-Container

In unserer Installationsanleitung für Check_MK in Docker haben wir Ihnen bereits gezeigt, wie Sie Check_MK in einem Docker-Container aufsetzen können. Dieser Artikel geht etwas ausführlicher auf die weiteren Einzelheiten ein.

2. Optionale Parameter bei der Einrichtung

Alle folgenden Parameter werden zusätzlich bei der Einrichtung einer Check_MK-Instanz als Container angegeben und stehen daher nicht alleine.

2.1. Nutzung von HTTPS

Wenn Check_MK der einzige Webserver auf Ihrer Dockernode ist, können Sie den Port auch auf den Standard Port (80) von HTTP binden. Sobald sie jedoch mehrere Webserver auf einer Dockernode haben, werden Sie wahrscheinlich einen Reverse-Proxy wie NGINX nutzen. Dieser leitet die Anfragen an den richtigen Container weiter. Über diese Technologie können Sie auch (eventuell bereits vorhandenes) HTTPS nutzen. Der Reverse-Proxy wird dann über HTTPS angesprochen, während die Kommunikation mit dem Container weiterhin über HTTP erfolgt.

2.2. Setzen eines initialen Passworts

In Check_MK wird bei der Einrichtung einer Instanz ein zufälliges Passwort für den Standardbenutzer cmkadmin erstellt. Bei der Erstellung eines Check_MK-Containers können sie auch ein manuelles Passwort vergeben. Fügen Sie dazu lediglich die Option -e CMK_PASSWORD='mypassword' der Erstellung hinzu.

2.3. Setzen einer eigenen Instanz-ID

Mit dem Standardbefehl zur Erstellung eines Check_MK-Containers wird die ID der erzeugten Instanz in dem Container cmk. Diese ist wichtig, um die Instanz über HTTP(S) ansteuern zu können und muss daher eindeutig sein. Wenn Sie mehrere Container von Check_MK auf der gleichen Dockernode betreiben wollen, werden Sie die ID manuell setzen müssen, um die Eindeutigkeit gewährleisten zu können. Sie erreichen das, indem Sie die Option -e CMK_SITE_ID=mysite hinzufügen.

2.4. Senden von Benachrichtigungen

Eine wichtige Funktionen von Check_MK ist es, im Falle von Problemen Benachrichtigungen per Email zu versenden. Check_MK nutzt in seinen Container-Images Postfix als MTA (Mail Transfer Agent) für ausgehende Emails. Dieser ist so konfiguriert, dass er die Emails nicht direkt an die Empfänger zustellt sondern grundsätzlich an einen einen weiteren Mailserver (SMTP-Relay-Server, Smarthost) weiterleiten möchte, welchen Sie außerhalb des Containers bereitstellen müssen. So ein Relay-Server ist praktisch in jeder Organisation vorhanden.

Geben Sie bei der Erstellung den Relay-Mailserver an, der die Benachrichtigungen weiterleiten soll. Dazu setzen Sie mit der Option -e die Variable MAIL_RELAY_HOST, wie zum Beispiel -e MAIL_RELAY_HOST='mailrelay.mydomain.com'. Falls der Mailserver einen korrekten Hostnamen erwartet, fügen sie zusätzlich folgende Option an: --hostname 'mymonitoring.mydomain.com'.

Check_MK-Container unterstützen derzeit keine Konfiguration von Zugangsdaten für den Smarthost. Falls Sie diese benötigen, können Sie eine Postfix-Konfiguration oder ein Konfigurationsverzeichnis aus dem Dockernode in den Container binden.

Falls Sie die  Check_MK Enterprise Edition verwenden, können Sie Postfix auch komplett umgehen und die Alarmierung von Check_MK direkt an einen Smarthost weiterleiten lassen. Dies geschieht per synchronem SMTP und ist im Artikel über die Alarmierung genauer beschrieben. Und hier ist auch eine Authentifizierung innerhalb von SMTP möglich.

2.5. Zugriff auf Livestatus per TCP

Sobald sie mehrere Check_MK-Container/Instanzen miteinander zu einer verteilten Umgebung verknüpfen wollen, benötigen Sie einen speziellen TCP-Port für die Schnittstelle Livestatus. Diese Schnittstelle ermöglicht die Kommunikation der Instanzen untereinander. Binden Sie dafür diesen Port, wie den Port für HTTP auch, an einen der Dockernodes und aktivieren Sie diesen TCP-Port in der Instanz für Livestatus: -e CMK_LIVESTATUS_TCP=on -p 6557:6557.

2.6. Zugriff per Kommandozeile

In machen Fällen werden Sie Befehle auf der Kommandozeile ausführen wollen. Da Befehle für eine Instanz immer mit einem speziellen Benutzer ausgeführt werden, müssen Sie diesen bei dem Login angeben. Der Benutzer hat in Check_MK immer den gleichen Namen wie die Instanz, die er verwaltet. Mit der Option -u cmk geben Sie den Benutzer cmk an:

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

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

2.7. Nutzung der Event Console

Check_MK ist in der Lage SNMP-Traps und Syslog-Nachrichten zu empfangen. Damit Sie diese Funktion in einem Check_MK-Container nutzen können, müssen sie die standardisierten Ports mit den folgenden Optionen an den Check_MK-Container weiterreichen: -p 162:162/udp -p 514:514/udp -p 514:514/tcp. Damit die Instanz selbst auch diese Ports beachtet, schalten Sie danach in der Instanz mit omd config die entsprechenden Addons ein. Sie finden diese in dem Untermenü Addons:

root@linux# docker container exec -it -u cmk monitoring bash
OMD[mysite]:~$ omd config

3. Einen Check_MK-Container aktualisieren

Eine Aktualisierung einer Check_MK-Instanz ist nicht trivial, wenn Sie in einem Container läuft. Das hat vor allem Gründe in der Architektur von Check_MK, da die Konfiguration einer Instanz und andere Daten im Zuge eines Versionswechsels ebenfalls aktualisiert werden müssen. Eine Aktualisierung erfolgt daher - anders als normalerweise - in den folgenden Schritten:

3.1. Den Check_MK-Container sichern

Wenn Sie den Container wie empfohlen erstellt haben, werden alle Daten in einem persistenten Dateisystem gespeichert, welches unabhängig von dem Container ist. Es ist daher nicht ausreichend, von dem Container einen Snapshot zu erstellen, um die Daten zu sichern. Stoppen Sie daher den Container und sichern die Daten aus dem Container heraus an eine geeignete Stelle:

root@linux# docker stop monitoring
monitoring
root@linux# docker cp monitoring:/omd/sites - > /my/path/to/backup.tar

3.2. Den Check_MK-Container updaten

Erstellen Sie nun einen zweiten Container mit der neuen Version, damit für das Update sowohl die alte Version, als auch die gewünschte zur Verfügung steht. Dabei wird ein Kommando übergeben, um zu verhindern, dass die dabei gestartet wird. Halten Sie diese Shell offen, um das später das Update durchführen zu können:

root@linux# sudo docker container run -it --rm --volumes-from monitoring --name monitoring_update checkmk/check-mk-enterprise:1.5.0p6 bash
root@801beb91d3b6:/#

Check_MK setzt immer einen Standard, welche Check_MK-Version genutzt werden soll. Ändern Sie diesen Eintrag auf dem zweiten Container mit dem folgenden Befehl:

root@linux# docker cp -L monitoring:/omd/versions/default - | docker cp - monitoring_update:/omd/versions/

Nun können Sie das Update auf dem zweiten Container durchführen. Beenden Sie gegebenenfalls die offene Shell, nachdem das Update beendet ist:

root@linux# docker exec -it -u cmk monitoring_update omd update
2018-10-12 14:32:29 - Updating site 'mytest' from version 1.5.0p4.cee to 1.5.0p5.cee...

 * Updated        etc/apache/conf.d/omd.conf
Finished update.

Den Check_MK-Container austauschen

Nachdem Sie die (Konfigurations-)Daten aktualisiert haben, können sie den alten Container durch einen neuen ersetzen. Benennen Sie dazu den alten Container zunächst um:

root@linux# docker rename monitoring monitoring_old
root@linux# 

Sie können nun einen Container mit der neuen Check_MK-Version starten und diesem das aktualisierte Dateisystem von dem alten Container zuordnen:

root@linux# docker container run -dit -p 8080:5000 --tmpfs /omd/sites/cmk/tmp --volumes-from monitoring_old --name monitoring checkmk/check-mk-enterprise:1.5.0p6

Auch hier können Sie wieder in Logs sehen, ob der ohne Probleme gestartet wurde:

root@linux# docker container logs monitoring
Preparing tmp directory /omd/sites/cmk/tmp...OK
Starting mkeventd...OK
Starting liveproxyd...OK
Starting mknotifyd...OK
Starting rrdcached...OK
Starting cmc...OK
Starting apache...OK
Initializing Crontab...OK

Abschließend entfernen Sie noch den alten Container:

root@linux# docker rm monitoring_old

4. Eigene Container-Images erstellen

Sie können mit Hilfe unseres Respository auch eigene  Check_MK Enterprise Edition Images erstellen. Klonen Sie sich dazu das aktuelle Check_MK-Git und navigieren sie zu dem docker-Verzeichnis. Sie können sich nun mit Hilfe Ihrer Kundendaten ein eigenes Image erstellen:

myuser@myhost:~/git/check_mk/docker# docker build \
    --build-arg CMK_VERSION=1.5.0p5 \
    --build-arg CMK_EDITION=enterprise \
    --build-arg CMK_DL_CREDENTIALS='myusername:mypassword' \
    -t mycompany/check-mk-enterprise:1.5.0p5

Während des Bauprozesses werden zwei externe Dateien benötigt, welche mit ihren Kundenlogindaten automatisch von unserem Downloadserver geladen werden. Um das zu verhindern, können Sie die benötigten Dateien auch vorher manuell laden und in dem docker-Verzeichnis ablegen:

  • Das Installationspaket von Check_MK zu Debian Stretch
  • Der öffentliche GPG-Schlüssel zu dem Installationspaket