1. Checkmk im Docker-Container
In unserer Installationsanleitung für Checkmk in Docker haben wir Ihnen bereits gezeigt, wie Sie Checkmk 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 Checkmk-Instanz als Container angegeben und stehen daher nicht alleine.
2.1. Nutzung von HTTPS
Wenn Checkmk 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 Checkmk wird bei der Einrichtung einer Instanz ein
zufälliges Passwort für den Standardbenutzer
cmkadmin
erstellt. Bei der Erstellung eines Checkmk-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 Checkmk-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 Checkmk 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 Checkmk ist es, im Falle von Problemen Benachrichtigungen per Email zu versenden. Checkmk 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'
.
Checkmk-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 eine Checkmk Enterprise Editions verwenden, können Sie Postfix auch komplett umgehen
und die Alarmierung von Checkmk 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 Checkmk-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 Checkmk 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
Checkmk ist in der Lage SNMP-Traps und Syslog-Nachrichten zu empfangen. Damit
Sie diese Funktion in einem Checkmk-Container nutzen können, müssen sie die
standardisierten Ports mit den folgenden Optionen an den Checkmk-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 Checkmk-Container aktualisieren
3.1. Einfaches Update für aktuelle Checkmk-Images
Die Aktualisierung einer Checkmk-Instanz unterscheidet sich je nach Version des Images. Ab 1.5.0p13 gestaltet sich der Update-Prozess sehr einfach und es gibt lediglich die folgenden Vorausetzungen:
Der Container wird nicht gelöscht, wenn der Container gestoppt wird. Das heißt, die Option
--rm
wurde beim Starten nicht benutzt.Sie kennen die ID des Datenspeichers (Volume) zu dem Container. Normalerweise sollten Sie beim Start des Containers seinem Speicher eine eindeutige ID gegeben haben. Wenn Sie sich unsicher sind, wie die ID Ihres Volumes ist, finden Sie weiter unten Hilfe.
Wenn Sie der Einführung zu Checkmk im Container gefolgt sind, sollten Sie die ersten beiden Vorausetzungen automatisch erfüllen. Wenn Ihr Container ein Image nutzt, welches älter als 1.5.0p13 ist, folgen Sie bitte den Anweisungen weiter unten. Ansonsten ist der Aktualisierungsprozess in 3 Schritten erledigt:
Stoppen Sie den Container. Wenn der Checkmk-Container
myContainer
heißt, lautet der Befehl zum Beispiel:docker stop myContainer
.Entfernen Sie den Container. Der Befehl dazu ist:
docker rm myContainer
.Starten Sie einen neuen Container mit der gewünschten Version und binden Sie das bekannte Volume ein. Wenn Ihr Volume
myVolume
heißt, heißt die entsprechende Option-v myVolume:/omd/sites
.
Danach wird Checkmk automatisch den Rest erledigen und Ihre Checkmk-Instanz aktualisieren und starten. Sie können sich danach wie gewohnt einloggen.
3.2. Detailliertes Update für frühere Checkmk-Images
Eine Aktualisierung einer Checkmk-Instanz vor 1.5.0p13 ist komplexer. Der Grund liegt vor allem in der Architektur von Checkmk, da die Konfiguration einer Instanz und andere Daten im Zuge eines Versionswechsels ebenfalls aktualisiert werden müssen. Eine Aktualisierung erfolgt daher — anders als oben beschrieben oder auf einem Server direkt — in den folgenden Schritten:
Den Checkmk-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
Den Checkmk-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:/#
Checkmk setzt immer einen Standard, welche Checkmk-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...
[green]#* Updated *etc/apache/conf.d/omd.conf
Finished update.
Den Checkmk-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 Checkmk-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
// STARTING SITE
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
// STARTING CRON
// CONTAINER STARTED
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 Images
mit einer Checkmk Enterprise Editions erstellen. Klonen Sie sich dazu das aktuelle
Checkmk-Git und navigieren
sie zu dem
docker
-Verzeichnis. Sie können sich nun mit Hilfe Ihrer
Kundendaten ein eigenes Image erstellen:
UP(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 Checkmk zu Debian Stretch
Der öffentliche GPG-Schlüssel zu dem Installationspaket
5. Nützliche Befehle
Befehl | Beschreibung |
---|---|
docker inspect myContainer | Mit diesem Befehl können Sie allerlei Informationen über einen laufenden Container mit dem Namen |