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:

VariableStandardBedeutung
DOCKER_PROXY_URLtcp://docker-socket-proxy:2375Proxy-URL; leer = nur Metriken
METRICS_INTERVAL_SEC90Sekunden zwischen Metrik-Samples
BUNDLE_INTERVAL_SEC900Sekunden zwischen periodischen Bündeln
SPOOL_DIR/spoolVerzeichnis für den Bündel-Spool (Volume mounten)
SPOOL_MAX_BYTES1073741824harte Spool-Obergrenze (älteste zuerst verworfen)
ZSTD_LEVEL3Kompressionsstufe (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.