# Checkmk

Checkmk (Eigenschreibweise: checkmk) ist eine in Python und C++ entwickelte Software für das Service-Monitoring von IT-Infrastruktur. Sie wird zur Überwachung von Server, Netzwerk, Applikationen, Public Clouds, Containern, Speicher, Datenbanken und Umweltsensoren genutzt.
Checkmk gibt es in vier Editionen: einer Open Source Edition (Checkmk Raw Edition), einer kommerziellen Enterprise Edition (Checkmk Enterprise Edition), einer kommerziellen Version mit erweiterten Cloud-Monitoring Features (Checkmk Cloud Edition) und einer kommerziellen Edition für Managed Services Provider (Checkmk Managed Services Edition). Verfügbar sind diese Checkmk-Editionen für eine Reihe von Plattformen, insbesondere für unterschiedliche Versionen von Debian, Ubuntu, SLES und RedHat, sowie als Docker-Image. Zusätzlich werden physische Appliances unterschiedlicher Größe, sowie eine virtuelle Appliance angeboten, um die Administration des unterliegenden Betriebssystems durch eine grafische Oberfläche zu vereinfachen und Hochverfügbarkeitslösungen zu ermöglichen.
Die Agenten, die Checkmk zum Datensammeln auf vielen Systemen einsetzt, sind dabei für 11 Plattformen verfügbar, darunter auch Windows.

## Geschichte

Checkmk entstand ab dem Jahr 2008 als Agenten ersetzendes Shellskript für den Inetd und wurde im April 2009 unter der GPL veröffentlicht. Es basierte ursprünglich auf Nagios und erweitert dies um mehrere Komponenten. Die Open-Source-Variante basiert auch weiterhin noch auf einem Nagios-Kern und bündelt diesen mit weiteren Open-Source-Komponenten in einem System.
Die kommerziellen Editionen von Checkmk haben sich aber seit vielen Jahren in ein vollständig eigenständiges Monitoring-System entwickelt, das alle wesentlichen Komponenten durch eigene ersetzt hat – inkl. eines eigens entwickeltem Monitoring-Kerns. Der Großteil der Entwicklungen für die kommerziellen Varianten, insbesondere alle Plug-ins, fließen auch in die Checkmk Raw Edition ein.
Während Checkmk früher insbesondere für die Überwachung großer und heterogener On-premises-Umgebungen ausgelegt war, unterstützt es ab der Version 1.5+ (1.5p12) auch die Überwachung von AWS-, Azure-, Docker- und Kubernetes-Diensten.
Checkmk wird von der Checkmk GmbH aus München entwickelt, die bis zum 16. April 2019 unter dem Namen Mathias Kettner GmbH firmierte. Zu diesem Zeitpunkt wurde der Unternehmensname zu tribe29 GmbH geändert und die Schreibweise der Software von „Check_MK“ zu „Checkmk“ geändert. Anschließend erfolgte eine weitere Umfirmierung am 14. April 2023, in dessen Zuge das Unternehmen in Checkmk GmbH umbenannt wurde. Matthias Kettner ist am 8. Januar 2024 laut Handelsregister als Geschäftsführer ausgeschieden.
Die Checkmk GmbH folgt einem Open-Core-Geschäftsmodell. Die Open-Source-Edition ist unter unterschiedlichen Open-Source-Lizenzen – mehrheitlich GPLv2 – verfügbar, während große Teile der kommerziellen Editionen unter der proprietären ‚Checkmk Enterprise License‘ laufen.

## Produkt

