OpsCanary
kubernetesobservabilityPractitioner

Solving Zero+Zero=Two in Mesh Observability

5 min read CNCF BlogAug 11, 2026Reviewed for accuracy
Share
PractitionerHands-on experience recommended

Mesh observability is a critical aspect of modern microservices architecture. When you have multiple services communicating, ensuring that traces are propagated correctly is essential for debugging and performance monitoring. A common issue arises when zero plus zero equals two: if Envoy fails to extract the incoming context, it generates a new root span, leading to fragmented traces and confusion in your telemetry data.

To tackle this, you need to leverage OpenTelemetry alongside Istio. OpenTelemetry provides a seamless way to instrument your applications and propagate context using W3C Trace Context headers. When you enable tracing in Istio, Envoy starts generating spans as well. To ensure that both your applications and the mesh communicate effectively, configure your applications to emit B3 headers in addition to the standard headers. This is where the Collector comes into play, acting as the bridge between your applications and the mesh. Key configuration parameters include enabling tracing in Envoy and setting the OTEL_PROPAGATORS to include both tracecontext and B3 headers.

In production, you must be vigilant about how traces are generated and propagated. Misconfiguration can lead to the very issue you’re trying to solve. Ensure that your Istio setup includes the correct tracing configuration and that your applications are emitting the necessary headers. This will help you maintain a coherent view of your service interactions and performance metrics.

Key takeaways

  • Enable tracing in Envoy to ensure spans are generated correctly.
  • Configure applications to emit B3 headers alongside W3C Trace Context headers.
  • Use the Collector as the integration point for your mesh and applications.

Why it matters

Accurate trace propagation is vital for effective debugging and performance monitoring in microservices. Misleading telemetry can lead to increased downtime and unresolved issues.

Code examples

YAML
1apiVersion: install.istio.io/v1alpha1
2kind: IstioOperator
3spec:
4  meshConfig:
5    extensionProviders:
6      - name: otel-tracing
7        opentelemetry:
8          service: otel-collector.otel-demo.svc.cluster.local
9          port: 4317
YAML
enableTracing: true
    defaultConfig:
      tracing:
        zipkin:
          address: otel-collector.otel-demo.svc.cluster.local:9411
YAML
default:
  envOverrides:
    - name: OTEL_PROPAGATORS
      value: "tracecontext,baggage,b3multi"

When NOT to use this

The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.

Want the complete reference?

Read official docs

Test what you just learned

Quiz questions written from this article

Take the quiz →
Linux FoundationSponsor

Industry-standard certifications built by the people behind Linux and Kubernetes. Earn the CKA — the gold standard Kubernetes administrator cert. OpsCanary readers get 30% off year-round with code OPSCANARY3.

Get CKA certified →

Get the daily digest

One email. 5 articles. Every morning.

No spam. Unsubscribe anytime.