21x9.org | System Administration | Home Automation | Smart Home
04.08.2023

Serverüberwachung mit checkmk

Meine ersten Schritte mit Serverüberwachungstools habe ich vor vielen Jahren mit nagios1 gemacht. Irgendwann bin ich dann zu Icinga2 gewechselt. Immer wieder bin ich auch über checkmk3 gestolpert und habe mich nun endlich einmal dazu entschieden, es mir einmal genauer anzuschauen. Während man nagios und Icinga die Verwandtschaft - gerade wenn es an die Configdateien geht - noch recht gut ansieht, sieht checkmk deutlich anders aus und dieser Eindruck bleibt mitunter auch bestehen, wenn man sich an die Konfigurationsdateien wagt (wenngleich auch hier der Nagios-Ursprung noch gut erkennbar ist). Denn alle zuvor genannten Tools entstammen einer gemeinsamen Wurzel. Und sie sind bis heute in Teilen kompatibel.

checkmk wirkt an einigen Stellen etwas moderner als seine Geschwister und es lässt sich weitestgehend - ohne manuelles Eingreifen in die Konfigurationsdateien - über seine Weboberfläche konfigurieren. Wer mehr Automatisierung wünscht, kann u.a. die REST-API von checkmk nutzen.

Bei der Installation muss man zwischen dem eigentlichen checkmk-Servers und dem sog. checkmk-Agent unterscheiden. Den eigentlichen Server kann man z.B. sehr einfach mittels Docker betreiben. Der Agent sollte direkt im Hostsystem selbst installiert werden, schließlich wollen wir dessen Zustand erfassen, nicht den eines Docker-Containers. Aber beginnen wir mit checkmk selbst, ein fertiger Docker-Container wird vom checkmk-Projekt bereits zur Verfügung gestellt, wir können diesen also einfach direkt starten4:

docker container run --rm -dit -p 8080:5000 -p 8000:8000 --tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 -v /omd/sites --name monitoring -v /etc/localtime:/etc/localtime:ro checkmk/check-mk-raw:2.2.0-latest

Beim ersten Start des Containers generiert checkmk automatisch ein Kennwort für den User cmkadmin, wer lieber direkt ein eigenes Kennwort nutzen möchte, kann dem docker run Befehl den Parameter -e CMK_PASSWORD='meinsupergeheimespassword' mitgeben5:

docker container run --rm -dit -p 8080:5000 -p 8000:8000 --tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 -v /omd/sites --name monitoring -v /etc/localtime:/etc/localtime:ro -e CMK_PASSWORD='meinsupergeheimespassword' checkmk/check-mk-raw:2.2.0-latest

Nach einer kurzen Wartezeit sollte checkmk unter http://127.0.0.1:8080/cmk/check_mk zur Verfügung stehen. Wer checkmk gerne hinter einem Reverse-Proxy betreiben möchte, kann z.B. folgende nginx-Konfiguration nutzen:

server {
        listen 443 ssl;
        listen [::]:443;

        server_name checkmk.example.org;

        ssl_certificate /var/lib/dehydrated/certs/checkmk.example.org/fullchain.pem;
        ssl_certificate_key /var/lib/dehydrated/certs/checkmk.example.org/privkey.pem;
        ssl_trusted_certificate /var/lib/dehydrated/certs/checkmk.example.org/fullchain.pem;

        location / {
                proxy_pass http://127.0.0.1:8080/;

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Host $server_name;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
        }
}

Wichtig ist hier insbesondere die Angabe des Host-Headers, ohne diesen leitet checkmk gerne mal auf die eigentliche Docker-URL um und auch Funktionen wie 2FA stehen (trotz https) nicht zur Verfügung.

Hat man sich erfolgreich an der Weboberfläche angemeldet, sollte zunächst der Agent für das gewünschte Zielbetriebssystem heruntergeladen werden. Diese finden sich unter dem Menüpunkt Setup => Agents in der linken Seitenleiste. Ich werde hier beispielhaft den Linux-Client im .deb Format nutzen. Wo wir schon auf der entsprechenden Downloadseite sind, können wir uns außerdem schon einmal das Plugin mk_docker.py und die zugehörige Konfigurationsdatei docker.cfg herunterladen. Bestenfalls kopieren wir uns auf der Seite einfach nur die Downloadlinks und laden die Dateien direkt auf dem Zielsystem mittels wget herunter:

wget https://checkmk.example.org/cmk/check_mk/agents/check-mk-agent_2.2.0p7-1_all.deb
wget https://checkmk.example.org/cmk/check_mk/agents/cfg_examples/docker.cfg
wget https://checkmk.example.org/cmk/check_mk/agents/plugins/mk_docker.py

Die Installation des Agents erfolgt dann mittels:

apt install ./check-mk-agent_2.2.0p7-1_all.deb

Ob alles geklappt hat, kann mittels systemctl status check-mk-agent.socket überprüft werden. Der Output sollte in etwa wie folgt aussehen:

