61 lines
1.7 KiB
Bash
Executable File
61 lines
1.7 KiB
Bash
Executable File
#!/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
|