1. Einleitung
Es gibt viele gute Gründe, statt Linux oder anderen unixoiden 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:
checkmk-agent 6556/tcp #Checkmk monitoring agent
Jetzt ergänzen Sie die Konfigurationsdatei /etc/inetd.conf
um folgende Zeile:
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:
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:
# 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:
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:
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:
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/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:
6. Dateien und Verzeichnisse
6.1. Pfade auf dem überwachten Host
Pfad | Bedeutung |
---|---|
|
Installationsort des Checkmk-Agenten auf dem Ziel-Host. |
|
Basisverzeichnis für Erweiterungen des Agenten. |
|
Plugins, welche den Agenten um zusätzliche Überwachungsdaten erweitern. Plugins können in jeder verfügbaren Programmiersprache geschrieben werden. |
|
Ablageort für eigene lokale Checks. |
|
Enthält Daten, die z.B. von Cronjobs erstellt werden und eine eigene Sektion beinhalten. Diese werden ebenfalls der Agentenausgabe angehängt. |
|
Ablage von Konfigurationsdateien für den Agenten. |
|
Konfigurationsdatei für MRPE — für die Ausführung von klassischen Nagios-kompatiblen Check-Plugins. |
|
Konfigurationsdatei für die Deaktivierung bestimmter Sektionen des Agenten |
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.