From c9ae1afc811cb8d1d1f278118bb0eabd3e9da046 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 13 Feb 2026 09:06:14 +0100 Subject: [PATCH] addes id or names and permissions --- README.md | 13 ++++++++--- docker_container_check.sh | 48 +++++++++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ab80fdf..b938fae 100644 --- a/README.md +++ b/README.md @@ -12,16 +12,22 @@ Das Script prüft für jeden konfigurierten Container den Status: | `Exited ...` | CRITICAL (2) | | `Restarting ...` | CRITICAL (2) | | Container nicht gefunden | CRITICAL (2) | +| Keine Docker-Berechtigung | CRITICAL (2) | ## Konfiguration -In der Datei `docker_container_check.sh` die Variable `CONTAINERS` anpassen: +In der Datei `docker_container_check.sh` gibt es zwei Variablen. Je nachdem ob der Container-Name oder die Container-ID bekannt ist, die passende Variable befüllen (oder beide): ```bash -CONTAINERS="webserver,database,redis" +# Ueberwachung per Container-Name: +CONTAINER_NAMES="webserver,database,redis" + +# Ueberwachung per Container-ID: +CONTAINER_IDS="a1b2c3d4e5f6,f6e5d4c3b2a1" ``` -Mehrere Container werden kommagetrennt angegeben. +Die Container-ID findet man per `docker ps -a --format '{{.ID}} {{.Names}}'`. +Beide Variablen können gleichzeitig genutzt werden. ## Installation @@ -59,5 +65,6 @@ Erwartete Ausgabe: ## Hinweise +- Das Script prüft vor der Ausführung ob Docker-Rechte vorhanden sind. Falls nicht, wird ein CRITICAL-Service `Docker_Check` mit dem Hinweis "Keine Berechtigung" erzeugt. - Der Plugin-Pfad kann je nach Installation variieren (`/usr/lib/check_mk_agent/local/` oder `/usr/local/lib/check_mk_agent/local/`). - Falls der Agent als `root` läuft, funktioniert `docker ps` direkt. Andernfalls muss der Agent-Benutzer in der Gruppe `docker` sein. diff --git a/docker_container_check.sh b/docker_container_check.sh index e39e43d..e6c29b8 100755 --- a/docker_container_check.sh +++ b/docker_container_check.sh @@ -12,25 +12,49 @@ # # === KONFIGURATION === -# Container-Namen kommagetrennt angeben: -CONTAINERS="container1,container2,container3" +# Container-Namen kommagetrennt (leer lassen wenn IDs genutzt werden): +CONTAINER_NAMES="container1" +# Container-IDs kommagetrennt (leer lassen wenn Namen genutzt werden): +CONTAINER_IDS="e650d85ff452" # ====================== -IFS=',' read -ra CONTAINER_LIST <<< "$CONTAINERS" +# Rechte-Pruefung: Kann der Benutzer docker ausfuehren? +if ! docker ps -a --format '{{.ID}}' >/dev/null 2>&1; then + echo "2 Docker_Check - Keine Berechtigung fuer Docker oder Docker nicht verfuegbar" + exit 1 +fi -for CONTAINER in "${CONTAINER_LIST[@]}"; do - # Leerzeichen entfernen - CONTAINER=$(echo "$CONTAINER" | xargs) - SERVICE_NAME="Docker_${CONTAINER}" +check_container() { + local FILTER="$1" + local LABEL="$2" - # Container-Status abfragen - STATUS=$(docker ps -a --filter "name=^/${CONTAINER}$" --format '{{.Status}}' 2>/dev/null) + SERVICE_NAME="Docker_${LABEL}" + + STATUS=$(docker ps -a --filter "$FILTER" --format '{{.Names}}: {{.Status}}' 2>/dev/null | head -1) if [ -z "$STATUS" ]; then - echo "2 ${SERVICE_NAME} - Container \"${CONTAINER}\" nicht gefunden" - elif echo "$STATUS" | grep -qi "^Up" && ! echo "$STATUS" | grep -qi "Restarting"; then + echo "2 ${SERVICE_NAME} - Container \"${LABEL}\" nicht gefunden" + elif echo "$STATUS" | grep -qi "Up" && ! echo "$STATUS" | grep -qi "Restarting"; then echo "0 ${SERVICE_NAME} - ${STATUS}" else echo "2 ${SERVICE_NAME} - ${STATUS}" fi -done +} + +# Nach Namen pruefen +if [ -n "$CONTAINER_NAMES" ]; then + IFS=',' read -ra NAME_LIST <<< "$CONTAINER_NAMES" + for ENTRY in "${NAME_LIST[@]}"; do + ENTRY=$(echo "$ENTRY" | xargs) + check_container "name=^/${ENTRY}$" "$ENTRY" + done +fi + +# Nach IDs pruefen +if [ -n "$CONTAINER_IDS" ]; then + IFS=',' read -ra ID_LIST <<< "$CONTAINER_IDS" + for ENTRY in "${ID_LIST[@]}"; do + ENTRY=$(echo "$ENTRY" | xargs) + check_container "id=$ENTRY" "$ENTRY" + done +fi