Observabilita
Jak sledovat jednu objednávku přes dvě služby, outbox a RabbitMQ – trasy, metriky, logy a health checky.
Na této stránce
V jedné větě: Každý požadavek dostane trace ID, které putuje s každou zprávou (v outboxu i v RabbitMQ), takže v Aspire dashboardu je celá cesta objednávky vidět jako jeden strom.
Jaký problém řeší
U jedné aplikace stačí log. U EDA je jedna objednávka rozprostřená do HTTP požadavku, několika kol outbox workeru, dvou služeb a brokeru – a mezi kroky jsou sekundy. Bez trasování by se hledání chyby rovnalo hledání jehly v kupce sena.
Přirovnání: Sledovací číslo zásilky. Ať balík leží na kterékoli poště, podle čísla zjistíte celou jeho cestu.
Jak se trace ID přenáší
sequenceDiagram
participant B as Prohlížeč
participant W as Web
participant O as ordering.db (outbox)
participant MQ as RabbitMQ
participant I as Inventory.Api
B->>W: POST objednávka (vznikne trasa T)
W->>O: OutboxMessage.TraceParent = T
Note over O: o chvilku později
O->>W: worker: span "publish ReserveStockV1" (rodič T)
W->>MQ: hlavička traceparent = T
MQ->>I: consumer: span "process ReserveStockV1" (rodič T)
I->>I: odpověď do outboxu skladu s TraceParent = T
- Trace ID nese obálka zprávy, ne kontrakt: sloupec
OutboxMessage.TraceParent(OutboxMessageFactory) a hlavičkatraceparentv RabbitMQ (standard W3C Trace Context). - Spany a metriky zpráv vytváří jen MessagingTelemetry
(zdroj
MiniShop.Messaging). Infrastructure používá jenSystem.Diagnostics– balíčky OpenTelemetry má jen ServiceDefaults. - Číslo objednávky se na span přidá jako tag
minishop.order.id(TraceTags) – v dashboardu jde hledat podle objednávky.
Tři pilíře
| Pilíř | Co v MiniShopu | Kde vidět |
|---|---|---|
| Trasy | HTTP, SQL (EF Core), outbox, RabbitMQ, sága | Aspire dashboard → Traces |
| Metriky | doručené/selhané zprávy, zpoždění outboxu, zpracované zprávy consumerů, runtime .NET | Aspire dashboard → Metrics |
| Logy | Serilog → konzole, denní soubor a OpenTelemetry (propojené s trasou) | Aspire dashboard → Structured logs, logs/ |
Health checky
/health– služba je připravená (Aspire, Docker Compose a monitoring se ptají sem)./alive– proces žije.- OutboxHealthCheck hlásí Degraded, když zpráva visí v outboxu déle než 5 minut („visí pošta?“).
Známá omezení
- Timeout ságy a obnova katalogu začínají vlastní trasu (nenavazují na původní požadavek) – nejsou vyvolané uživatelem.
- Telemetrie se drží jen v paměti dashboardu (po restartu je pryč), bez vzorkování.