Checkmk kombiniert drei Arten des IT-Monitorings:
* Die statusbasierte Überwachung, die den Zustand („Health“) eines Geräts oder einer Applikation über Schwellwerte erfasst.
* Die metrikbasierte Überwachung, die das Aufzeichnen und die Analyse von Zeitreihengraphen ermöglicht. Für die CEE steht dafür sowohl ein eigenes HTML5 basiertes Graphing-System zur Verfügung als auch eine Integration mit Grafana.
* Und die log- und eventbasierte Überwachung, bei der wichtige Events herausgefiltert und darauf basierend Aktionen ausgelöst werden können.
Um eine sehr breite Überwachung zu gewährleisten, bringt Checkmk in jeder Edition aktuell über 2000 eigene Plug-ins mit, die alle unter GPLv2 lizenziert sind. Diese Plug-ins werden als Teil des Produkts gewartet und regelmäßig durch weitere Plug-ins bzw. Erweiterungen existierender Plug-ins ergänzt. Zusätzlich ist die Anbindung bestehender Legacy-Nagios Plug-ins möglich.
Um das Set-up und den Betrieb deutlich zu vereinfachen, werden alle Komponenten von Checkmk voll integriert ausgeliefert. Eine regelbasierte 1:n-Konfiguration sowie ein hoher Automatisierungsgrad beschleunigen dabei Arbeitsabläufe deutlich. Zu den Automatisierungen gehören dabei:
* Automatisierte Host-Erkennung (optional, wo relevant)
* Automatisierte Services-Erkennung
* Automatisierte Konfiguration vieler Plugins über vorkonfigurierte Schwellwerte und Regeln
* Automatische Agent-Updates (ein CEE-Feature)
* Automatische und dynamische Konfiguration, die das Aufnehmen von volatilen Diensten mit einer Lebensdauer von wenigen Sekunden, wie im Kubernetesumfeld, ermöglicht (ab CEE v1.6)
* Automatische Discovery von Tags & Labels aus Quellen wie Kubernetes, AWS und Azure (ab CEE v1.6)
Daneben existieren auch Playbooks für die Nutzung von Konfigurations- und Deployment-Werkzeugen wie Ansible oder Salt.
Checkmk wird häufig in sehr großen verteilten Umgebungen eingesetzt, in denen eine hohe Anzahl von Standorten (z. B. 300 Standorte von Faurecia) und/oder deutlich über 100.000 Geräte (z. B. Edeka) überwacht werden. Dies wird unter anderem dadurch möglich, dass Checkmks Microcore einen sehr viel geringeren CPU-Ressourcenverbrauch als z. B. Nagios aufweist und dadurch auf gleicher Hardware eine deutlich höhere Performance bietet. Des Weiteren werden die nicht-persistenten Daten in-memory im RAM vorgehalten, was die Zugriffszeit deutlich verbessert.

## Komponenten
### Monitoring-Kern („Checkmk Microcore – CMC“)

Die kommerziellen Varianten von Checkmk setzen einen eigenen, in C++ geschriebenen, Monitoring-Kern ein. Dieser hat eine deutlich höhere Performance als ein Nagios-Kern. Zusätzlich erlaubt er ab der Version 1.6 die dynamische Aufnahme von kurzlebigen Objekten, wie z. B. Containern, da im Gegensatz zum Nagioskern kein Neustart bei Konfigurationsänderungen notwendig ist. Die Open-Source-Variante „Checkmk Raw Edition“ setzt aktuell einen Nagios-Kern ein.

### Konfiguration- & Check-Engine

Checkmk bietet eine eigenständige Diensterkennung und Einstellungserzeugung. Beim Durchführen der Prüfungen (englisch checks) arbeitet Checkmk auf eine eigene Art. In der Prüfzeit wird jeder Wirt (englisch hosts) nur noch ein einziges Mal kontaktiert. Die Prüfergebnisse werden an den Monitoring-Kern als passive Checks übermittelt. Dies verbessert wesentlich die Leistung auf dem Monitoring Server sowie auf den zu überwachenden Wirten. Dabei nutzt Checkmk unterschiedliche Methoden, um auf die Daten der Zielsysteme zuzugreifen. Dazu gehören Agenten, die auf dem Ziel-System installiert werden, „Special Agents“, die auf dem Monitoring-Server laufen und mit der API des Zielsystems kommunizieren, die SNMP-API für die Überwachung von z. B. Netzwerkgeräten und Druckern und HTTP/TCP-Protokolle, um mit Webservices und Internetdiensten zu kommunizieren. Standardmäßig folgt Checkmk dem „Pull-Prinzip“, d. h. die Daten werden explizit vom überwachenden System abgefragt, um schnell zu identifizieren, sollte ein System plötzlich ausfallen und nicht mehr auf einen „Pull“ antworten. Alternativ kann aber auch ein „Push“ konfiguriert werden, auf dem das System seine Daten direkt an Checkmk oder einen Zwischenwirt übergibt.

