When using Istio with the OpenTelemetry Azure Monitor exporter, traces are not being propagated to Azure Monitor.
Steps to Reproduce
Set up an Istio service mesh with tracing enabled.
Deploy the OpenTelemetry Collector with the azuremonitor exporter to send trace data to Application Insights.
Generate traffic within the mesh and observe the trace data in Application Insights
Expected Result
Traces generated by Istio should appear correctly in Application Insights with proper formatting and trace context propagation using W3C Trace Context headers.
Actual Result
Traces are not appearing in Application Insights suggesting a failure to convert B3 headers into the W3C Trace Context format. No logging provided that shows the trace data was rejected by Application Insights
for i in $(seq 1 100); do kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}' -n demo)" -c ratings -n demo -- curl -sS productpage:9080/productpage | grep -o "
Component(s)
exporter/azuremonitor
What happened?
Description
When using Istio with the OpenTelemetry Azure Monitor exporter, traces are not being propagated to Azure Monitor.
Steps to Reproduce
Expected Result
Traces generated by Istio should appear correctly in Application Insights with proper formatting and trace context propagation using W3C Trace Context headers.
Actual Result
Traces are not appearing in Application Insights suggesting a failure to convert B3 headers into the W3C Trace Context format. No logging provided that shows the trace data was rejected by Application Insights
Collector version
923eb1cf
Environment information
Environment
OS: Ubuntu 22.04.04
Istio installed with Helm
helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update
helm install istio-base istio/base -n istio-system --create-namespace helm install istiod istio/istiod -n istio-system --wait helm status istiod -n istio-system
Configure Providers
kubectl get configmap istio -n istio-system -o yaml > configmap.yaml
Update configmap for grpc OTLP format Traces
mesh: |- defaultConfig: discoveryAddress: istiod.istio-system.svc:15012 tracing: {} defaultProviders: metrics:
kubectl apply -f configmap.yaml
Install Otel Collector
kubectl create namespace otel kubectl label namespace otel istio-injection=enabled
kubectl apply -f otel-collector-contrib.yaml -n otel
Set up demo
kubectl create namespace demo kubectl label namespace demo istio-injection=enabled
Create Telemetry Rule
cat < tel-rule-otel-tracing.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: otel-tracing
namespace: demo
spec:
tracing:
kubectl apply -f tel-rule-otel-tracing.yaml
Generate and view traces
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml -n demo kubectl get pods -n demo
Generate traces
for i in $(seq 1 100); do kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}' -n demo)" -c ratings -n demo -- curl -sS productpage:9080/productpage | grep -o "
Verify traces on console
kubectl logs -n otel "$(kubectl get pods -n otel -l app=opentelemetry-collector -o jsonpath='{.items[0].metadata.name}')" | grep "app-insights"
Verify traces on Application Insights
OpenTelemetry Collector configuration
Log output
Additional context
No response