126 lines
3.6 KiB
Markdown
126 lines
3.6 KiB
Markdown
# Checkmk Local Checks: Docker Monitoring
|
|
|
|
Zwei Checkmk Local Checks zur Überwachung von Docker-Containern.
|
|
|
|
| Script | Zweck |
|
|
|---|---|
|
|
| `docker_container_check.sh` | Prüft ob Container laufen |
|
|
| `docker_file_check.sh` | Prüft ob Dateien/Verzeichnisse in Containern existieren |
|
|
|
|
---
|
|
|
|
## 1. Container Status Check (`docker_container_check.sh`)
|
|
|
|
Prüft per `docker ps` ob die angegebenen Container laufen.
|
|
|
|
### Status-Mapping
|
|
|
|
| Container-Status | Checkmk-Status |
|
|
|---|---|
|
|
| `Up ...` (running) | OK (0) |
|
|
| `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. Namen und IDs können gemischt werden:
|
|
|
|
```bash
|
|
CONTAINERS="webserver,a1b2c3d4e5f6,redis"
|
|
```
|
|
|
|
### Test
|
|
|
|
```bash
|
|
/usr/lib/check_mk_agent/local/docker_container_check.sh
|
|
```
|
|
|
|
```
|
|
0 Docker_webserver - webserver: Up 3 hours
|
|
0 Docker_database - database: Up 3 hours
|
|
2 Docker_redis - redis: Exited (1) 5 minutes ago
|
|
```
|
|
|
|
---
|
|
|
|
## 2. File/Directory Check (`docker_file_check.sh`)
|
|
|
|
Prüft per `docker exec ... test -e` ob Dateien oder Verzeichnisse in Containern existieren. Erkennt automatisch ob es eine Datei oder ein Verzeichnis ist.
|
|
|
|
### Status-Mapping
|
|
|
|
| Status | Checkmk-Status |
|
|
|---|---|
|
|
| Pfad existiert (Datei oder Verzeichnis) | OK (0) |
|
|
| Pfad fehlt | CRITICAL (2) |
|
|
| Container läuft nicht | CRITICAL (2) |
|
|
| Keine Docker-Berechtigung | CRITICAL (2) |
|
|
|
|
### Konfiguration
|
|
|
|
In der Datei `docker_file_check.sh` das Array `CHECKS` anpassen. Format pro Zeile:
|
|
|
|
```
|
|
CONTAINER_NAME_ODER_ID:PFAD1,PFAD2,PFAD3
|
|
```
|
|
|
|
Beispiel:
|
|
|
|
```bash
|
|
CHECKS=(
|
|
"webserver:/etc/nginx/nginx.conf,/var/log/nginx,/usr/share/nginx/html/index.html"
|
|
"database:/var/lib/mysql/data,/etc/my.cnf"
|
|
"e650d85ff452:/root/db.sql,/data"
|
|
)
|
|
```
|
|
|
|
- Vor dem Doppelpunkt steht der Container-Name oder die ID
|
|
- Nach dem Doppelpunkt die zu prüfenden Pfade, kommagetrennt
|
|
- Jeder Container bekommt eine eigene Zeile
|
|
- Dateien und Verzeichnisse können gemischt angegeben werden
|
|
|
|
### Test
|
|
|
|
```bash
|
|
/usr/lib/check_mk_agent/local/docker_file_check.sh
|
|
```
|
|
|
|
```
|
|
0 Docker_File_webserver__etc_nginx_nginx_conf - Datei /etc/nginx/nginx.conf existiert in webserver
|
|
0 Docker_File_webserver__var_log_nginx - Verzeichnis /var/log/nginx existiert in webserver
|
|
2 Docker_File_database__root_db_sql - /root/db.sql fehlt in database
|
|
```
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
Beide Scripts gleich installieren:
|
|
|
|
1. Auf den Zielhost kopieren:
|
|
|
|
```bash
|
|
scp docker_container_check.sh docker_file_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
|
|
chmod +x /usr/lib/check_mk_agent/local/docker_file_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 erscheinen automatisch.
|
|
|
|
## Allgemeine Hinweise
|
|
|
|
- Die Container-ID findet man per `docker ps -a --format '{{.ID}} {{.Names}}'`.
|
|
- Beide Scripts prüfen vor der Ausführung ob Docker-Rechte vorhanden sind.
|
|
- Der File Check benötigt einen **laufenden** Container (`docker exec`). Gestoppte Container werden als CRITICAL gemeldet.
|
|
- 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` direkt. Andernfalls muss der Agent-Benutzer in der Gruppe `docker` sein.
|