Dieses Projekt demonstriert die Integration von OpenTelemetry in eine Spring Boot-Anwendung mit MongoDB, um automatisch Metriken, Traces und Logs zu erfassen und an einen OTLP-Empfänger zu senden.
Aktuell scheitert der Test! Das Ziel ist es, die automatische Instrumentierung von MongoDB so zu konfigurieren, dass die Metriken wie erwartet erfasst und exportiert werden. Der Test prüft, ob die erwarteten Metriken innerhalb von 60 Sekunden empfangen werden.
./buildAndTest.sh
Voraussetzung: Java 17, Maven 3.6+, Podman oder Docker für MongoDB Container.
- OpenTelemetry Java Agent zur automatischen Instrumentierung einer Spring Boot Anwendung verwenden
- MongoDB-Metriken automatisch erfassen (Connection Pool, Database Operations, etc.)
- OTLP (OpenTelemetry Protocol) für den Export der Telemetrie-Daten nutzen
- Integrationstests zur Validierung der OpenTelemetry-Instrumentierung implementieren
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Spring Boot │ │ OpenTelemetry │ │ OTLP Receiver │
│ Application │───▶│ Java Agent │───▶│ (Internal) │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ │
┌─────────────────┐ │
│ MongoDB │ │
│ (Container) │ │
└─────────────────┘ │
│
┌─────────────────┐ │
│ Integration │◀────────────────────────────────────┘
│ Tests │
└─────────────────┘
- Java 17
- Spring Boot 3.5.4
- Spring Data MongoDB
- OpenTelemetry Java Agent
- MongoDB (über Podman Container)
- JUnit 5 für Tests
- Lombok für Code-Generierung
- Maven für Build-Management
├── buildAndTest.sh # Build- und Test-Skript
├── podman-compose.yml # MongoDB Container Definition
├── pom.xml # Maven Dependencies
├── otel/agent/ # OpenTelemetry Java Agent
│ └── opentelemetry-javaagent.jar
├── src/main/java/
│ └── com/example/mongo/otel/
│ ├── DemoApplication.java # Spring Boot Hauptklasse
│ ├── DemoController.java # REST Controller
│ ├── DemoRepository.java # MongoDB Repository
│ ├── MongoActionsGenerator.java # MongoDB Operationen Generator
│ ├── Note.java # Entity Klasse
│ └── OtlpReceiver.java # OTLP Endpunkt (Test-Receiver)
└── src/test/java/
└── com/example/mongo/otel/
└── MongoOtlpInstrumentationTest.java # Integrationstests
spring:
data:
mongodb:
uri: mongodb://localhost:27017/demodbGET /- WillkommensseiteGET /notes- Alle Notizen abrufenPOST /notes- Neue Notiz erstellenGET /generate-actions- MongoDB Operationen generieren
POST /v1/metrics- OTLP Metriken empfangenGET /metrics/names- Empfangene Metrik-Namen abrufenGET /metrics/received- Prüfen ob Metriken empfangen wurdenGET /metrics/resource/attributes- Alle Metrik-Ressource-AttributeGET /metrics/{metricName}/resource/attributes- Ressource-Attribute für spezifische Metrik
Die MongoOtlpInstrumentationTest Klasse validiert:
- Metriken-Empfang: Prüft ob erwartete MongoDB-Metriken innerhalb von 60 Sekunden empfangen werden
> ./buildAndTest.sh - evtl. Anpassen, falls eine alternative MongoDB-Instanz verwendet wird.Das Projekt validiert folgende OpenTelemetry-konforme MongoDB-Metriken:
db.client.operation.duration- Dauer von Database-Operationendb.client.response.returned_rows- Anzahl zurückgegebener Zeilendb.client.connection.count- Anzahl aktive Verbindungendb.client.connection.idle.max- Maximale Anzahl idle Verbindungendb.client.connection.idle.min- Minimale Anzahl idle Verbindungendb.client.connection.max- Maximale Anzahl Verbindungen im Pooldb.client.connection.pending_requests- Anzahl wartender Verbindungsanfragendb.client.connection.timeouts- Anzahl Connection Timeoutsdb.client.connection.create_time- Zeit für Verbindungserstellungdb.client.connection.wait_time- Wartezeit für verfügbare Verbindungdb.client.connection.use_time- Nutzungszeit einer Verbindung