Checkmk
to checkmk.com

1. Einleitung

Es gibt viele gute Gründe, statt Linux oder anderen Unix-artigen Systemen FreeBSD zu verwenden: Sei es das seit 2000 vorhandene Container-Feature „Jails“, die hohe Performance auch bei großer I/O-Last, die Robustheit des Dateisystems UFS2 oder die hervorragende Unterstützung des modernen transaktionalen Dateisystems ZFS. Checkmk stellt einen Agenten für FreeBSD bereit, der auf dem Agenten für Linux basiert, aber für FreeBSD-Feinheiten angepasst wurde, wie z.B. unterschiedliche Ausgabeformate der Kommandozeilen-Tools und abweichende Pfad-Konventionen. Die Installation und die Funktionsprüfung muss allerdings weitgehend manuell erfolgen, denn eine Paketierung oder Bereitstellung per Agentenbäckerei ist nicht vorgesehen.

Hinweis zu anderen BSD-Systemen: Dieser Artikel erklärt Installation und Einrichtung des Agenten für FreeBSD, Agenten für OpenBSD und NetBSD stehen ebenso zur Verfügung. Die Installation ähnelt der hier beschriebenen. Sollten Sie DragonFly BSD nutzen, freuen wir uns über Tests und gegebenenfalls Patches für den FreeBSD-Agenten.

Zum grundsätzlichen Aufbau des FreeBSD-Agenten gilt das zum Linux-Agenten beschriebene: Es handelt sich um ein reines Shell-Skript, welches über einen Internet-Superserver (inetd oder xinetd) oder einen SSH-Tunnel aufgerufen wird, was es leicht und sicher macht.

Generell setzen wir in diesem Artikel voraus, dass Sie bereits eine gewisse Erfahrung mit Linux oder Solaris haben und arbeiten in diesem Artikel vor allem die Unterschiede heraus.

2. Installation

2.1. Voraussetzungen

Damit der Checkmk-Agent alle fürs Monitoring sinnvollen Informationen auslesen kann, ist die Installation zusätzlicher Tools erforderlich:

  • sysutils/ipmitool

  • devel/libstatgrab

  • shells/bash

  • lang/python3

  • ftp/wget

Python ist an dieser Stelle optional, wird aber spätestens für viele Agentenplugins benötigt. Eine Besonderheit ist bash, denn tatsächlich verwendet das Agentenskript eine Syntax, die nicht mit der FreeBSD Bourne Shell kompatibel ist. Das ipmitool wird zum Auslesen von Hardwareinformationen benötigt.

All diese Tools installieren Sie mit dem folgenden Kommando:

root@bsd:/root # pkg install ipmitool libstatgrab bash python3 wget

2.2. Installation aus den FreeBSD Ports

Die FreeBSD Ports enthalten einen von Mark Peek gepflegten Port des Checkmk-Agenten, der ggf. Patches enthält, um den Agenten mit neueren FreeBSD-STABLE Versionen kompatibel zu machen. Wenn die Version (z.B. 2.0.0) dieses in den FreeBSD Ports verfügbaren Checkmk-Agenten Ihrer aktuell verwendeten Checkmk-Version entspricht oder etwas höher liegt, können Sie diesen Agenten installieren.

root@bsd:/root # cd /usr/ports/net-mgmt/check_mk_agent
root@bsd:/usr/ports/net-mgmt/check_mk_agent # make install

2.3. Manuelle Installation

Ist die in den FreeBSD Ports verfügbare Version älter als die Ihres Checkmk-Servers, installieren Sie den aktuellen Agenten aus dem GitHub-Repository. Da Anpassungen an neue FreeBSD-Versionen nicht immer auf Agenten für ältere Checkmk-Versionen zurückportiert werden, ist es in der Regel sinnvoll, aus dem aktuellsten Entwicklungszweig zu installieren:

root@bsd:/root # wget -O /usr/local/bin/check_mk_agent https://checkmk.io/3EjKJlt
root@bsd:/root # chmod 0700 /usr/local/bin/check_mk_agent

Falls Sie die Agenten für andere BSD-Systeme suchen oder den Entwicklungszweig auf eine bestimmte Checkmk-Version festlegen wollen, suchen Sie den Agentenordner in Github auf.

