#!/bin/bash # # Checkmk Local Check: Docker Container Status # # Prueft per "docker ps -a" ob die angegebenen Container laufen. # Wird als Local Check im Checkmk-Agenten verwendet. # # Status-Mapping: # running -> OK (0) # alles andere -> CRITICAL (2) # Container nicht da -> CRITICAL (2) # # === KONFIGURATION === # Container-Namen kommagetrennt (leer lassen wenn IDs genutzt werden): CONTAINER_NAMES="container1" # Container-IDs kommagetrennt (leer lassen wenn Namen genutzt werden): CONTAINER_IDS="e650d85ff452" # ====================== # 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 check_container() { local FILTER="$1" local LABEL="$2" 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 \"${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 } # 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