1. Einleitung
Metriken sind die mess- und berechenbare Werte zu Hosts und Services und werden von Checkmk intern in den sogenannten Round-Robin-Datenbanken (RRDs) gespeichert. Diese Metriken werden durch das eingebaute Graphing-System aufbereitet und in der Checkmk-Weboberfläche an vielen Stellen visualisiert, zum Beispiel als Perf-O-Meter in der Liste der Services oder als Graphen, die Sie sich aus der Service-Liste mit dem Graphsymbol einblenden lassen können. Die Oberfläche für die Visualisierung der Metriken basiert auf HTML5 und ist in den kommerziellen Editionen und der Raw Edition identisch. Im Artikel zum Graphing erfahren Sie darüber alle Details.
Parallel zum in Checkmk eingebauten Graphing können Sie zusätzlich auch externe Metrikdatenbanken anbinden und die Metriken an InfluxDB oder Graphite senden. Da die Weiterleitung vom Checkmk Micro Core (CMC) durchgeführt wird, ist diese Funktion nur in den kommerziellen Editionen verfügbar.
In diesem Artikel erfahren Sie, wie Sie in Checkmk die Weiterleitung der Metriken zur InfluxDB und zu Graphite einrichten.
2. Metriken an InfluxDB senden
InfluxDB ist ein Open Source Datenbankmanagementsystem (DBMS) für Zeitreihen (time series) — und in diesem Segment zurzeit das populärste. InfluxDB bietet beginnend mit ihrer V2.0 eine neue, einheitliche API — die InfluxDB v2 API — mit der unter anderem Metrikdaten in die Datenbank geschrieben werden können. Checkmk nutzt die InfluxDB v2 API und bietet Ihnen die Möglichkeit, die Metriken aus Checkmk nicht nur an die InfluxDB zu senden, sondern auch passend in die bestehende Struktur der InfluxDB abzulegen. Durch die Nutzung der API wird einerseits die Konfiguration für das Versenden der Metrikdaten vereinfacht und andererseits ist Checkmk vorbereitet für zukünftige Erweiterungen.
Wichtig: Die in diesem Kapitel beschriebene Konfiguration gilt nur für die Anbindung einer InfluxDB V2.0 (oder neuer), da erst ab dieser Version die InfluxDB v2 API verfügbar ist. Falls Sie eine InfluxDB <= V1.8 einsetzen, dann richten Sie diese stattdessen so wie im Kapitel zur Graphite-Anbindung beschrieben ein, da InfluxDB bis zur V1.8 das Carbon-Protokoll von Graphite unterstützt.
2.1. Informationen sammeln
Bevor Sie mit der Einrichtung in Checkmk loslegen, sollten Sie sich die folgenden Informationen besorgen über das InfluxDB-Zielsystem, das Sie mit Checkmk verbinden möchten:
Parameter | Bedeutung |
---|---|
Host-Name |
Name (oder IP-Adresse) des InfluxDB-Servers. Die Eingabe des DNS-Namens ist vor allem dann wichtig, wenn die Verbindung über HTTPS verschlüsselt wird, da Zertifikate fast nie für IP-Adressen ausgestellt werden. |
Port-Nummer |
Nummer des TCP Ports, über den der InfluxDB-Server erreichbar ist. Der Standard-Port ist |
Protokoll |
|
Organisation |
Bei InfluxDB ist die Organisation (organization) der Arbeitsbereich für mehrere Benutzer. Die initiale Organisation wird bei der InfluxDB-Einrichtung abgefragt. Weitere Organisationen können manuell über die InfluxDB-GUI angelegt werden. |
Behälter (bucket) |
InfluxDB speichert die Zeitreihendaten in Behältern, sogenannten buckets. Für jeden Behälter wird insbesondere ein Aufbewahrungszeitraum (retention period) festgelegt. InfluxDB löscht automatisch alle Datenpunkte, die älter sind als dieser Zeitraum. |
Token |
Die Kommunikation zwischen Checkmk und InfluxDB erfolgt über die InfluxDB v2 API. InfluxDB verwendet API-Tokens zur Autorisierung von Anfragen via API. Ein API-Token gehört zu einem bestimmten Benutzer und identifiziert die InfluxDB-Berechtigungen innerhalb der Organisation des Benutzers. Tokens werden über die InfluxDB-GUI angelegt, entweder mit vollem Lese- und Schreibzugriff auf alle Ressourcen in einer Organisation (All Access Token) oder mit ausgewählten Zugriffsrechten für bestimmte Behälter in einer Organisation (Read/Write Token). Ein Token kann in die Zwischenablage kopiert werden, was das spätere Einfügen während der Checkmk-Konfiguration erleichtert. Der Token für die Verbindung zum Checkmk-Server sollte natürlich Lese- und Schreibrechte für den Behälter haben, der in Checkmk konfiguriert wird. |
Genaueres dazu finden Sie in der InfluxDB-Dokumentation.
Mit diesen Informationen zur Hand, erfolgt die Konfiguration in Checkmk mit nur zwei unkomplizierten Schritten.
2.2. Checkmk mit InfluxDB verbinden
Öffnen Sie das Setup-Menü und schalten Sie den Show-more-Modus an — denn nur dann wird der Menüeintrag Setup > Exporter > InfluxDB Connections angezeigt. Wählen Sie diesen aus, um sich die Liste der existierenden InfluxDB-Verbindungen anzeigen zu lassen. Da Sie hier wahrscheinlich noch nichts konfiguriert haben, wird die Liste leer sein.
Eine Verbindung ist die Voraussetzung für das Versenden der Daten. Ohne Regel zur Auswahl der Metrikinformationen werden aber keine Daten versendet.
Erstellen Sie also zuerst eine neue Verbindung mit Add connection:
In den General Properties bestimmen Sie, wie gewohnt, die interne ID und den Titel für die Verbindung.
Falls mit der aktuellen Instanz weitere Instanzen verbunden sind, wie das beim verteilten Monitoring der Fall ist, können Sie unter Site restriction die Verbindung auf bestimmte Instanzen einschränken. Dazu verschieben Sie zuerst den Eintrag All sites in die linke Spalte und schieben anschließend die Instanzen, die Metriken erhalten sollen, aus der linken in die rechte Spalte Selected. In der linken Spalte verbleiben dann die Instanzen, die auf Metriken verzichten müssen.
Dann geht es weiter im nächsten Kasten mit den InfluxDB Connection Properties:
Geben Sie hier den ersten Satz der Parameterwerte ein, die Sie im vorherigen Abschnitt zusammengestellt haben.
Sichern Sie die Verbindung mit Save und Sie kehren zurück zur Liste der Verbindungen:
In der Verbindungsliste zeigt die Spalte Enabled wichtige Informationen zum Zustand der Verbindung. Wundern Sie sich nicht, dass die Liste im obigen Bild drei Einträge enthält: Um alle Symbole in Aktion sehen zu können, haben wir die Liste um zwei weitere Verbindungen erweitert. Aus der ersten Spalte in Enabled können Sie ablesen, ob die Verbindung aktiviert oder deaktiviert ist. In der zweiten Spalte sehen Sie, ob es für die Verbindung bereits eine Regel gibt oder nicht.
Daten werden über eine Verbindung erst dann gesendet, wenn diese mit einer Regel zur Auswahl der Metrikinformationen verknüpft ist. Diese Regel heißt Send metrics to InfluxDB. Die Regelsymbole sind Knöpfe und bieten eine Abkürzung zur Regelerstellung: Bei einer Verbindung mit Regel klicken Sie auf , um die Übersichtsseite des Regelsatzes zu öffnen, in der hervorgehoben ist, welche Regel für die Verbindung greift oder greifen würde. Bei einer Verbindung ohne Regel führt ein Klick auf direkt in die Seite zur Erstellung der Regel.
Was in dieser Regel festgelegt werden kann, beschreiben wir im folgenden Kapitel genau.
2.3. Metrikinformationen auswählen
Welche Daten an den InfluxDB-Server gesendet und wo sie abgelegt werden, bestimmen Sie in Checkmk mit einer Regel.
Den Regelsatz Send metrics to InfluxDB finden Sie unter Setup > Services > Service monitoring rules, noch schneller mit der Suche im Setup-Menü und am schnellsten per Klick in der Verbindungsliste:
Im Kasten Send metrics to InfluxDB wählen Sie zuerst die im vorherigen Abschnitt erstellte Verbindung aus und legen dann fest, wo die Daten auf dem InfluxDB-Server abgelegt werden. Hier geben Sie den zweiten Satz der gesammelten Informationen über den InfluxDB-Server ein. Mit Organization entscheiden Sie, welche Benutzer die Daten erhalten, und mit Bucket, wie lange die Metriken vorgehalten werden. Eine Mehrfachauswahl ist nicht möglich, d.h. Sie können die Metriken z.B. nicht an mehrere Behälter unterschiedlicher Organisationen schicken.
Im folgenden wählen Sie die Metrikdaten aus, die von Checkmk an den InfluxDB-Server gesendet werden. Metrics of service ist standardmäßig bereits ausgewählt und aktiviert den Metrikversand. Durch Ankreuzen der Checkbox Service state wird der Service-Zustand als eigene Metrik gesendet.
Nach Aktivierung von Additional values per metric können Sie den Metriken eine Reihe von Metadaten mitgeben, die der Darstellung dienen, z.B. den Zustand des zugehörigen Services (State of service) und die Schwellwerte (Thresholds). Beachten Sie dabei, dass Unit derzeit nur bei Metriken aus aktiven Checks funktioniert, wenn diese das unterstützen. Der Grund liegt darin, dass nur aktive Checks optional die Einheit mitliefern und der CMC auf andere keinen Zugriff hat.
In der letzten Liste Tags to use werden den Metriken Metadaten wie Host-Merkmale oder Labels hinzugefügt, die hauptsächlich der Filterung dienen und dafür optimiert sind. Die standardmäßig ausgewählten Host name und Service name sind dabei Pflichteinträge, die nicht abgewählt werden können.
In InfluxDB werden die Additional values per metric als fields und die Tags to use als tags gespeichert.
Zum Schluss aktivieren Sie die Änderungen für die Erstellung der Verbindung und der Regel. Bei Problemen mit dem Metrikversand finden Sie weiter unten Informationen zur Fehlerdiagnose.
2.4. Metriken in InfluxDB anzeigen
Wenn die Metriken von Checkmk beim InfluxDB-Server angekommen sind, können sie in der InfluxDB-GUI angezeigt werden.
Das folgende Bild zeigt als Beispiel den Graphen für die Metrik total_used
, die den verwendeten Arbeitsspeicher anzeigt:
Hinweis: Diese Metrik finden Sie in Checkmk beim Service Memory unter dem Metriknamen Total used memory.
3. Metriken an Graphite senden
Auch Graphite ist ein bekanntes Open Source DBMS für Zeitreihen, um Metriken zu speichern, abzurufen, weiterzugeben und zu visualisieren.
Graphite besteht aus dem Carbon Daemon, der auf die Daten wartet und diese in einer Datenbank speichert, aus der sie mit der Graphite Webanwendung aufbereitet und als Graphen angezeigt werden.
Mit Checkmk können Sie die Metriken im Plaintext-Protokoll an den Carbon Daemon von Graphite weiterleiten, der auf Port 2003 auf Daten dieses Protokolls wartet.
Im Plaintext-Protokoll ist ein Datensatz sehr einfach aufgebaut im Format <Metrikpfad> <Wert> <Zeitstempel>
, wobei <Metrikpfad>
ein durch Punkte getrennter eindeutiger Bezeichner ist.
Anders als bei der InfluxDB-Verbindung werden standardmäßig alle Metrikdaten gesendet sobald eine Graphite-Verbindung aktiviert ist. Falls Sie dies nicht wünschen, sollten Sie vor der Aktivierung der Verbindung die Metriken per Regel auswählen und dann Regeln und Verbindung zusammen aktivieren.
3.1. Metrikinformationen auswählen
In Checkmk finden Sie unter Setup > Services > Service monitoring rules die beiden Regelsätze Send host metrics to Graphite und Send service metrics to Graphite. Die Konfiguration erfolgt in gleicher Weise für Host- und für Service-Metriken. Wir zeigen hier die Konfiguration für Service-Metriken. Die Host-Metriken richten Sie dann analog ein.
Mit der Regel Send service metrics to Graphite können Sie einerseits die Werte auswählen, die mit den Metriken mitgeliefert werden sollen:
Zum anderen können Sie in der Box Conditions den Versand auf bestimmte Hosts und Services einschränken. Da ohne einschränkende Regel alle Daten gesendet werden, empfiehlt es sich zuerst eine Regel zu erstellen, die den Versand global abschaltet, indem Sie alle Checkboxen im obigen Bild abwählen. Erstellen Sie anschließend eine spezifische Regel mit den gewünschten Metrikinformationen für die Hosts und Services, deren Metriken an den Graphite-Server übermittelt werden sollen. Ordnen Sie die spezifische vor der globalen Regel an:
myhost
versendet3.2. Checkmk mit Graphite verbinden
Die Verbindung zum Graphite-Server richten Sie ein unter Setup > General > Global Settings > Monitoring Core > Send metrics to Graphite. Klicken Sie dort auf Add new Graphite connection:
Neben den offensichtlichen Angaben zum Graphite-Server (Name und Port-Nummer des Carbon-Plaintext-Protokolls) können Sie mit Optional variable prefix einen Präfix konfigurieren, der jedem Host-Namen vorangestellt wird, um z.B. eindeutige Namen zu erzwingen.
Checkmk setzt den Metrikpfad für das Plaintext-Protokoll auf <Host>.<Service>.<Metrik>
.
Die Aktivierung der Änderungen für die Regeln und die Verbindung schließt die Konfiguration für Graphite ab.
3.3. Metriken in Graphite anzeigen
Auch in der Graphite-GUI können Sie sich die von Checkmk empfangenen Metriken ansehen.
Das folgende Bild zeigt den Graphen für die Metrik total_used
, den wir bereits oben als Beispiel in der InfluxDB-GUI gezeigt haben:
4. Fehlerdiagnose
Sollten die Metriken nicht dort ankommen, wo Sie sie erwarten, finden Sie Diagnoseinformationen in Ihrer Instanz in der Datei ~/var/log/cmc.log
— der Log-Datei des Checkmk Micro Core.
Folgendes Beispiel zeigt die Meldungen, falls der in Checkmk konfigurierte Behälter (bucket) auf dem InfluxDB-Server nicht existiert:
2022-01-10 11:41:35 [5] [influxdb https://myinfluxdb.example.com:8086] Successfully initiated connection
2022-01-10 11:41:36 [5] [influxdb https://myinfluxdb.example.com:8086] Successfully connected
2022-01-10 11:41:36 [3] [influxdb https://myinfluxdb.example.com:8086] POST [404] {"code":"not found","message":"bucket \"my_bucket\" not found"}
2022-01-10 11:41:36 [5] [influxdb https://myinfluxdb.example.com:8086] Closing connection
Folgendes Beispiel zeigt die Meldungen im Fall, dass eine Verbindung zum Graphite-Server nicht klappt:
2021-12-15 17:33:33 [5] [carbon 10.0.0.5:2003] Successfully initiated connection
2021-12-15 17:33:33 [4] [carbon 10.0.0.5:2003] Connection failed: Connection refused
2021-12-15 17:33:33 [5] [carbon 10.0.0.5:2003] Closing connection
Der Checkmk Micro Core versucht in solchen Situationen von sich aus immer wieder, die Verbindung aufzubauen.
Wichtig: Metriken, die während einer Zeit anfallen, zu der keine Verbindung zum Zielsystem besteht, werden aus Performance-Gründen nicht zwischengespeichert, sondern gehen verloren (bzw. sind dann nur in den RRDs von Checkmk verfügbar).
Hinweis: Falls Ihnen die Log-Meldungen nicht aussagekräftig genug sind, können Sie die Standardwerte zum Log Level ändern unter Setup > General > Global Settings > Monitoring Core > Logging of the core. Hier finden Sie Einträge für das Logging der InfluxDB (InfluxDB processing) und für Graphite (Carbon connections).