Automatische Updates für Agent Bakery über .tar.gz-Archive
Die Agent Bakery ist ein leistungsstarkes Feature, das ausschließlich in den kommerziellen Editionen von Checkmk verfügbar ist - konkret in der Checkmk Enterprise Edition (CEE) und der Checkmk Cloud Edition (CCE). Die kostenlose Checkmk Raw Edition (CRE) bietet diese Funktionalität nicht. Die Bakery ermöglicht es, benutzerdefinierte Monitoring-Agenten zu erstellen und zu verwalten, die speziell auf die Anforderungen deiner IT-Infrastruktur zugeschnitten sind.
Du kannst damit Agent-Pakete für verschiedene Betriebssysteme erstellen, Plugins und Konfigurationen zentral verwalten und automatisierte Agent-Deployments durchführen.
Die Agent Bakery unterstützt zwar .tar.gz-Archive als Paketformat, jedoch funktioniert die automatische Verteilung standardmäßig nur mit den nativen Paketformaten der jeweiligen Betriebssysteme wie RPM oder DEB. Für Distributionen wie ArchLinux, für die kein passendes Paket angeboten wird, oder für Systeme ohne Standard-Paketmanager bedeutet dies, dass du die Agent-Updates manuell durchführen musst.
Um diese Einschränkung zu umgehen, habe ich ein Bash-Script entwickelt, das automatisch .tar.gz-Archive von der Agent Bakery herunterlädt und den Checkmk-Agent entsprechend aktualisiert. Die einzige Voraussetzung hierfür ist ein API-Benutzer auf der jeweiligen Checkmk-Instanz mit entsprechenden Berechtigungen für die Agent Bakery.
Das Script nutzt die REST-API von Checkmk, um das für den jeweiligen Host konfigurierte Agent-Paket im .tar.gz-Format herunterzuladen. Dabei wird automatisch die richtige Konfiguration aus der Bakery abgerufen, die alle definierten Plugins, Konfigurationsdateien und Einstellungen enthält. Nach dem Download wird das Archiv extrahiert, die entsprechenden Berechtigungen gesetzt und gegebenenfalls laufende Services neu gestartet.
Das verwendete Bash-Script:
#!/bin/bash
# Parameter verarbeiten
FORCE=false
if [[ "$1" == "--force" ]]; then
FORCE=true
fi
HOST_NAME="<Checkmk Server>"
SITE_NAME="<instanzname>"
PROTO="https" #[http|https]
API_URL="$PROTO://$HOST_NAME/$SITE_NAME/check_mk/api/1.0"
USERNAME="<Benutzer>"
PASSWORD="<Passwort>"
HOST="<SERVERNAME>"
CHECK_MK_UPDATER=$(/usr/lib/check_mk_agent/plugins/3600/cmk-update-agent -v 2>&1)
if [[ "$FORCE" == "false" ]] && echo "$CHECK_MK_UPDATER" | grep -q "already installed"; then
echo "Agent ist aktuell."
else
if [[ "$FORCE" == "true" ]]; then
echo "Force-Modus: Agent wird zwangsweise aktualisiert."
else
echo "Agent wurde aktualisiert oder Update ist verfügbar."
fi
echo "$CHECK_MK_UPDATER"
echo ""
curl \
--get \
-JO \
--header "Authorization: Bearer $USERNAME $PASSWORD" \
--header "Accept: application/octet-stream" \
--data-urlencode 'agent_type=host_name' \
--data-urlencode "host_name=$HOST" \
--data-urlencode 'os_type=linux_tgz' \
--output-dir /tmp/ \
"$API_URL/domain-types/agent/actions/download_by_host/invoke"
AGENT_FILE=$(ls /tmp/check-mk-agent_*.tar.gz 2>/dev/null | head -n1)
if [ -n "$AGENT_FILE" ] && [ -f "$AGENT_FILE" ]; then
tar -C / --no-overwrite-dir -xvf $AGENT_FILE
chown -R cmk-agent:cmk-agent /var/lib/cmk-agent/
chown -R cmk-agent:cmk-agent /var/lib/check_mk_agent/
/var/lib/cmk-agent/scripts/migrate.sh
rm $AGENT_FILE
else
echo "Kein Agent gefunden!"
fi
fi
Mit dieser Lösung kannst du die Vorteile der Agent Bakery auch auf ArchLinux-Systemen oder anderen Distributionen nutzen, für die keine nativen Pakete verfügbar sind. Dies ist besonders wertvoll für Container-Umgebungen oder spezialisierte Linux-Distributionen. Die Automatisierung über Cronjobs ermöglicht es, auch diese Systeme in das zentrale Agent-Management einzubeziehen und konsistente Monitoring-Konfigurationen sicherzustellen.
Das Update kann automatisch z. B. über einen Cron-Job erfolgen:
# Checkmk Update
49 * * * * /pfad/zum/skript/update_checkmk.sh 2>&1 > /dev/null
Die Implementierung bietet dabei die gleiche Flexibilität wie die Standard-Bakery-Funktionen: Änderungen an der Agent-Konfiguration werden automatisch bei der nächsten Aktualisierung auf alle betroffenen Systeme ausgerollt, ohne dass manuelle Eingriffe erforderlich sind. Dies vereinheitlicht das Management auch in heterogenen Umgebungen erheblich.