● check-mk-agent.socket - Local Checkmk agent socket
     Loaded: loaded (/lib/systemd/system/check-mk-agent.socket; enabled; preset: enabled)
     Active: active (listening) since Fri 2023-08-04 06:18:37 CEST; 5h 59min ago
   Triggers: ● check-mk-agent@2220-3235481-998.service
       Docs: https://docs.checkmk.com/latest/en/agent_linux.html
     Listen: /run/check-mk-agent.socket (Stream)
   Accepted: 2221; Connected: 1;
      Tasks: 0 (limit: 9300)
     Memory: 0B
        CPU: 2ms
     CGroup: /system.slice/check-mk-agent.socket

Aug 04 06:18:37 example systemd[1]: Starting check-mk-agent.socket - Local Checkmk agent socket...
Aug 04 06:18:37 example systemd[1]: Listening on check-mk-agent.socket - Local Checkmk agent socket.

Hat dies geklappt, können wir unseren zu überwachenden Host in checkmk erzeugen. Hierzu wählen wir in der Weboberfläche den Menüpunkt Setup => Hosts und klicken dort auf den Button Add host. Im folgenden Formular geben wir unter Hostname den Namen unseres Hosts ein. Dies ist bestenfalls dessen FQDN6, es kann aber auch einfach eine beliebige Bezeichnung sein. Sollte letzteres der Fall sein, müssen wir noch die Option IPv4 address aktivieren und die IP-Adresse des Hosts eintragen.

checkmk_add_host

Ist dies erledigt, klicken wir den Button Save & run service discovery. Auf dem jeweiligen Host führen wir nun folgenden Befehl aus:

cmk-agent-ctl register --server checkmk.example.org --user cmkadmin --password meinsupergeheimspassword --hostname $(hostname) --site cmk --trust-cert

Es wird nun einen Moment dauern, danach wird checkmk eine Liste von Services und sonstigen Daten anzeigen, die ihm über den Host bekannt sind. Über die Buttons vor den jeweiligen Einträgen kann festgelegt werden, welche Datenpunkte man in die Überwachung aufnehmen möchte. Alternativ kann man über den Button Accept all auch einfach alle verfügbaren Datenpunkte übernehmen. Diese Entscheidung kann man später auch problemlos und jederzeit noch einmal anpassen.7

Oben rechts sollte checkmk uns nun anzeigen, dass Änderungen an der Konfiguration vorgenommen wurden:

checkmk_changes

Klickt man auf diesen Bereich (die Zahl kann natürlich abweichen), gelangt man zur Seite Activate pending changes. Hier klickt man auf den roten Button beim Eintrag Local site cmk:

checkmk_activate

Ist dieser Vorgang abgeschlossen, können wir uns unser Monitoring-Dashboard unter Monitor => Main Dashboard anschauen. Hier werden ggf. noch einige Service-Problems gemeldet, dies liegt in der Regel daran, dass deren Zustand noch nicht vom System erfasst wurde. In den nächsten Minuten sollten diese automatisch den Status "OK" annehmen und nicht mehr unter Service Problems (unhandled) gelistet werden.

Der Add Host Vorgang kann nun für alle weiteren Systeme wiederholt werden. Wer hier lieber auf Automatisierung setzt, kann dies z.B. über die REST-API von checkmk tun. Entsprechende Beispiele finden sich in der Dokumentation von checkmk unter 8. Wichtig sind hier insbesondere die Beispiele zum Anlegen neuer Hosts, zur Service Discovery und dem Aktivieren der Änderungen. Zur Nutzung der REST-API sollte bestenfalls ein eigener Benutzer über die Weboberfläche angelegt werden.

Als Alternative kann auch das Kommandozeilentool cmk anstelle der REST-API genutzt werden.

Nachdem wir nun alle unsere Hosts im System haben, können wir uns um unser Docker-Plugin kümmern. Mit diesem kann der Zustand von Docker-Containern auf unseren Hosts genauer überwacht werden. Es ist hierzu nicht zwingend nötig (aber möglich) einen Agent innerhalb der jeweiligen Container zu betreiben. Das bereits heruntergeladene Plugin muss in das Verzeichnis /usr/lib/check_mk_agent/plugins/ die zugehörige Konfigurationsdatei in der Verzeichnis /etc/check_mk unserer Hosts kopiert werden.

Die Konfigurationsdatei sollte außerdem noch auf unsere Bedürfnisse angepasst werden:

[DOCKER]
container_id: name
skip_sections: docker_container_mem
base_url: unix://var/run/docker.sock

Der Eintrag container_id: name sorgt dafür, dass wir unsere Docker-Container über deren Namen statt deren ID referenzieren können. Das ist wichtig, da sich die ID ändert, wenn wir den Container neu erzeugen. Der Name hingegen bleibt stets gleich. Allerdings müssen wir hierbei beachten, dass es ggf. mehrere Hosts mit Containern des gleichen Namens gibt. Die Option skip_section enthält den Eintrag docker_container_mem, da diese Daten nur dann erfasst werden, wenn ein Agent direkt im Container aktiv wäre, was in unserem Setup nicht der Fall ist.

