DEV Community

Alex Spinov
Alex Spinov

Posted on

OpenTelemetry Has a Free API — Unified Observability for Any Stack

OpenTelemetry: One Standard for Traces, Metrics, and Logs

OpenTelemetry (OTel) is the CNCF standard for observability. Instrument once, export to any backend — Jaeger, Prometheus, Grafana, Datadog, New Relic. No vendor lock-in.

Why OpenTelemetry

  • One SDK for traces + metrics + logs
  • Auto-instrumentation for 20+ languages
  • Vendor-neutral — switch backends without code changes
  • CNCF graduated project (same level as K8s)

The Free API

Python Auto-Instrumentation

pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install

# Run any Python app with auto-instrumentation
opentelemetry-instrument \
  --service_name my-api \
  --exporter_otlp_endpoint http://localhost:4317 \
  python app.py
Enter fullscreen mode Exit fullscreen mode

Manual Instrumentation

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
trace.set_tracer_provider(provider)

tracer = trace.get_tracer("my-app")

with tracer.start_as_current_span("process-order") as span:
    span.set_attribute("order.id", "12345")
    span.set_attribute("order.amount", 99.99)
    # Your code here
    with tracer.start_as_current_span("validate-payment"):
        pass  # Child span
Enter fullscreen mode Exit fullscreen mode

Collector Config

receivers:
  otlp:
    protocols:
      grpc: { endpoint: 0.0.0.0:4317 }
      http: { endpoint: 0.0.0.0:4318 }

processors:
  batch: { timeout: 5s }

exporters:
  jaeger: { endpoint: jaeger:14250 }
  prometheus: { endpoint: 0.0.0.0:8889 }

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [jaeger]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheus]
Enter fullscreen mode Exit fullscreen mode

Real-World Use Case

A company used Datadog for tracing and Prometheus for metrics. Different SDKs, different configs, $40K/year. OTel migration: one SDK, export to self-hosted Jaeger + Prometheus. Same visibility, 70% cost reduction.

Quick Start

docker run -p 4317:4317 -p 4318:4318 otel/opentelemetry-collector:latest
Enter fullscreen mode Exit fullscreen mode

Resources


Need observability data automation? Check out my tools on Apify or email spinov001@gmail.com.

Top comments (0)