Automatische Updates für Agent Bakery über .tar.gz-Archive

Tobias Bauer, , Lesedauer 3 Minuten.

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.