Skip to content

Add troubleshooting page for propagating client metadata with EDOT #2057

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions troubleshoot/ingest/opentelemetry/edot-collector/metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
navigation_title: Collector doesn’t propagate metadata
description: Learn why the Collector doesn’t extract custom attributes and how to propagate such values using EDOT SDKs.
applies_to:
stack:
serverless:
observability:
product:
edot_collector: ga
products:
- id: cloud-serverless
- id: observability
- id: edot-collector
---

# EDOT Collector doesn’t propagate client metadata

By default, the Collector only propagates transport-level metadata. If you want the EDOT Collector to propagate metadata like `project_id`, `tenant`, or `environment`, you need a specific SDK instrumentation.

### What is client metadata

In the context of the EDOT, client metadata refers to gRPC metadata or HTTP headers that accompany telemetry data sent by clients (usually SDKs) to the Collector.

For example:

- Authorization headers
- Trace propagation headers
- `user-agent` strings sent by HTTP clients or EDOT SDKs

This is transport-level metadata, and not application-level context.

### What isn’t client metadata

In this context, client metadata does not include:

- Custom attributes like `project_id`, `tenant`, or `environment`
- Application business logic fields
- Resource attributes

## Symptoms

Expected labels do not appear in Elastic APM or metric data.

Your collector configuration file, for example `otel-config.yaml`, looks similar to this:

```yaml
receivers:
otlp:
protocols:
http:
endpoint: "0.0.0.0:4318"

processors:
resource:
attributes:
- key: project.id
from_context: client_metadata
action: insert
```

This will not work, as the Collector doesn't automatically extract such values from headers.

## Resolution

If you want to propagate customer IDs or project names into spans or metrics, you must instrument this in your code using one of the SDKs.

Use `span.set_attribute` in your application code, where OpenTelemetry spans are created. For example:

```python
from opentelemetry import trace

tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span("handle_request") as span:
span.set_attribute("project.id", get_project_id_from_context())
```

## Resources

- [gRPC metadata documentation](https://grpc.io/docs/guides/concepts/#metadata)
- [OpenTelemetry Protocol (OTLP) overview](https://opentelemetry.io/docs/specs/otlp/)
1 change: 1 addition & 0 deletions troubleshoot/ingest/opentelemetry/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ toc:
- file: edot-collector/index.md
children:
- file: edot-collector/collector-oomkilled.md
- file: edot-collector/metadata.md
- file: edot-sdks/index.md
children:
- file: edot-sdks/dotnet/index.md
Expand Down
Loading