You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
v7: OpenTelemetry tracing and metrics, Microsoft.Extensions.Logging #90
Today: monitoring and logging come from separate packages: Obvs.Monitoring.AppMetrics, .ElasticSearch, .PerformanceCounters and Obvs.Logging.NLog.
Proposal:
An ActivitySource and Meter in the core, so send, publish, receive and handle become OpenTelemetry spans, with trace context carried in message headers across transports.
Standard messaging metrics.
Microsoft.Extensions.Logging for all logging.
Retire the bespoke monitoring and logging packages in v7.
Done when: a sample app shows end-to-end traces across two services in an OpenTelemetry exporter.
Each has a broker test showing the trace continues from one host to another.
Left
The "done when": a sample app showing end-to-end traces across two services in an OpenTelemetry exporter (v7: a migration guide, a v6 and v7 interop test, and the examples on v7 (#95) #154). The examples' client and service trace with OpenTelemetry's console exporter, and a command's trace crosses both apps under one trace ID.
Count responses as received, and messages a transport can't deserialize, which needs a hook every transport calls. Add error.type to messaging.client.sent.messages for failed sends (v7: count failed sends, responses, and messages transports can't deserialize (#90) #147). The hook is ObvsTransportTelemetry.RecordUndeserializable. Azure Service Bus, SQS and JetStream call it. The other transports report such a message as an error on the bus's stream, which is now logged.
Done in #115 (OpenTelemetry tracing and metrics), #116, #118, #119, #121 and #123 (trace context in message headers on each transport), #137 (received and failed message metrics), #146 (Microsoft.Extensions.Logging for bus and transport errors), #147 (failed sends, responses and undeserializable messages), and #154 (the examples, where a command's trace crosses both apps). Merged into v7.
Activity
OpenTelemetry tracing and metrics, and Debug logging of outgoing mess…
v7: Carry trace context in message headers across processes (#116)
christopherread commentedon Oct 26, 2026
Status on the
v7branch.Merged
v7: OpenTelemetry tracing and metrics, Debug logging #115:
ActivitySourceand aMeternamedObvs(ObvsTelemetry);messaging.client.sent.messagesandmessaging.process.durationmetrics;ILoggerlogging of outgoing messages at Debug level.v7: Carry trace context in message headers across processes #116: trace context carried in message headers (
traceparentandtracestate), so the receiver's span continues the sender's trace. It started with RabbitMQ and the in-memory transport.Header support on the other transports:
Each has a broker test showing the trace continues from one host to another.
Left
Obvs.Monitoring.AppMetrics,.ElasticSearch,.PerformanceCountersandObvs.Logging.NLog. They're removed from thev7branch (v7: System.Text.Json by default, and retire the v6-only packages (#93) #144) and stay on v6. Deprecating them on NuGet is tracked in v7: Fewer packages: System.Text.Json default, retire unmaintained extensions #93.messaging.client.consumed.messagesandobvs.process.failed.messages(Obvs.Hosting: metrics for received and failed messages #137).error.typetomessaging.client.sent.messagesfor failed sends (v7: count failed sends, responses, and messages transports can't deserialize (#90) #147). The hook isObvsTransportTelemetry.RecordUndeserializable. Azure Service Bus, SQS and JetStream call it. The other transports report such a message as an error on the bus's stream, which is now logged.Merge pull request #147 from christopherread/v7-telemetry-gaps
christopherread commentedon Oct 27, 2026
Done in #115 (OpenTelemetry tracing and metrics), #116, #118, #119, #121 and #123 (trace context in message headers on each transport), #137 (received and failed message metrics), #146 (
Microsoft.Extensions.Loggingfor bus and transport errors), #147 (failed sends, responses and undeserializable messages), and #154 (the examples, where a command's trace crosses both apps). Merged intov7.