Distributed Workflow Orchestration Platform  ·  View 25 of 31  ·  Operations

Observability and Distributed Tracing

The signals, where they go, and the specific question the design has to be able to answer.

Editable source SVG draw.io All views
Instrument
Instrument
Collect
Collect
Store
Store
Consume
Consume
Traces
Traces
W3C traceparent
carried in SB app properties
W3C traceparent...
OTel collector
DaemonSet · OTLP
OTel collector...
Application Insights
5% head · 100% error tail
Application Insights...
Execution waterfall
why did 123 take 47 s
Execution waterfall...
Metrics
Metrics
RED + queue depth
task duration by type
RED + queue depth...
Managed Prometheus
scrape + remote write
Managed Prometheus...
Azure Monitor metrics
93 d retention
Azure Monitor metrics...
SLO dashboards
Grafana · burn rate
SLO dashboards...
Logs
Logs
Structured JSON
tenant · execution · task ids
Structured JSON...
Container Insights
stdout · no PII
Container Insights...
Log Analytics
30 d hot · 2 y archive
Log Analytics...
KQL investigation
saved incident queries
KQL investigation...
Business events
Business events
ExecutionStarted/Failed
domain events, not logs
ExecutionStarted/Failed...
Change feed
ordered per execution
Change feed...
SQL fact tables
400 d
SQL fact tables...
Tenant SLA reporting
monthly attestation
Tenant SLA reporting...
Alerting
Alerting
SLO definitions
as code, versioned
SLO definitions...
Alert rules
burn rate · DLQ · lag
Alert rules...
Action groups
severity routed
Action groups...
On-call + runbook
every alert links one
On-call + runbook...
Observability — Signal Type Against Pipeline Stage
Observability — Signal Type Against Pipeline Stage
Application we own
Application we own
Security / platform
Security / platform
Data store
Data store
Person or role
Person or role
Six identifiers travel together on every log line, span and message: traceId, spanId, correlationId, tenantId, workflowExecutionId and taskExecutionId. Any one of them reconstructs the whole picture.
Six identifiers travel together on every log line, span and message: traceId, spanId, correlationId, tenantId, workflowExecutionId and taskExecutionId. Any one of them reconstructs the whole picture.
v 1.0 · owner Data & AI Global Practice · date 2026-08
v 1.0 · owner Data & AI Global Practice · date 2026-08
Text is not SVG - cannot display

The question that shaped this

  • Why did workflow 123 take 47 seconds? Answering it needs one trace spanning an HTTP request, a database write, a queue hop, a worker on a different pod, two retries and a downstream call — which is only possible because traceparent is propagated in Service Bus application properties.
  • Six identifiers travel together on every log line, span and message: traceId, spanId, correlationId, tenantId, workflowExecutionId and taskExecutionId. Any one of them reconstructs the whole picture.
  • Business events are separated from logs. ExecutionCompleted is a fact with a retention and an SLA attached; a log line is diagnostic output that may be sampled away.

Sampling and cost

  • 5% head sampling with 100% tail retention on errors. At 1.8M tasks per day, full trace retention would dominate the platform's running cost while adding nothing to the p50 case.
  • Logs are 30 days hot and 2 years in archive; metrics 93 days; business facts 400 days in Azure SQL for annual comparison. Every retention figure is a cost decision as much as a compliance one.
  • No payload content is ever logged. Log lines carry references and identifiers, which keeps the observability estate outside the data-protection boundary.

Alerting discipline

  • Every alert links a runbook. An alert without one is deleted at the next review, because an unactionable page trains people to ignore pages.
  • Alert on burn rate, dead-letter arrival rate, oldest-message-age and projection lag — symptoms a user would feel. CPU and memory are dashboards, not pages.
  • Per-tenant SLO views are a launch requirement. Without them a single tenant's degradation is invisible inside a healthy aggregate.