OpenTelemetry Collector is an open-source telemetry proxy replacing proprietary APM forwarders with vendor-neutral trace, metric, and log routing.
The OpenTelemetry Collector is an open-source proxy that ingests, processes, and exports traces, metrics, and logs across distributed systems. Deployable as a local agent or an independent gateway, its pipeline architecture decouples application telemetry from proprietary monitoring backends. Engineering teams use it to transform data in flight and route streams to multiple destinations without altering application code.
Dynatrace APM uses its proprietary OneAgent daemon to auto-instrument runtimes and stream telemetry straight into the Dynatrace cloud platform. While this removes manual configuration, it binds infrastructure to proprietary agent binaries and closed ingestion formats. The OpenTelemetry Collector replaces that collection tier with an open Go binary. Teams define pipelines to batch events, scrub sensitive attributes, and apply tail sampling before data crosses network boundaries. It also enables dual-shipping: engineers can route telemetry to Dynatrace while concurrently feeding open-source backends like Jaeger or Prometheus, testing alternatives without altering application code.
The operational models differ fundamentally. Dynatrace operates as an all-in-one platform where collection, indexing, Davis AI analysis, and dashboards require no customer infrastructure maintenance. The OpenTelemetry Collector provides no persistent database, query interface, or alerting console. Running the Collector means DevOps teams take on operational ownership: tuning buffer queues, setting memory thresholds, managing collector instances, and provisioning downstream storage. Organizations choose the Collector when protocol neutrality and data governance justify the extra infrastructure work.
memory_limiter processor must precede other processors and coordinate with container cgroup limits.Can OpenTelemetry Collector replace Dynatrace APM entirely? No. The Collector handles data ingestion, processing, and routing, but it lacks persistent storage, trace indexing, and automated root-cause dashboards.
Does OpenTelemetry Collector store telemetry on disk? No. It operates as an in-memory streaming proxy, though an optional file-storage extension can buffer data during downstream network interruptions.
Is OpenTelemetry Collector free for commercial use? Yes. Governed by the Cloud Native Computing Foundation, the project has no licensing fees or volume-based pricing restrictions.
The OpenTelemetry Collector is the right choice for organizations that require complete operational ownership over their telemetry pipelines and freedom from proprietary agent lock-in; it is unsuited for teams wanting turnkey monitoring without maintaining backend storage. Active maintenance through September 2026 and an Apache-2.0 license that permits internal modification and private redistribution make it a dependable foundation for cloud-native observability.
We started this exact setup from scratch in a clean Linux machine on Nov 2, 2026 and checked it through OpenTelemetry Collector's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p opentelemetry-oss && cd opentelemetry-oss
curl -fsSL https://open-source.store/tools/opentelemetry-oss/compose.yml -o compose.ymltouch .envdocker compose up -dservices:
otel-collector:
image: otel/opentelemetry-collector:0.164.0
restart: always
command: ["--config=/etc/otelcol/config.yaml"]
ports:
- "127.0.0.1:4318:4318"
- "127.0.0.1:4317:4317"
configs:
- source: otel_collector_config
target: /etc/otelcol/config.yaml
configs:
otel_collector_config:
content: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug]
metrics:
receivers: [otlp]
exporters: [debug]
logs:
receivers: [otlp]
exporters: [debug]
Free IDE for Java, Kotlin, Go, TypeScript and Python. Built on IntelliJ Community, fully open source, 300+ plugins.
Show that OpenTelemetry Collector is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 20 s: otel/opentelemetry-collector:0.164.0.
Based on the upstream setup. Official Docker image pinned to 0.164.0. Receivers bound to 127.0.0.1 because OpenTelemetry Collector has no built-in authentication, with OTLP HTTP (4318) and gRPC (4317) pipelines configured with debug exporter.
otel-collector-1 | 2026-11-02T20:43:23.758831052Z 2026-11-02T20:43:23.758Z info otelconftelemetry/tracer.go:47 Internal trace telemetry disabled {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}}
otel-collector-1 | 2026-11-02T20:43:23.760936135Z 2026-11-02T20:43:23.760Z info [email protected]/service.go:233 Starting otelcol... {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "Version": "0.164.0", "NumCPU": 2}
otel-collector-1 | 2026-11-02T20:43:23.760948635Z 2026-11-02T20:43:23.760Z info extensions/extensions.go:43 Starting extensions... {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}}
otel-collector-1 | 2026-11-02T20:43:23.761019260Z 2026-11-02T20:43:23.760Z info [email protected]/otlp.go:120 Starting GRPC server {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "otlp", "otelcol.component.kind": "receiver", "endpoint": "[::]:4317"}
otel-collector-1 | 2026-11-02T20:43:23.761062677Z 2026-11-02T20:43:23.761Z info [email protected]/otlp.go:175 Starting HTTP server {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "otlp", "otelcol.component.kind": "receiver", "endpoint": "[::]:4318"}
otel-collector-1 | 2026-11-02T20:43:23.761067760Z 2026-11-02T20:43:23.761Z info [email protected]/service.go:256 Everything is ready. Begin running and processing data. {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}}
otel-collector-1 | 2026-11-02T20:43:23.855676010Z 2026-11-02T20:43:23.855Z info Traces {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "traces", "resource spans": 1, "spans": 1}
otel-collector-1 | 2026-11-02T20:43:23.855687010Z 2026-11-02T20:43:23.855Z info ResourceSpans #0
otel-collector-1 | 2026-11-02T20:43:23.855688177Z Resource SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.855688927Z Resource attributes:
otel-collector-1 | 2026-11-02T20:43:23.855689552Z -> service.name: Str(oss-verify)
otel-collector-1 | 2026-11-02T20:43:23.855690260Z ScopeSpans #0
otel-collector-1 | 2026-11-02T20:43:23.855690927Z ScopeSpans SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.855691593Z InstrumentationScope smoke-test
otel-collector-1 | 2026-11-02T20:43:23.855692260Z Span #0
otel-collector-1 | 2026-11-02T20:43:23.855692843Z Trace ID : 5b8aa5a2d2c872e8321cf37ff5556942
otel-collector-1 | 2026-11-02T20:43:23.855693427Z Parent ID :
otel-collector-1 | 2026-11-02T20:43:23.855693927Z ID : 051581bf3cb55c1e
otel-collector-1 | 2026-11-02T20:43:23.855694427Z Name : smoke-test-span
otel-collector-1 | 2026-11-02T20:43:23.855694927Z Kind : Internal
otel-collector-1 | 2026-11-02T20:43:23.855695510Z Start time : 2018-12-13 14:51:00 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.855696052Z End time : 2018-12-13 14:51:01 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.855722843Z Status code : Unset
otel-collector-1 | 2026-11-02T20:43:23.855724177Z Status message :
otel-collector-1 | 2026-11-02T20:43:23.855724718Z DroppedAttributesCount: 0
otel-collector-1 | 2026-11-02T20:43:23.855725218Z DroppedEventsCount: 0
otel-collector-1 | 2026-11-02T20:43:23.855725718Z DroppedLinksCount: 0
otel-collector-1 | 2026-11-02T20:43:23.855726260Z {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "traces"}
otel-collector-1 | 2026-11-02T20:43:23.855882760Z 2026-11-02T20:43:23.855Z info Metrics {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "metrics", "resource metrics": 1, "metrics": 1, "data points": 1}
otel-collector-1 | 2026-11-02T20:43:23.855905260Z 2026-11-02T20:43:23.855Z info ResourceMetrics #0
otel-collector-1 | 2026-11-02T20:43:23.855906510Z Resource SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.855907052Z Resource attributes:
otel-collector-1 | 2026-11-02T20:43:23.855907510Z -> service.name: Str(oss-verify)
otel-collector-1 | 2026-11-02T20:43:23.855908010Z ScopeMetrics #0
otel-collector-1 | 2026-11-02T20:43:23.855908510Z ScopeMetrics SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.855909010Z InstrumentationScope smoke-test
otel-collector-1 | 2026-11-02T20:43:23.855909510Z Metric #0
otel-collector-1 | 2026-11-02T20:43:23.855909968Z Descriptor:
otel-collector-1 | 2026-11-02T20:43:23.855910427Z -> Name: smoke_gauge
otel-collector-1 | 2026-11-02T20:43:23.855910885Z -> Description:
otel-collector-1 | 2026-11-02T20:43:23.855911343Z -> Unit:
otel-collector-1 | 2026-11-02T20:43:23.855911843Z -> DataType: Gauge
otel-collector-1 | 2026-11-02T20:43:23.855912343Z NumberDataPoints #0
otel-collector-1 | 2026-11-02T20:43:23.855912802Z StartTimestamp: 1970-01-01 00:00:00 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.855913302Z Timestamp: 2018-12-13 14:51:00 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.855913760Z Value: 42
otel-collector-1 | 2026-11-02T20:43:23.855914218Z {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "metrics"}
otel-collector-1 | 2026-11-02T20:43:23.856116343Z 2026-11-02T20:43:23.856Z info Logs {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "logs", "resource logs": 1, "log records": 1}
otel-collector-1 | 2026-11-02T20:43:23.856130093Z 2026-11-02T20:43:23.856Z info ResourceLog #0
otel-collector-1 | 2026-11-02T20:43:23.856130968Z Resource SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.856131510Z Resource attributes:
otel-collector-1 | 2026-11-02T20:43:23.856131968Z -> service.name: Str(oss-verify)
otel-collector-1 | 2026-11-02T20:43:23.856133968Z ScopeLogs #0
otel-collector-1 | 2026-11-02T20:43:23.856134593Z ScopeLogs SchemaURL:
otel-collector-1 | 2026-11-02T20:43:23.856135177Z InstrumentationScope smoke-test
otel-collector-1 | 2026-11-02T20:43:23.856135802Z LogRecord #0
otel-collector-1 | 2026-11-02T20:43:23.856136385Z ObservedTimestamp: 1970-01-01 00:00:00 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.856136968Z Timestamp: 2018-12-13 14:51:00 +0000 UTC
otel-collector-1 | 2026-11-02T20:43:23.856137468Z SeverityText:
otel-collector-1 | 2026-11-02T20:43:23.856137968Z SeverityNumber: Unspecified(0)
otel-collector-1 | 2026-11-02T20:43:23.856138427Z Body: Str(smoke-test log message)
otel-collector-1 | 2026-11-02T20:43:23.856138927Z Trace ID:
otel-collector-1 | 2026-11-02T20:43:23.856139427Z Span ID:
otel-collector-1 | 2026-11-02T20:43:23.856139885Z Flags: 0
otel-collector-1 | 2026-11-02T20:43:23.856140385Z {"resource": {"service.instance.id": "ff31ff35-7559-4ef7-995c-9c88e1b78af5", "service.name": "otelcol", "service.version": "0.164.0"}, "otelcol.component.id": "debug", "otelcol.component.kind": "exporter", "otelcol.signal": "logs"}