Der Log-Collector ist der Black-Box-Flugschreiber des FleetManagers: ein kleiner Container, der neben Ihrer Anwendung läuft und fortlaufend Diagnosedaten an den FleetManager schickt — damit bei einer Störung aussagekräftige Daten zentral vorliegen, bevor ein Gerät offline geht.
Er ist ein generisches Add-on: Er läuft auf jedem Docker-Host (Edge-Gerät,
VM, Bare Metal), bleibt unprivilegiert und spricht ausschließlich mit einem
schreibgeschützten docker-socket-proxy — nie mit dem rohen Docker-Socket.
Was er sammelt
- Tier 1 — Host-Metriken: CPU, Last, RAM, Festplatte und Container-Status, ca. alle 90 Sekunden (offline-resilient, dedupliziert).
- Tier 2 — Log-Bündel: komprimierte
tar.zst-Snapshots der Docker-Container-Logs + Host-Diagnose (df,ps,/proc,docker inspect), in resumierbaren Chunks hochgeladen. Logs werden laufend auf ein Host-Volume gespiegelt — ein nach einem Absturz erstelltes Bündel enthält daher die Logs von vor dem Ausfall. - Auf Knopfdruck: Über die Schaltfläche „Logs jetzt sammeln” im Dashboard kann ein frisches Bündel angefordert werden.
- Ereignisgesteuert: Ein Container-Absturz/OOM löst sofort ein Bündel aus.
Installation
1. Fleet-Konfiguration
Legen Sie eine config.json mit Ihrer Fleet-Identität an (Kunde, Maschine und
ein Ingest-Token fmt_… aus dem FleetManager):
{
"fleetmanagement": {
"base_url": "https://fleet.brinkhaus-gmbh.de",
"customer_name": "ihr-kunden-slug",
"machine": "ihr-maschinen-name",
"token": "fmt_IHR_INGEST_TOKEN",
"heartbeat_interval_sec": 60
}
}
2. Docker Compose
services:
docker-socket-proxy:
image: tecnativa/docker-socket-proxy:0.3.0
restart: always
environment:
CONTAINERS: 1
INFO: 1
EVENTS: 1
POST: 0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
logcollector:
image: brinkhausgmbh/fleetmanager-logcollector:latest
restart: always
depends_on:
- docker-socket-proxy
environment:
DOCKER_PROXY_URL: tcp://docker-socket-proxy:2375
METRICS_DISK_PATH: /host-root
SPOOL_DIR: /spool
volumes:
- ./config.json:/app/fleetManagementData/config.json:ro
- logcollector-spool:/spool
- /:/host-root:ro
cpus: 0.50
mem_limit: 256m
volumes:
logcollector-spool:
3. Starten
docker compose up -d
docker compose logs -f logcollector
Innerhalb einer Minute erscheint die Maschine im Dashboard — mit einem Ressourcen-Tab (Metriken) und einem Artefakte-Tab (Log-Bündel zum Herunterladen).
Konfiguration
Die Fleet-Identität steht in config.json. Das Betriebsverhalten wird über
Umgebungsvariablen gesteuert — die wichtigsten:
| Variable | Standard | Bedeutung |
|---|---|---|
DOCKER_PROXY_URL | tcp://docker-socket-proxy:2375 | Proxy-URL; leer = nur Metriken |
METRICS_INTERVAL_SEC | 90 | Sekunden zwischen Metrik-Samples |
BUNDLE_INTERVAL_SEC | 900 | Sekunden zwischen periodischen Bündeln |
SPOOL_DIR | /spool | Verzeichnis für den Bündel-Spool (Volume mounten) |
SPOOL_MAX_BYTES | 1073741824 | harte Spool-Obergrenze (älteste zuerst verworfen) |
ZSTD_LEVEL | 3 | Kompressionsstufe (1–3) |
Sicherheit
Der Collector mountet niemals den rohen /var/run/docker.sock. Der gesamte
Docker-Zugriff läuft über den schreibgeschützten docker-socket-proxy
(CONTAINERS/INFO/EVENTS=1, POST=0). POST=0 blockiert jeden
zustandsändernden Engine-Aufruf. Der Container läuft als unprivilegierter
Benutzer; der Spool ist nach oben begrenzt und kann die Platte nie füllen.