Een demo ASP.NET Core WebAPI die willekeurige dobbelsteenworpen (1-6) retourneert met instelbare vertragingen en foutpercentages, volledig geïnstrumenteerd met OpenTelemetry en geïntegreerd met de LGTM observability stack (Loki, Grafana, Tempo, Mimir/Prometheus).
- 🎲 Willekeurig dobbelsteenwerp endpoint (geeft 1-6 terug)
- ⏱️ Instelbare willekeurige vertraging (standaard: 0-1000ms)
- ❌ Instelbaar foutpercentage (standaard: 5%)
- 📊 Volledige OpenTelemetry instrumentatie (traces, metrics, logs)
- 🔍 Integratie met LGTM observability stack
- 🚀 SCript voor het genereren van verkeer inbegrepen
- .NET 10.0 SDK
- Docker Desktop
- PowerShell (voor het genereren van verkeer)
| Opdracht | Omschrijving |
|---|---|
| Opdracht 1 | Start de LGTM Docker container |
| Opdracht 2 | Toegang tot de observability stack |
| Opdracht 3 | Grafana dashboard genereren via een LLM |
| Opdracht 4 | Gedistribueerde tracing met twee services |
Bewerk appsettings.json om het gedrag aan te passen:
{
"ApiSettings": {
"MinDelayMs": 0, // Minimale vertraging in milliseconden
"MaxDelayMs": 1000, // Maximale vertraging in milliseconden
"ErrorRate": 0.05 // Foutpercentage (0.05 = 5%)
},
"OpenTelemetry": {
"OtlpEndpoint": "http://localhost:4317" // OTLP gRPC endpoint
}
}Voorbeelden:
- Geen vertraging: Stel
MinDelayMsenMaxDelayMsbeiden in op0 - Vaste vertraging: Stel beiden in op dezelfde waarde (bijv.
500) - Hoger foutpercentage: Verander
ErrorRatenaar0.20(20%) - Geen fouten: Stel
ErrorRatein op0
Druk op Ctrl+C in de terminal waar de API actief is.
docker stop lgtmDe --rm vlag verwijdert de container automatisch na het stoppen.
- Client stuurt HTTP GET-verzoek naar
/ - ASP.NET Core ontvangt het verzoek en maakt een OpenTelemetry span aan
- Applicatie past willekeurige vertraging toe (standaard 0-1000ms)
- Applicatie controleert het foutpercentage en kan een 500-fout retourneren (5% kans)
- Applicatie genereert willekeurig getal 1-6 als er geen fout is
- OpenTelemetry legt traces, metrics en logs vast
- OTLP Exporter stuurt telemetrie naar de OpenTelemetry Collector
- Collector stuurt data door naar:
- Tempo (traces)
- Prometheus (metrics)
- Loki (logs)
- Grafana visualiseert alle telemetriedata
Elk verzoek bevat aangepaste OpenTelemetry-tags:
dice.result- Het gegooid getal (1-6)dice.delay_ms- Toegepaste vertragingdice.error- Of er een fout werd gesimuleerddice.min_delay- Ingestelde minimale vertragingdice.max_delay- Ingestelde maximale vertragingdice.error_rate- Ingesteld foutpercentage
- Controleer of poort 5000 niet in gebruik is:
netstat -ano | findstr :5000 - Controleer of .NET SDK is geïnstalleerd:
dotnet --version - Herstel pakketten:
dotnet restore
- Controleer of de container actief is:
docker ps --filter name=lgtm - Bekijk de containerlogs:
docker logs lgtm - Zorg dat de API is geconfigureerd met het juiste OTLP endpoint (
http://localhost:4317) - Controleer of Grafana bereikbaar is: http://localhost:3000
- Zorg dat Docker Desktop actief is
- Controleer op poortconflicten:
netstat -ano | findstr :3000 - Herstart Docker Desktop
- Controleer
ApiSettings:ErrorRateinDiceScore.API/appsettings.json - Zorg dat het is ingesteld op
0.05(5%) en niet0.5(50%)
Prometheus query-voorbeelden:
# Verzoeksnelheid
rate(http_server_request_duration_seconds_count[1m])
# Gemiddelde verzoekduur
rate(http_server_request_duration_seconds_sum[1m]) / rate(http_server_request_duration_seconds_count[1m])
# Foutpercentage
rate(http_server_request_duration_seconds_count{http_response_status_code="500"}[1m])
Tempo query:
- Zoek op servicenaam:
DiceScore.API - Filter op duur:
> 500ms - Filter op status:
status=error
Voor productie-implementaties:
- Gebruik HTTPS-endpoints
- Configureer juiste authenticatie voor Grafana
- Gebruik permanente opslag voor alle services
- Stel geschikte retentiebeleid in
- Beveilig OpenTelemetry-endpoints
- Gebruik omgevingsspecifieke configuratie
Dit is een demoproject voor onderwijsdoeleinden.