2.4. Test auf der Kommandozeile

Rufen Sie nun den Agenten auf der Kommandozeile auf und überfliegen Sie die Ausgabe im Pager:

root@bsd:/root # check_mk_agent | more
<<<check_mk>>>
Version: 2.1.0i1
AgentOS: freebsd
Hostname: fbsd13
AgentDirectory: /etc/check_mk
DataDirectory:
SpoolDirectory: /var/spool/check_mk_agent
PluginsDirectory: /usr/local/lib/check_mk_agent/plugins
LocalDirectory: /usr/local/lib/check_mk_agent/local

Falls gar nichts ausgegeben wird, überprüfen Sie bitte noch einmal die Voraussetzungen, insbesondere, dass die Bash unter /usr/local/bin installiert ist.

3. Zugriff über das Netzwerk einrichten

3.1. FreeBSD inetd

Die einfachste Möglichkeit, auf den Agenten zuzugreifen, ist der bei FreeBSD mitgelieferte inetd. Alternativ steht der von Linux bekannte xinetd aus der FreeBSD Ports Sektion security zur Verfügung. Dessen Konfiguration entspricht exakt der im Artikel zum Linux-Agenten beschriebenen. Mit dem inetd wird die Ausgabe des Agenten an TCP-Port 6556 gebunden und – falls erforderlich – der Zugriff auf bestimmte Checkmk-Server eingeschränkt.

Prüfen Sie zunächst, ob Ihre /etc/services bereits einen Eintrag für Port 6556 enthält:

root@bsd:/root # grep 6556/ /etc/services

Ist dies nicht der Fall, muss Checkmk als Dienst bekannt gemacht werden. Fügen Sie dafür folgende Zeile hinzu:

/etc/services
checkmk-agent        6556/tcp   #Checkmk monitoring agent

Jetzt ergänzen Sie die Konfigurationsdatei /etc/inetd.conf um folgende Zeile:

/etc/inetd.conf
checkmk-agent stream tcp nowait root /usr/local/bin/check_mk_agent check_mk_agent

Der inetd muss grundsätzlich aktiviert werden. Dazu hängen Sie folgende Zeile an die Datei /etc/rc.conf an:

/etc/rc.conf
inetd_enable="YES"

Ist eine Zugriffsbeschränkung notwendig, editieren Sie die Datei /etc/hosts.allow. Kommentieren Sie zunächst die Zeile aus, die Zugriffe von überall erlaubt, fügen Sie dann eine Zeile ein, die nur dem Checkmk-Server – hier mit der IP-Adresse 10.2.3.4 – den Zugriff erlaubt. Der erste Parameter ist der Name des vom inetd ausgeführten Kommandos:

/etc/hosts.allow
# The rules here work on a "First match wins" basis.
# ALL : ALL : allow
sshd : ALL : allow
check_mk_agent : 10.2.3.4 : allow

Sind die Konfigurationsänderungen vorgenommen, starten Sie neu:

root@bsd:/root # reboot

Jetzt sollte vom Monitoring-Server aus der Zugriff auf den Agenten funktionieren.

Am einfachsten ist der Test mit netcat oder nc. Führen Sie folgendes Kommando als Instanzbenutzer auf dem Checkmk-Server aus, um die Netzwerkverbindung zum Agenten zu testen (im Beispiel zum Host mit der IP-Adresse 10.2.3.5). Die Kommandoausgabe zeigt nur die ersten Zeilen:

OMD[mysite]:~$ nc 10.2.3.5 6556
<<<check_mk>>>
Version: 2.1.0i1
AgentOS: freebsd

3.2. Sicherheit

Da der FreeBSD Agent zum gegenwärtigen Zeitpunkt keine Verschlüsselung unterstützt, raten wir in Fällen, in denen die Absicherung der übertragenen Daten notwendig ist, zur Verwendung eines SSH-Tunnels. Dessen Einrichtung erklären wir im Artikel zum Linux-Agenten.

4. Aufnahme ins Monitoring