### Datenschnittstelle („Livestatus“)

Der Livestatus ist die wichtigste Schnittstelle in Checkmk. Er stellt einen Live-Zugriff auf alle Daten der überwachten Hosts und Services zur Verfügung. Die Daten werden direkt aus dem RAM geholt, was langsame Festplattenzugriffe vermeidet und einen schnellen Zugriff auf das Monitoring gibt, ohne das System zu sehr zu belasten. Der Zugriff erfolgt über ein einfaches Protokoll und ist von allen Programmiersprachen aus ohne eine spezielle Bibliothek möglich.

### Web-GUI („Multisite“)

Multisite ist die Web-GUI von Checkmk. Neben einem schnellen Seitenaufbau bietet sie benutzerdefinierbare Ansichten und Dashboards, verteiltes Monitoring durch Einbinden mehrerer Monitoring-Instanzen via Livestatus, Integration von NagVis, eine integrierte LDAP-Anbindung, einen Zugriff auf Statusdaten via Webservice und vieles mehr. Dashboards und Ansichten können nach Benutzern oder Benutzergruppen unterschieden werden, z. B. vSphere-spezifische Ansichten für VMware-Admins. Die Web-GUI existiert aktuell in mehreren Sprachen.

### Das Setup-Menü

Checkmk ist dank seines Setup-Menüs (vormals: WATO) komplett über den Browser administrierbar. Dies umfasst auch die Verwaltung von Benutzern, Rollen, Gruppen, Zeitperioden, und mehr. Über ein Rollenkonzept können Berechtigungen auf diese Weise granular vergeben werden. Dafür können vorhandenen rollenbasierten Zugriffskontrollen (LDAP, AD) genutzt werden. Checkmk wird regelbasiert konfiguriert, sodass die Konfiguration auch in komplexen Umgebungen intuitiv und skalierbar bleibt. Automatische Erkennung und Konfiguration sowie automatisierte Agentenaktualisierung beschleunigen die Konfiguration weiter. Über eine HTTP-API können für die beschleunigte Konfiguration auch CMDBs integriert werden.

### Benachrichtigungssystem

Pro Benutzer können mehrere Benachrichtigungskanäle eingerichtet und unterschiedlich regelbasiert konfiguriert werden. So kann z. B. die E-Mail den ganzen Tag, SMS aber nur für wichtige Probleme während der Bereitschaftszeiten ausgelöst werden – ohne dass dafür mehrere künstliche Benutzer angelegt werden müssen. Die Benachrichtigungen können an alle oder auch nur an bestimmte Teams gehen, z. B. nur an die Speicheradmins bei einer ausgefallenen Festplatte. Doppelte Benachrichtigungen werden dabei zusammengefasst, so dass kein Benutzer über einen bestimmten Kanal doppelt benachrichtigt wird. Des Weiteren können Anwender ihre Benachrichtigungen selbst konfigurieren. In verteilten Umgebungen können Warnmeldungen zentral verwaltet werden. Für erkannte Probleme können automatisch Aktionen ausgelöst werden (Alarmsteuerung), z. B. über Skripte. Mit Checkmk direkt ausgeliefert werden Integrationen zu E-Mail- und SMS-Gateways sowie zu Kommunikations- und IT-Service-Management-Lösungen wie Slack, Jira, PagerDuty, OpsGenie, VictorOps und ServiceNow.