Dieses Problem kann aber einfach unter Setup => AgentsAccess to agents => Hostname translation for piggybacked hosts gelöst werden. Hier können Regeln zur Umbenennung der Docker-Hostnames angelegt werden. Wichtig: Es sollte pro Host nur eine Regel angelegt werden, bei mir wurde sonst nur die jeweils erste Regel angewendet:

checkmk_hostrules

Die Docker-Container können nun wie ganz normale Hosts hinzugefügt werden. Es müssen lediglich zwei zusätzliche Settings vorgenommen werden:

  • IP address family: No IP
  • Checkmk agent / API integration: No API integrations, no Checkmk agent

checkmk_dockerhost

Optional kann noch die Option Parents genutzt werden, um anzugeben, auf welchem Host der Container betrieben wird. Auch hier muss der Auswahlprozess der Services durchlaufen werden. Da wir in der Regel alle verfügbaren Serviceinformationen nutzen wollen, bietet sich hier die Bulk service discovery an.

checkmk_bulk

Die Docker-Container werden nach einiger Zeit auch unter Monitor => Applications => Docker containers aufgelistet. Hier bekommt man einen guten und schnellen Überblick über die CPU Nutzung der Container. Um den Bereich Monitor => Applications => Docker nodes zu befüllen, musste ich den Docker-Hosts unter Setup => Hosts => Host monitoring rules => Host labels manuell das Label cmk/docker_object:node zuweisen.

Neben den speziellen Plugins für checkmk können auch Plugins genutzt werden, die für Nagios/Icinga erstellt wurden. Hierzu können ganz normal die Debian-Pakete für die Nagios Plugins installiert werden:

apt install monitoring-plugins-basic monitoring-plugins-common monitoring-plugins-contrib

Um diese zu aktivieren, werden diese in die Konfigurationsdatei /etc/check_mk/mrpe.cfg eingetragen:

check_apt /usr/lib/nagios/plugins/check_apt

Andere Überwachungen lassen sich auch gänzlich ohne Plugins hinzufügen, z.B. mittels Setup => ServicesHTTP, TCP, Email, ... => Check HTTP service. Fügt man hier neue Überwachungen hinzu, werden diese Standardmäßig für alle Hosts angewendet. Das kann sehr praktisch aber auch unerwünscht sein. Am Ende des Edit rule-Formulars lassen sich daher Conditions festlegen. Hier können z.B. explizit bestimmte Hosts oder auch Tags bzw. Labels angegeben werden, auf denen die Checks ausgeführt werden sollen.

Eine weitere wichtige Einstellung ist die Konfiguration der Notifications. Ich empfehle hier einen Push-Service wie z.B. pushover einzurichten. Eine Benachrichtigung via E-Mail ist aber natürlich ebenfalls möglich.

Auf eher schwächeren und/oder nicht ganz so wichtigen Systemen empfiehlt es sich zudem den standardmäßig auf eine Minute eingestellten Check interval anzupassen. Dies ist über Setup => Services => Service monitoring rules => Normal check interval for service checks möglich.

checkmk_checkinterval

Ebenfalls hilfreich kann es sein, den Wert service_check_timeout in /omd/sites/cmk/etc/nagios/nagios.d/tuning.cfg zu erhöhen.

Wie unschwer zu erkennen ist, wenn man sich durch die checkmk Menüs klickt, gibt es noch zahlreiche andere Möglichkeiten und Einrichtungsoptionen. Das checkmk Handbuch9 10 leistet hier gute Hilfestellungen. Bei einigen Dingen sollte man jedoch sehr genau lesen, da sich viele wichtige Schritte auch gern mal im Fließtext "verstecken". Auch ist es anfangs manchmal etwas schwierig die Pfadangaben richtig zuzuordnen. Nach kurzer Zeit hat man sich aber gut eingefunden.


  1. https://de.wikipedia.org/wiki/Nagios ↩

  2. https://de.wikipedia.org/wiki/Icinga ↩

  3. https://de.wikipedia.org/wiki/Checkmk ↩

  4. https://docs.checkmk.com/latest/en/introduction_docker.html ↩

  5. https://docs.checkmk.com/latest/en/managing_docker.html ↩

  6. https://en.wikipedia.org/wiki/Fully_qualified_domain_name ↩

  7. https://docs.checkmk.com/latest/en/wato_services.html ↩

  8. https://docs.checkmk.com/latest/en/rest_api.html ↩

  9. https://docs.checkmk.com/latest/en/ ↩

  10. https://docs.checkmk.com/latest/de/ ↩

Tags: docker monitoring checkmk icinga nagios

Mehr

  • Auf ins Fediverse mit Firefish
  • Lokaler DNS Server mit Pi-Hole
  • Docker
  • ZFS
  • Serververwaltung mit Ansible

Tags

docker monitoring checkmk icinga nagios

Archiv

  • Mar 2025 (2)
  • May 2024 (2)
  • Oct 2023 (1)
  • Aug 2023 (5)
  • Jul 2023 (31)

  • Ältere Einträge (95)

Feeds

Atom 1.0 RSS JSON
  • Datenschutz
  • Impressum
  • Archiv