Die Aufnahme ins Monitoring verläuft wie bei allen anderen Systemen über die automatische Service-Erkennung. Bei einem „nackten“ FreeBSD, auf dem noch keine Server-Dienste konfiguriert sind, sollten mindestens 12 Dienste erkannt werden, bei Installation auf ZFS zehn zusätzliche für Dateisysteminformationen:

Liste mit 12 automatisch erkannten Services.
Die Service-Erkennung in Checkmk findet mindestens 12 Services

5. Plugins

Wegen der komplett manuellen Konfiguration, dem Fehlen einer automatischen Verteilung und den im Vergleich mit Linux unterschiedlichen Pfaden, empfiehlt sich ein Test der wichtigsten Plugin-Mechanismen. Den Anfang macht MRPE.

5.1. MRPE

Erstellen Sie eine Konfigurationsdatei /etc/check_mk/mrpe.cfg mit folgendem Inhalt:

/etc/check_mk/mrpe.cfg
Flux_Comp /bin/echo 'OK - Flux compensator up and running'

In der Ausgabe des Agenten sollte nun eine MRPE-Sektion enthalten sein:

root@bsd:/root # check_mk_agent | grep -A1 '^...mrpe'
<<<mrpe>>>
(echo) Flux_Comp 0 OK - Flux compensator up and running

In der Service-Erkennung taucht nun Flux_Comp als neuer Service auf:

Liste mit dem neu erkannten Service Flux_Comp.
Das MRPE-Plugin wurde erfolgreich konfiguriert

5.2. Agentenplugins

Die Installation von Agentenplugins entspricht der im Artikel zum Linux-Agenten beschriebenen. Achten Sie bei der Installation von Plugins auf den korrekten Shebang. Perl und Python sind bei FreeBSD in /usr/local/bin installiert und so manches Shell-Skript, das unter Linux mit /bin/sh funktioniert, setzt eigentlich die unter FreeBSD in /usr/local/bin/bash installierte Bourne Again Shell voraus.

Zum Testen eignet sich ein simpler lokaler Check, bei dem die Auswertung, ob der überwachte Dienst OK, WARN oder CRIT ist, direkt auf dem überwachten Host stattfindet. Wenn wir schon dabei sind, einen Zweizeiler zu schreiben, nutzen wir diesen gleich für einen Test des Python-Interpreters. Beachten Sie auch hier die zu Linux unterschiedlichen Standardpfade:

/usr/local/lib/check_mk_agent/local/hello.py
#!/usr/local/bin/python3
print("0 \"Hello Beastie\" - Just check paths and Python interpreter!")

Vergessen Sie nicht, das Skript ausführbar zu machen:

root@bsd:/root # chmod 0755 /usr/local/lib/check_mk_agent/local/hello.py

Auch in diesem Fall wird der Dienst sofort gefunden:

Liste mit dem neu erkannten Service Hello Beastie.
Der neue Service "Hello Beastie" wurde gefunden

6. Dateien und Verzeichnisse

6.1. Pfade auf dem überwachten Host

Pfad Bedeutung

/usr/local/bin/check_mk_agent

Installationsort des Checkmk-Agenten auf dem Ziel-Host.

/usr/local/lib/check_mk_agent

Basisverzeichnis für Erweiterungen des Agenten.

/usr/local/lib/check_mk_agent/plugins

Plugins, welche den Agenten um zusätzliche Überwachungsdaten erweitern. Plugins können in jeder verfügbaren Programmiersprache geschrieben werden.

/usr/local/lib/check_mk_agent/local

Ablageort für eigene lokale Checks.

/var/spool/check_mk_agent

Enthält Daten, die z.B. von Cronjobs erstellt werden und eine eigene Sektion beinhalten. Diese werden ebenfalls der Agentenausgabe angehängt.

/etc/check_mk

Ablage von Konfigurationsdateien für den Agenten.

/etc/check_mk/mrpe.cfg

Konfigurationsdatei für MRPE — für die Ausführung von klassischen Nagios-kompatiblen Check-Plugins.

Achtung: Für FreeBSD sind keine Standardpfade hinterlegt, wie für Linux unterhalb von /var/lib/check_mk_agent. Wählen Sie einen passenden Ablageort und tragen Sie diesen im Agentenskript ein.

Auf dieser Seite