|
| 1 | +# Vendor Compatibility Overlay |
| 2 | + |
| 3 | +User-facing migration guides: https://observability.opensearch.org/docs/send-data/from-vendor/ |
| 4 | + |
| 5 | +This overlay adds a dedicated OpenTelemetry Collector that accepts Datadog, Jaeger, and Splunk HEC wire protocols, translates them to OTLP, and forwards to the base collector. No application code changes are required — vendor agents are pointed at observability-stack by changing an endpoint URL. |
| 6 | + |
| 7 | +## Do I need this overlay? |
| 8 | + |
| 9 | +| If your apps emit... | Need this overlay? | |
| 10 | +|----------------------|--------------------| |
| 11 | +| OpenTelemetry OTLP (gRPC or HTTP) | No. Send directly to the base collector on 4317 or 4318. | |
| 12 | +| Datadog (dd-trace-*, DogStatsD) | Yes. | |
| 13 | +| Jaeger native wire protocol (`jaeger-client-*`) | Yes. | |
| 14 | +| Splunk HEC | Yes. | |
| 15 | +| Jaeger via modern OpenTelemetry SDK + OTLP | No. | |
| 16 | + |
| 17 | +## Architecture |
| 18 | + |
| 19 | +``` |
| 20 | +vendor agents ──▶ otel-collector-compat ──OTLP──▶ otel-collector (base, unchanged) ──▶ Data Prepper / Prometheus ──▶ OpenSearch |
| 21 | + (this overlay) |
| 22 | +
|
| 23 | +OTLP apps ─────────────────────────────────▶ (direct to base, no compat hop) |
| 24 | +``` |
| 25 | + |
| 26 | +The compat collector uses upstream [`opentelemetry-collector-contrib`](https://github.com/open-telemetry/opentelemetry-collector-contrib) receivers. All enrichment and downstream routing happens in the base pipeline — the compat config is purely ingest + forward. |
| 27 | + |
| 28 | +## Activation |
| 29 | + |
| 30 | +```bash |
| 31 | +echo "INCLUDE_COMPOSE_COMPAT=docker-compose.compat.yml" >> .env |
| 32 | +docker compose up -d |
| 33 | +``` |
| 34 | + |
| 35 | +Adds `otel-collector-compat` and the bundled Jaeger `hotrod` demo to the stack. |
| 36 | + |
| 37 | +### Verify it's running |
| 38 | + |
| 39 | +```bash |
| 40 | +docker compose ps otel-collector-compat |
| 41 | +curl -sI http://localhost:8126/info # HTTP 200 = Datadog receiver is live |
| 42 | +``` |
| 43 | + |
| 44 | +## Supported vendors |
| 45 | + |
| 46 | +| Vendor | Receiver(s) | Default ports | Repo notes | |
| 47 | +|--------|-------------|---------------|------------| |
| 48 | +| Datadog | `datadogreceiver`, `statsdreceiver` | 8126/tcp, 8125/udp | [vendors/datadog/](vendors/datadog/) | |
| 49 | +| Jaeger (legacy wire protocol) | `jaegerreceiver` | 14250/tcp, 14268/tcp | [vendors/jaeger/](vendors/jaeger/) | |
| 50 | +| Splunk HEC | `splunkhecreceiver` | 8088/tcp | [vendors/splunk/](vendors/splunk/) | |
| 51 | + |
| 52 | +User-facing migration guides live at https://observability.opensearch.org/docs/send-data/from-vendor/. |
| 53 | + |
| 54 | +SignalFx is not supported. The upstream `signalfxreceiver` is deprecated with explicit guidance to migrate to OTLP. |
| 55 | + |
| 56 | +## Deployment modes |
| 57 | + |
| 58 | +Each vendor supports greenfield, side-by-side, and full-replacement modes. See the public migration guide for each vendor for specifics. |
| 59 | + |
| 60 | +## Port customization |
| 61 | + |
| 62 | +Ports are remappable via environment variables. Useful when a real vendor agent already occupies the default port on the host. |
| 63 | + |
| 64 | +| Variable | Default | Receiver | |
| 65 | +|----------|---------|----------| |
| 66 | +| `COMPAT_DATADOG_APM_PORT` | 8126 | Datadog trace-agent | |
| 67 | +| `COMPAT_DATADOG_STATSD_PORT` | 8125 | DogStatsD | |
| 68 | +| `COMPAT_JAEGER_GRPC_PORT` | 14250 | Jaeger gRPC | |
| 69 | +| `COMPAT_JAEGER_THRIFT_HTTP_PORT` | 14268 | Jaeger Thrift HTTP | |
| 70 | +| `COMPAT_SPLUNK_HEC_PORT` | 8088 | Splunk HEC | |
| 71 | +| `COMPAT_COLLECTOR_MEMORY_LIMIT` | 256M | Compat collector memory limit | |
| 72 | + |
| 73 | +## Attribute translation |
| 74 | + |
| 75 | +Each receiver translates vendor-specific data to the OpenTelemetry data model. Translation behavior is defined by the upstream receivers. For schema details, consult: |
| 76 | + |
| 77 | +- The upstream receiver READMEs under [`opentelemetry-collector-contrib/receiver/`](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver) |
| 78 | +- The vendor's own instrumentation and tagging documentation |
| 79 | + |
| 80 | +## Directory layout |
| 81 | + |
| 82 | +``` |
| 83 | +compat/ |
| 84 | +├── README.md ← this file |
| 85 | +├── collector/ |
| 86 | +│ ├── config.compat.yaml ← compat collector config |
| 87 | +│ └── README.md ← compat collector design notes |
| 88 | +└── vendors/ |
| 89 | + ├── datadog/README.md ← developer notes + link to migration guide |
| 90 | + ├── jaeger/README.md |
| 91 | + └── splunk/README.md |
| 92 | +
|
| 93 | +docker-compose.compat.yml ← overlay service definitions |
| 94 | +``` |
| 95 | + |
| 96 | +## Adding a vendor |
| 97 | + |
| 98 | +1. Create `vendors/<name>/README.md` with a link to the (forthcoming) public migration guide and developer notes (receiver used, config location, quick local test). |
| 99 | +2. Add the receiver stanza to `collector/config.compat.yaml` and wire it into the appropriate pipeline(s). |
| 100 | +3. Add port mappings to `docker-compose.compat.yml`. |
| 101 | +4. Add a page at `docs/starlight-docs/src/content/docs/send-data/from-vendor/<name>.md` with the user migration guide. |
| 102 | +5. Verify end-to-end: send vendor-format data → confirm it lands in OpenSearch. |
0 commit comments