Selbst gehosteter, S3-kompatibler Objektspeicher für Backups: MinIO hinter einem Nginx-Proxy, dazu ein rclone-basierter Backup-Agent mit versionierten Buckets. Ihre Offsite-Backups ohne Cloud-Rechnung
Selbst gehosteter, S3-kompatibler Objektspeicher für Backups: MinIO hinter einem Nginx-Proxy, dazu ein rclone-basierter Backup-Agent mit versionierten Buckets. Ihre Offsite-Backups ohne Cloud-Rechnung
Metriken, Logs und Dashboards in einer Compose-Datei: Prometheus scrapt node-exporter und cAdvisor, Loki mit Alloy aggregiert Logs, ein vorkonfiguriertes Grafana visualizeiert. Der Stack, mit dem ich hier alles andere überwache.
Ein Deployment-Guide mit lauffähigen Beispielen — kein herunterladbares Produkt. Alles unten ist die tatsächlich eingesetzte Konfiguration, gekürzt auf das, worauf es ankommt.
services:
prometheus:
image: prom/prometheus:${PROMETHEUS_VERSION:-v2.55.0}
container_name: prometheus
restart: unless-stopped
networks:
- observability
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=${PROMETHEUS_RETENTION:-30d}
- --web.console.libraries=/etc/prometheus/console_libraries
- --web.console.templates=/etc/prometheus/consoles
- --web.enable-lifecycle
logging:
driver: json-file
options:
max-size: 10m
max-file: '3'
labels:
- observability.service=prometheus
grafana:
image: grafana/grafana:${GRAFANA_VERSION:-11.4.0}
container_name: grafana
restart: unless-stopped
networks:
- observability
volumes:
- grafana_data:/var/lib/grafana
- ./config/grafana/datasources:/etc/grafana/provisioning/datasources:ro
- ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
- ./config/grafana/dashboards-definitions:/var/lib/grafana/dashboards:ro
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin}
- GF_INSTALL_PLUGINS=${GRAFANA_PLUGINS:-grafana-piechart-panel}
- GF_SERVER_ROOT_URL=${GRAFANA_ROOT_URL:-http://localhost:3000}
- GF_AUTH_ANONYMOUS_ENABLED=${GRAFANA_ANON_AUTH:-false}
logging:
driver: json-file
options:
max-size: 10m
max-file: '3'
labels:
- observability.service=grafana
Auszug — prometheus, grafana aus der Compose-Datei. Die übrigen Services (proxies, init jobs, exporters) folgen demselben Muster und binden ihre Konfiguration aus einem config/-Verzeichnis ein.
Kopieren Sie .env.example zu .env und setzen Sie mindestens:
NETWORK_NAME=observability
PROMETHEUS_VERSION=v2.55.0
PROMETHEUS_RETENTION=30d
NODE_EXPORTER_VERSION=v1.8.2
CADVISOR_VERSION=latest
LOKI_VERSION=3.2.0
.env setzen — niemals die Beispielwerte übernehmenEin Guide, kein Produkt. Diese Seite ist Deployment-Dokumentation mit lauffähigen Beispielen — kein Zip, kein Download, kein Supportvertrag. Sie adaptieren die Muster auf Ihre eigene Umgebung, und das Ergebnis gehört Ihnen.
Wenn Sie das produktionsreif in Ihrer Infrastruktur wollen: Ich richte das für Teams im eintägigen Workshop Observability ein — Details auf der Consulting-Seite: 1.000 €/Tag, remote oder vor Ort, Abrechnung per Rechnung.