check_mk Agent für Alpine Linux

Wer check_mk als seine Monitoring-Lösung benutzen und damit auch Hosts mit Alpine Linux überwachen möchte, der steht erstmal vor einer Frage: Wo Alpine-Agent?

TL;DR

Es gibt keinen offiziellen Alpine Linux-Agent. Wir können uns aber das OpenWRT-Plugin zu nutze machen, welches praktischerweise sehr ähnlich zu Alpine Linux ist. Folgende Schritte sind dafür notwendig:

’socat‘ installieren

apk add socat

Agent vom Monitoring-Server herunterladen

wget http://DEINE-CHECKMK-URL/INSTANZNAME/check_mk/agents/check_mk_agent.openwrt
mv check_mk_agent.openwrt /usr/local/bin/check_mk_agent
chmod +x /usr/local/bin/check_mk_agent

OpenRC-Init-Datei für den Service erstellen: /etc/init.d/checkmk_agent

#!/sbin/openrc-run
description="Check_MK Agent on Alpine Linux"
name=check_mk_agent
command="/usr/bin/socat"
command_args="-U TCP-LISTEN:6556,fork,reuseaddr EXEC:/usr/local/bin/check_mk_agent"
command_user="root"
pidfile="/run/.pid"
command_background="yes"
depend() {
 need net
}

Init-Datei ausführbar machen

chmod +x /etc/init.d/checkmk_agent

‚waitmax‘-Tool von check_mk herunterladen und ausführbar machen

wget http://DEINE-CHECKMK-URL/INSTANZNAME/check_mk/agents/waitmax
mv waitmax /usr/local/bin/
chmod +x /usr/local/bin/waitmax

Der check_mk_agent braucht ein paar Bugfixes für Alpine Linux

sed -i 's|CURRENT_SHELL=.*|CURRENT_SHELL="/bin/ash"|' /usr/local/bin/check_mk_agent
sed -i 's|\(_run_cached_internal .* "echo \)<<<\(.*\)>>>\(.*\)|\1\\\<\\\<\\\<\2\\\>\\\>\\\>\3|' /usr/local/bin/check_mk_agent
sed -i 's|echo "AgentOS: openwrt"|echo "AgentOS: alpine linux"|' /usr/local/bin/check_mk_agent

Kurze Erklärung: Mit sed werden bestimmte Zeilen im Script ersetzt. Zuerst wird die Variable CURRENT_SHELL fest auf den Wert /bin/ash gesetzt. Anschließend müssen bestimmte Vorkommen von <<< und >>> mit Backslashes escaped werden. Und zuletzt ersetzen wir openwrt noch mit alpine linux.

checkmk_agent-Dienst registrieren und starten

rc-update add checkmk_agent
rc-service checkmk_agent start

Zu guter Letzt kann der Host nun in check_mk hinzugefügt und eine Service-Erkennung durchgeführt werden.

Was ist mit NTP-Monitoring?

NTP (Network Time Protocol) wird standardmäßig über den Dienst ntpd gemanaged. ntpd läuft im Hintergrund als OpenRC-Dienst und sorgt unsichtbar dafür, dass die Host-Zeit mit dem Zeitserver synchron ist.

Leider bietet ntpd in Alpine keine Möglichkeit, den aktuellen Status abzufragen. Wer also den NTP-Status überwachen möchte, sollte hier auf chrony wechseln.

ntpd-Dienst stoppen und deaktivieren

rc-service ntpd stop
rc-update del ntpd

chrony installieren und konfigurieren

apk add chrony

chrony kommt mit einer Default-Konfiguration, welche rein theoretisch auch so verwendet werden kann. Ich persönlich nutze aber einen zentralen NTP-Server in meinem Heimnetz und passe die Konfiguration in /etc/chrony/chrony.conf entsprechend so an:

pool DEIN-NTP-SERVER iburst
driftfile /var/lib/chrony/chrony.drift
makestep 1.0 3
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony

chronyd-Dienst registrieren und starten

rc-update add chronyd
rc-service chronyd start

Dadurch haben wir nun den standartmäßig installierten Dienst ntpd durch chrony ersetzt. Die Funktion von chrony kann mit chronyc tracking getestet werden.

Beispiel:

$ chronyc tracking
Reference ID    : C0A8B232 (192.168.178.1)
Stratum         : 3
Ref time (UTC)  : Sun Mar 22 09:45:25 2026
System time     : 0.000015352 seconds fast of NTP time
Last offset     : -0.000000014 seconds
RMS offset      : 0.000078007 seconds
Frequency       : 66.531 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.045 ppm
Root delay      : 0.024418741 seconds
Root dispersion : 0.012379392 seconds
Update interval : 519.3 seconds
Leap status     : Normal

Diese Informationen kann der check_mk Agent nun nutzen und verarbeiten und zeigt im Dashboard dann Warnungen an, wenn die Zeit deines Servers von der NTP-Serverzeit abweicht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert