Dash0 Raises $35 Million Series A to Build the First AI-Native Observability Platform

Proxying the ingestion endpoint

Learn how to proxy Dash0's website monitoring ingestion endpoint.

Overview

When you deploy an intermediate OpenTelemetry Collector between your applications and Dash0, all telemetry data flows through the Collector before reaching Dash0. This architecture introduces a challenge: Dash0 only observes the outbound requests from the Collector itself, not from the original clients and specifically their web browsers.

Impact

  • Dash0 uses the Collector's IP address as the source.address for all telemetry
  • Geo-location enrichment reflects the Collector's location rather than the actual client locations
  • All sessions appear to originate from a single IP address (wherever your Collector is hosted)

Solution

To preserve the original client IP addresses and enable accurate geo-location enrichment, configure your Collector to forward the X-Forwarded-For header downstream to Dash0.

info

This approach only works when the X-Forwarded-For header is already present in requests arriving at the Collector. This header is typically set automatically when requests pass through load balancers, reverse proxies, or API gateways before reaching the Collector. If your telemetry is sent directly from applications to the Collector without any intermediary infrastructure, the header will not be available.

Implementing this solution requires three configuration changes.

Capture Inbound Metadata on the OTLP Receiver

Configure your OTLP receiver to capture the X-Forwarded-For header from incoming requests.

yaml
12345
receivers:
otlp:
protocols:
http:
include_metadata: true

Preserve the Header Through the Pipeline

Ensure the captured header is maintained as telemetry data flows through your processing pipeline.

yaml
1234
processors:
batch:
metadata_keys:
- X-Forwarded-For

Reattach the Header on Outgoing Requests

Configure the OTLP exporter to include the X-Forwarded-For header when forwarding telemetry to Dash0.

yaml
123456789101112131415161718
extensions:
headers_setter:
headers:
- action: insert
key: Authorization
value: "Bearer ${env:DASH0_TOKEN]"
- action: insert
key: X-Forwarded-For
from_context: X-Forwarded-For
exporters:
otlp:
endpoint: "{{endpoint_otlp_grpc_hostname}}:{{endpoint_otlp_grpc_port}}"
auth:
authenticator: headers_setter
service:
extensions: [headers_setter]

Result

With this configuration in place, Dash0 will receive the X-Forwarded-For header containing the original client IP addresses. This enables Dash0 to perform GeoIP resolution based on the actual client locations rather than the Collector's address, providing accurate geo-location data for your telemetry.

Last updated: October 13, 2025