first commit

This commit is contained in:
Stefan Hacker 2026-02-13 08:58:37 +01:00
commit 44b4dfbfa1
2 changed files with 99 additions and 0 deletions

63
README.md Normal file
View File

@ -0,0 +1,63 @@
# Checkmk Local Check: Docker Container Status
Checkmk Local Check zur Überwachung von Docker-Containern per `docker ps`.
## Funktionsweise
Das Script prüft für jeden konfigurierten Container den Status:
| Container-Status | Checkmk-Status |
|---|---|
| `Up ...` (running) | OK (0) |
| `Exited ...` | CRITICAL (2) |
| `Restarting ...` | CRITICAL (2) |
| Container nicht gefunden | CRITICAL (2) |
## Konfiguration
In der Datei `docker_container_check.sh` die Variable `CONTAINERS` anpassen:
```bash
CONTAINERS="webserver,database,redis"
```
Mehrere Container werden kommagetrennt angegeben.
## Installation
1. Script auf den Zielhost kopieren:
```bash
scp docker_container_check.sh user@host:/usr/lib/check_mk_agent/local/
```
2. Ausführbar machen:
```bash
chmod +x /usr/lib/check_mk_agent/local/docker_container_check.sh
```
3. Sicherstellen, dass der Checkmk-Agent-Benutzer Docker-Befehle ausführen darf (Mitglied der Gruppe `docker` oder Ausführung via `sudo`).
4. In Checkmk eine Service-Erkennung auf dem Host durchführen — die neuen Services `Docker_<containername>` erscheinen automatisch.
## Test
Manuell auf dem Host ausführen:
```bash
/usr/lib/check_mk_agent/local/docker_container_check.sh
```
Erwartete Ausgabe:
```
0 Docker_webserver - Up 3 hours
0 Docker_database - Up 3 hours
2 Docker_redis - Exited (1) 5 minutes ago
```
## Hinweise
- 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.

36
docker_container_check.sh Executable file
View File

@ -0,0 +1,36 @@
#!/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 angeben:
CONTAINERS="container1,container2,container3"
# ======================
IFS=',' read -ra CONTAINER_LIST <<< "$CONTAINERS"
for CONTAINER in "${CONTAINER_LIST[@]}"; do
# Leerzeichen entfernen
CONTAINER=$(echo "$CONTAINER" | xargs)
SERVICE_NAME="Docker_${CONTAINER}"
# Container-Status abfragen
STATUS=$(docker ps -a --filter "name=^/${CONTAINER}$" --format '{{.Status}}' 2>/dev/null)
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 "0 ${SERVICE_NAME} - ${STATUS}"
else
echo "2 ${SERVICE_NAME} - ${STATUS}"
fi
done