Observability ist ein zentraler Bestandteil moderner Container-Infrastrukturen. Mit OpenTelemetry können Metriken, Logs und Traces konsistent erfasst und an zentrale Backends wie Prometheus, Grafana oder Jaeger weitergeleitet werden. In diesem Tutorial zeigen wir, wie der OpenTelemetry Collector in Docker Compose integriert wird, um eine durchgängige Observability-Pipeline aufzubauen.
1. Architekturüberblick OpenTelemetry Collector
Der OpenTelemetry Collector fungiert als universeller Agent oder Gateway. Er sammelt Telemetriedaten von verschiedenen Quellen, verarbeitet diese und exportiert sie an Backends.
- Receivers: Empfangen von Daten (z. B. OTLP, Prometheus, Jaeger)
- Processors: Transformation, Aggregation, Sampling
- Exporters: Weiterleitung an Observability-Systeme
Collector Deployment-Modi
- Agent: Läuft neben jedem Container/Host und sammelt lokal Telemetrie
- Gateway: Zentralisiert die Daten von mehreren Agenten
- Hybrid: Kombination aus beiden Modi für skalierbare Architekturen
2. Vorbereitung des Compose-Stacks
Bevor der Collector integriert wird, sollte der Compose-Stack vorbereitet sein:
- Compose-Datei auf Version 3.9 setzen:
version: "3.9" - Netzwerk für den Collector erstellen:
networks: observability - Volumes für Persistenz von Konfigurationen und temporären Daten definieren
3. OpenTelemetry Collector als Compose Service
Der Collector wird als eigener Service definiert:
services:
otel-collector:
image: otel/opentelemetry-collector:latest
container_name: otel-collector
networks:
- observability
volumes:
- ./otel-config.yaml:/etc/otel/config.yaml:ro
command:
--config /etc/otel/config.yaml
ports:
- "4317:4317" # OTLP gRPC
- "55681:55681" # OTLP HTTP
- "8888:8888" # Metrics endpoint
Wichtige Punkte
- Readonly-Mount für die Konfiguration
- Exponierte Ports nur für interne Netzwerke freigeben
- Container Name für konsistente Log-Auswertung
4. Collector Konfiguration
Die otel-config.yaml definiert Receivers, Processors und Exporters:
receivers:
otlp:
protocols:
grpc:
http:
prometheus:
config:
scrape_configs:
- job_name: 'myapp'
static_configs:
- targets: ['myapp:8080']
processors:
batch:
exporters:
logging:
loglevel: debug
prometheus:
endpoint: "0.0.0.0:8888"
jaeger:
endpoint: "http://jaeger:14250"
service:
pipelines:
metrics:
receivers: [otlp, prometheus]
processors: [batch]
exporters: [logging, prometheus]
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging, jaeger]
Hinweise zur Konfiguration
- Receivers: OTLP für generische Instrumentierung, Prometheus für Metriken
- Processors: Batch reduziert Export-Overhead
- Exporters: Logging für Debug, Prometheus für Metrics, Jaeger für Tracing
5. Instrumentierung der Compose Services
Die Anwendungen müssen Telemetrie erzeugen:
- OTLP SDK in Anwendung einbinden
- Environment Variables in Compose definieren:
environment:
- OTEL_EXPORTER_OTLP_ENDPOINT=otel-collector:4317
- OTEL_RESOURCE_ATTRIBUTES=service.name=myapp
6. Netzwerk und Service Discovery
Alle Services kommunizieren über ein Compose-Netzwerk:
- Collector ist über DNS unter
otel-collectorerreichbar - Services können Traces/Metrics direkt an den Collector senden
- Netzwerk-Isolation für Security Policies nutzen
7. Monitoring und Debugging
Nach Start des Compose-Stacks prüfen:
- Collector Logs:
docker logs otel-collector -f - Metrics Endpoint:
curl http://localhost:8888/metrics - Traces in Jaeger UI anzeigen
- Prometheus scrape überprüfen:
http://prometheus:9090/targets
8. Automatisierung und CI/CD Integration
OpenTelemetry Collector kann in CI/CD Pipelines überprüft und aktualisiert werden:
- Compose Stacks mit Collector testen: Integrationstests für Metrics & Traces
- Collector-Konfiguration versionieren und als ConfigMap/Volume bereitstellen
- Deployment von Collector Image über CI/CD automatisieren
9. Best Practices
- Collector als readonly Service betreiben
- Nur notwendige Ports exponieren
- Batch-Processor nutzen, um Export-Overhead zu minimieren
- Environment Parity: gleiche Collector-Konfiguration in dev/stage/prod
- Alerting auf fehlgeschlagene Exports und nicht erreichbare Targets konfigurieren
Mit dieser Integration des OpenTelemetry Collectors in Docker Compose lässt sich eine zentrale Observability-Pipeline aufbauen, die Metriken, Logs und Traces konsistent erfasst, verarbeitet und exportiert. So kann die Leistung, Zuverlässigkeit und Sicherheit von Container-Anwendungen durchgängig überwacht werden.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.











