Zum Hauptinhalt springen
  1. Posts/

Zabbix-Template: Docker-Image-Updates überwachen – Release v1.1 mit LLD

·666 Wörter·4 min· loading · loading ·
Inhaltsverzeichnis
thetorminal/zabbix-docker-image-updates

Zabbix docker image updates monitoring

null
0
1

## Einführung Vor einem Jahr habe ich ein Zabbix-Template zur Überwachung von Docker-Image-Updates erstellt und mich immer über eine Sache geärgert: Es konnte den Namen der verfügbaren Updates nicht anzeigen. Es zeigte lediglich die Anzahl aller verfügbaren Updates auf einem Host wie folgt an:

docker_image_zabbix
Jetzt kam ich endlich dazu, ein zweites Template zu erstellen, welches Zabbix “LLD” (Low-Level-Discovery) verwendet, um den Namen der verfügbaren Image-Updates zu ermitteln und sie im generierten Problem in Zabbix anzuzeigen. Jedes verfügbare Update ist jetzt ein Problem mit dem Namen des Containers:
docker_image_zabbix_lld

Das Repository für das Template ist nun in zwei Abschnitte unterteilt:

Das alte Template wurde dabei nicht verworfen; ich dachte, es könnte jemandem lieber sein, nur die Gesamtzahl der verfügbaren Updates zu sehen – jetzt kann also zwischen den beiden gewählt werden!

Das gesamte Template basiert auf “dockcheck.sh” und wurde getestet mit:

  • Zabbix Server 7.0.5 und 7.2
  • zabbix-agent2 (auf Debian 12 Server)

Mag37 (der Ersteller von dockcheck.sh) war so freundlich, das Template im offiziellen Github-Repository zu erwähnen: Github - mag37/dockcheck (und ja, darauf bin ich ein wenig stolz).


## Installationsanleitung

Die Installationsanleitung ist im Github-Repository zu finden. Direkte Links:


## Zur Funktionalität Wenn du daran interessiert bist zu verstehen, wie das Template funktioniert, lies gerne die folgende kurze Erklärung.

Das Template verwendet das dockcheck.sh-Skript von mag37, um Informationen über verfügbare Updates zu erhalten. Dazu wird die Ausgabe von dockcheck.sh -n mit einem kleinen Wrapper-Skript, dockcheck-lld.sh, geparst. dockcheck.sh -n liefert uns Inhalte wie diese:

Containers on latest version:
matter-server
open-webui-openwebui-1
!portainer_agent - not checked, no compose file
  
Containers with updates available:
homeassistant
  
No updates installed.

Das Wrapper-Skript liest diese Ausgabe und parst sie in JSON, das Zabbix mit seiner Low-Level-Discovery verstehen kann. Im Skript wird die Ausgabe außerdem unter /tmp/dockcheck_cache.txt zwischengespeichert. Ohne diese Cache-Datei hatte ich Timeout-Probleme, der Check benötigt für Zabbix etwas zu lange, um die Ausgabe zu lesen. Das Parsen der Ausgabe sieht so aus:

PARSED="$(printf "%s\n" "$CLEAN" | awk '
      function set_status(name, code,   r) {
        if (name == "") return
        r = (code == 1 ? 2 : 1)
        if (!(name in rank) || r > rank[name]) {
          rank[name] = r
          status[name] = code
        }
      }
      BEGIN { sec="" }
      /^[[:space:]]*Containers on latest version:/          { sec="latest"; next }
      /^[[:space:]]*Containers with updates available:/     { sec="updates"; next }
      sec != "" && $0 ~ /^[[:space:]]*$/ { sec=""; next }
      sec == "latest" {
        if ($0 ~ /^!/) next
        if ($0 ~ /^[A-Za-z0-9_.-]+$/) set_status($0, 0)
      }
      sec == "updates" {
        if ($0 ~ /^[A-Za-z0-9_.-]+$/) set_status($0, 1)
      }
      END {
        for (n in status) print n "\t" status[n]
      }
    ' | sort )"

Und die Konvertierung nach JSON so:

printf '{"data":['
first=1
while IFS=$'\t' read -r cname ccode; do
  [[ -z "$cname" ]] && continue
  [[ $first -eq 0 ]] && printf ','
first=0
esc="$(printf '%s' "$cname" | sed 's/\\/\\\\/g; s/"/\\"/g')"
printf '{"{#CONTAINER}":"%s"}' "$esc"
done <<< "$PARSED"
printf ']}\n'

Das Skript liest die Ausgabe und bestimmt, welche Container im Abschnitt “latest version” (neueste Version) und welche im Abschnitt “updates available” (Updates verfügbar) sind. “Latest” entspricht 0, “updates” entspricht 1. Zabbix liest diese Informationen anschließend aus und eröffnet für jeden Container mit dem Status “1” ein Problem. Die Datei “dockcheck-lld.conf” im Verzeichnis “/etc/zabbix/zabbix_agent2.d” hilft Zabbix dabei, die Ausgabe zu lesen:

UserParameter=dockcheck[*],/etc/zabbix/scripts/dockcheck-lld.sh $1 $2

$1 ist der Name und $2 der Status des Containers (latest oder update). Innerhalb des Zabbix-Templates wird mithilfe dieser Daten ein Element für jeden Container mit seinem Status erstellt (dank der Discovery-Regel), welches dann innerhalb eines Triggers verarbeitet wird. Der Trigger entscheidet schließlich, ob er ein Problem erstellt oder nicht (unter Verwendung des Status).

Fazit
#

Ich hoffe, dieses Skript hilft wenigstens ein paar Personen, die ebenfalls kein Template zur Ermittlung verfügbarer Docker-Image-Updates gefunden haben.

Wenn Du Verbesserungsvorschläge, Ideen oder Probleme haben, hinterlassen bitte einen Kommentar (keine Registrierung erforderlich). Alternativ kannst du gerne ein Issue im Github-Repository erstellen.

Mit freundlichen Grüßen

torminal
Autor
torminal
IT enthusiast

Verwandte Artikel

Zabbix Template: Updates von Docker Images monitoren
314 Wörter·2 min· loading · loading
Zabbix Template: Wordpress Updates mehrerer Websites monitoren
237 Wörter·2 min· loading · loading
Zabbix Template: Status von DRBD monitoren
102 Wörter·1 min· loading · loading