### Business Intelligence

Das Business-Intelligence-Modul ist in die grafische Benutzeroberfläche integriert. Es aggregiert regelbasiert aus vielen einzelnen Statusdaten von Hosts und Services den Gesamtzustand von Geschäftsprozessen, deren Abhängigkeit von komplexen Anwendungen und deren Abhängigkeit von IT-Infrastrukturelementen. Es kann auch zur Darstellung von Anwendungen genutzt werden, die sich aus Microservices zusammensetzen, welche ihrerseits wieder aus Kubernetes-Pods und -Deployments bestehen. Des Weiteren können Worst-Case-Szenarien in Echtzeit simuliert werden und historische Zustände analysiert werden, um Ursachen für verschlechterte Leistungen zu verstehen.

### Event Console

Die Event Console integriert die Verarbeitung von Logmeldungen und SNMP-Traps in das Monitoring. Sie wird über ein flexibles Regelwerk konfiguriert und entscheidet, ob die eingehenden Meldungen verworfen werden oder wie sie eingestuft werden. Sie kann zählen, korrelieren, Meldungen erwarten, Meldungen umschreiben und mehr. Gleiche Einträge können zu einem einzigen Ereignis zusammengefasst werden (z. B. mehrere fehlgeschlagene Logins), um die Übersicht der Ereignisse zu wahren. Auch verfügt sie über einen eingebauten Syslog-Daemon, der direkt auf Port 514 Meldungen entgegennimmt sowie einen SNMP-Trap-Receiver, welcher auf Port 162 Traps empfängt.

### Metrik-Graphing

Die kommerziellen Checkmk-Editionen verwenden ein eigenes Metrik- und Graphing-System. Mit diesem können Zeitreihenmetriken über lange Zeiträume mit interaktiven HTML5-Graphen analysiert werden. Die maximale Auflösung beträgt dabei eine Sekunde. Daten können aus einer Vielzahl von Datenquellen und Formaten für Metriken (JSON, XML, SNMP usw.) importiert werden und in eine plattenplatzsparende Langzeitdatenspeicherung abgelegt werden.
Alternativ können über eine Exportschnittstelle Graphite oder InfluxDB angeschlossen werden. Ab der Version CEE 1.5p16 existiert zusätzlich auch ein Datasource-Plugin für Grafana, um Daten direkt aus Checkmk in Grafana zur Visualisierung zu integrieren. Die Checkmk Raw Edition verwendet aktuell weiterhin PNP4Nagios als Graphing-System.

### Reporting

Das Reporting ermöglicht die direkte Bereitstellung von PDF-Berichten, ad-hoc oder automatisiert in regelmäßigen Abständen. Es beinhaltet eine Verfügbarkeitsanalyse in der die Historie der Zustände mit einem Klick über einen beliebigen Zeitraum mit Berechnung der Verfügbarkeit bereitgestellt werden kann. Verfügbarkeitsberechnungen können nicht überwachte Zeiten ausschließen, die Auflösung anpassen oder kurze Intervalle ignorieren. Neben den Verfügbarkeitsberechnungen beinhaltet das Reporting auch ein SLA-Reporting, in dem komplexe SLAs überwacht werden können. Das Reporting ist nur in den kommerziellen Varianten von Checkmk verfügbar.

### Hardware-Software-Inventory

Das Hardware-Software-Inventory ermitteln den Bestand der gesamten Hard- und Software, die auf Geräten und Systemen installiert sind. Damit lassen sich z. B. Änderungen an der Hard- und Software überwachen, das Vorhandensein von installierten Sicherheitsupdates überprüfen und statische Daten durch dynamische Parameter, wie z. B. die aktuelle Festplattenauslastung über Monitoringdaten aktualisieren. Zur Configuration Management Database (CMDB) i-doit besteht eine tiefe Integration, die den Austausch von CMDB-Daten mit Monitoringdaten ermöglicht.