|
| 1 | +# Vendor Compatibility Overlay |
| 2 | + |
| 3 | +Adds a dedicated OpenTelemetry Collector that accepts Datadog, Jaeger, and Splunk HEC wire protocols. Vendor agents can be pointed at observability-stack by changing an endpoint URL — no application code changes required. |
| 4 | + |
| 5 | +## Architecture |
| 6 | + |
| 7 | +``` |
| 8 | +vendor agents ──▶ otel-collector-compat ──OTLP──▶ otel-collector (base, unchanged) ──▶ Data Prepper / Prometheus ──▶ OpenSearch |
| 9 | + (this overlay) |
| 10 | +
|
| 11 | +OTLP apps ─────────────────────────────────▶ (direct to base, no compat hop) |
| 12 | +(incl. modern Jaeger) |
| 13 | +``` |
| 14 | + |
| 15 | +The compat collector uses upstream [`opentelemetry-collector-contrib`](https://github.com/open-telemetry/opentelemetry-collector-contrib) receivers to translate vendor wire protocols to OTLP, then forwards to the base collector. All enrichment and downstream routing happens in the base pipeline. |
| 16 | + |
| 17 | +## Activation |
| 18 | + |
| 19 | +```bash |
| 20 | +echo "INCLUDE_COMPOSE_COMPAT=docker-compose.compat.yml" >> .env |
| 21 | +docker compose up -d |
| 22 | +``` |
| 23 | + |
| 24 | +This adds `otel-collector-compat` and the bundled Jaeger `hotrod` demo to the stack. |
| 25 | + |
| 26 | +## Supported vendors |
| 27 | + |
| 28 | +| Vendor | Receiver(s) | Default ports | Details | |
| 29 | +|--------|-------------|---------------|---------| |
| 30 | +| Datadog | `datadogreceiver`, `statsdreceiver` | 8126/tcp, 8125/udp | [vendors/datadog/](vendors/datadog/) | |
| 31 | +| Jaeger (legacy wire protocol) | `jaegerreceiver` | 14250/tcp, 14268/tcp | [vendors/jaeger/](vendors/jaeger/) | |
| 32 | +| Splunk HEC | `splunkhecreceiver` | 8088/tcp | [vendors/splunk/](vendors/splunk/) | |
| 33 | + |
| 34 | +Modern Jaeger apps emit OTLP natively and bypass this overlay. See [vendors/jaeger/](vendors/jaeger/). |
| 35 | + |
| 36 | +SignalFx is not supported. The upstream `signalfxreceiver` is deprecated with explicit guidance to migrate to OTLP. |
| 37 | + |
| 38 | +## Deployment modes |
| 39 | + |
| 40 | +Each vendor integration supports: |
| 41 | + |
| 42 | +1. **Greenfield** — only observability-stack runs on the target port. |
| 43 | +2. **Side-by-side** — vendor agent and observability-stack run simultaneously via port remapping (useful for A/B validation). |
| 44 | +3. **Full replacement** — vendor agent decommissioned, observability-stack on the default vendor port. |
| 45 | + |
| 46 | +## Port customization |
| 47 | + |
| 48 | +Vendor ports are remappable via environment variables. Useful when a real vendor agent already occupies the default port on the host. |
| 49 | + |
| 50 | +| Variable | Default | Receiver | |
| 51 | +|----------|---------|----------| |
| 52 | +| `COMPAT_DATADOG_APM_PORT` | 8126 | Datadog trace-agent | |
| 53 | +| `COMPAT_DATADOG_STATSD_PORT` | 8125 | DogStatsD | |
| 54 | +| `COMPAT_JAEGER_GRPC_PORT` | 14250 | Jaeger gRPC | |
| 55 | +| `COMPAT_JAEGER_THRIFT_HTTP_PORT` | 14268 | Jaeger Thrift HTTP | |
| 56 | +| `COMPAT_SPLUNK_HEC_PORT` | 8088 | Splunk HEC | |
| 57 | +| `COMPAT_COLLECTOR_MEMORY_LIMIT` | 256M | Compat collector memory limit | |
| 58 | + |
| 59 | +## Attribute translation |
| 60 | + |
| 61 | +Each receiver translates vendor-specific data to the OpenTelemetry data model. Translation behavior is defined by the upstream OpenTelemetry Collector receivers and varies per vendor. For schema details, consult: |
| 62 | + |
| 63 | +- The upstream receiver READMEs under [`opentelemetry-collector-contrib/receiver/`](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver) |
| 64 | +- The vendor's own instrumentation and tagging documentation |
| 65 | + |
| 66 | +Per-vendor pages in this directory list the canonical attributes users typically encounter and link to upstream sources. |
| 67 | + |
| 68 | +## Directory layout |
| 69 | + |
| 70 | +``` |
| 71 | +compat/ |
| 72 | +├── README.md ← this file |
| 73 | +├── collector/ |
| 74 | +│ ├── config.compat.yaml ← compat collector config (receivers + forward) |
| 75 | +│ └── README.md ← compat collector design notes |
| 76 | +└── vendors/ |
| 77 | + ├── datadog/README.md |
| 78 | + ├── jaeger/README.md |
| 79 | + └── splunk/README.md |
| 80 | +
|
| 81 | +docker-compose.compat.yml ← overlay service definitions |
| 82 | +``` |
| 83 | + |
| 84 | +## Adding a vendor |
| 85 | + |
| 86 | +1. Create `vendors/<name>/README.md`. |
| 87 | +2. Add the receiver stanza to `collector/config.compat.yaml` and wire it into the appropriate pipeline. |
| 88 | +3. Add port mappings to `docker-compose.compat.yml`. |
0 commit comments