Skip to main content
Cloud DevOps Solutions
Get a quote Talk to an engineer

Observability and monitoring

OpenTelemetry Consulting and Engineering for Vendor-Neutral Observability

OpenTelemetry is an open, vendor-neutral standard and set of SDKs for producing traces, metrics and logs, plus a Collector that processes and routes them. We instrument services, build Collector pipelines and sampling, and send data to the backends you choose, so you avoid lock-in to one vendor's agent.

Key takeaways

  • OpenTelemetry standardises how telemetry is produced and transported. It is not a backend and does not store or display data.
  • The Collector is the control point: it lets you batch, filter, redact, sample and route data without changing application code.
  • Auto-instrumentation gets you started quickly, but useful traces still need good span names and a few deliberate custom attributes.
  • Sampling decisions drive cost and visibility, so they deserve design, not defaults.
  • Maturity differs by signal and language, so check the status of what you plan to use.

What teams use OpenTelemetry for

Distributed tracing across microservices

Follow a request through gateways, services, queues and databases to find where latency or errors originate.

Vendor-neutral instrumentation

Instrument once and send the same telemetry to Tempo, Jaeger, Prometheus, Datadog or another backend.

Central telemetry pipelines

Collectors enrich, filter and redact data before it leaves your network.

Migrating between monitoring vendors

Run old and new backends in parallel by routing from the Collector instead of re-instrumenting applications.

Correlating logs, metrics and traces

Shared resource attributes and trace IDs link the three signals during investigation.

What OpenTelemetry is and why teams adopt it

OpenTelemetry is the common language for telemetry. It defines how applications describe traces, metrics and logs, provides SDKs for most popular languages, and ships a Collector that moves the data on. It deliberately stops there. There is no storage and no user interface, which is exactly why teams like it: instrument your code once, then choose and change backends without touching it again.

The usual reason for adopting it is lock-in. A proprietary agent embeds a vendor’s format and behaviour in every service, and switching later means re-instrumenting. With OpenTelemetry the instrumentation stays, and only Collector configuration changes. A second reason is trace quality: a single standard for context propagation means a request flowing through Java, Go and Node services still forms one trace. Our OpenTelemetry distributed tracing guide walks through a typical rollout, and the logging and telemetry service describes the engagement.

How we run OpenTelemetry in production

Collector topology

We usually run two tiers. A lightweight Collector as a DaemonSet or sidecar sits near workloads, receiving OTLP and adding Kubernetes metadata. A gateway Collector deployment behind a service does the heavier work: tail sampling, redaction and fan-out to backends. This keeps application configuration trivial (a single OTLP endpoint) and puts policy in one place.

A trimmed gateway pipeline looks like this:

receivers:
  otlp:
    protocols:
      grpc: {}
processors:
  memory_limiter:
    check_interval: 1s
    limit_percentage: 75
  batch: {}
exporters:
  otlp/tempo:
    endpoint: tempo-distributor.tracing:4317
    tls:
      insecure: true
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [otlp/tempo]

The insecure TLS setting there is for an in-cluster example only. In production we enable TLS between tiers, and the memory limiter should always come first in a pipeline so back-pressure protects the Collector.

Instrumentation

Auto-instrumentation, through language agents or the Kubernetes Operator’s injection, produces spans for HTTP, gRPC, database and messaging calls. It is a good first week. After that, readability matters: span names should describe an operation (for example a route template, not a raw URL), and a few attributes such as tenant, plan or order type make traces searchable for business questions. We avoid putting personal data or unbounded values in attributes.

Correlation across signals

Traces become far more useful when logs and metrics line up with them. We inject trace and span IDs into structured logs, and keep resource attributes such as service name, namespace and version consistent across signals. Our write-up on trace and log correlation shows how this lets you jump from a slow span to the exact log lines.

Choosing trace storage

OpenTelemetry does not decide where traces live. Grafana Tempo and Jaeger are the common self-hosted choices, with Tempo favouring object storage and low cost, and Jaeger offering a mature UI and multiple backends. Metrics can flow to Prometheus and logs to Grafana Loki through the same Collector.

Sampling

Tracing everything is rarely affordable. Head sampling, configured in the SDK, keeps a fixed share of traces and is cheap. Tail sampling in the gateway waits until a trace completes and keeps all errors and slow requests plus a sample of the rest. Tail sampling needs all spans for a trace to reach the same Collector instance, so we place a load-balancing exporter in front of it. We decide the policy together with you, based on what incidents you need to explain, rather than copying a default.

Security and access

Telemetry can contain sensitive data: URLs with tokens, SQL statements, headers and user identifiers. We apply redaction and attribute filtering in the Collector, disable capture of request bodies, and restrict who can query traces. Transport between tiers uses TLS and authentication, and Collector endpoints are not exposed publicly. Credentials for backends are held in secrets rather than configuration files in Git.

Cost and capacity

OpenTelemetry is free software; costs come from Collector compute, network transfer and, above all, the volume your backend stores or bills for. Sampling, attribute discipline and dropping low-value spans such as health checks are the main controls. If you send data to a commercial platform, check how it prices ingested spans, custom metrics and logs before you widen collection.

Day-2 operations and failure modes

Common issues include broken context propagation through a queue or an unsupported library, Collector out-of-memory events during bursts, exploding metric cardinality from careless attributes and version drift between SDKs and the Collector. We run Collectors with limits and autoscaling, monitor their own metrics (dropped spans, queue length, export failures), pin versions and test upgrades. Because the project moves quickly and signal maturity varies, we check stability status for each component before relying on it.

Rolling it out without a big bang

Re-instrumenting everything at once is a mistake. We start with the services on the critical user path, enable auto-instrumentation, and confirm that traces connect across each hop before adding more. Gateways, message queues and background jobs are where context most often breaks, so we test those explicitly.

Where a vendor agent is already in place, the Collector can sit beside it during the transition, so both old and new pipelines receive data and engineers can compare them. Once confidence builds, the old agent is removed service by service. This keeps the change reversible and avoids a flag day.

When not to choose OpenTelemetry

If you have a handful of services, one cloud and are happy with a single vendor’s agent, adopting a vendor’s own tooling such as Datadog can be quicker, though you can still use OpenTelemetry later. Metrics-only needs are well served by Prometheus alone. If you want to explore a staged rollout, book a consultation.

Official documentation: opentelemetry.io

How we work with OpenTelemetry

  1. 01

    Map services and goals

    We list languages, frameworks, current agents and the questions tracing should answer first.

  2. 02

    Choose backends and topology

    We decide where traces, metrics and logs land and whether Collectors run as agents, gateways or both.

  3. 03

    Instrument services

    Auto-instrumentation is enabled where mature, and manual spans and attributes are added for business-critical paths.

  4. 04

    Build Collector pipelines

    Receivers, processors and exporters are configured with batching, memory limits, redaction and routing.

  5. 05

    Design sampling

    We combine head and tail sampling to keep errors and slow requests while controlling volume.

  6. 06

    Validate and hand over

    We verify context propagation, tune volume and document conventions for your engineers.

OpenTelemetry compared with the alternatives

We recommend the tool that fits your team, not the one we know best. Here is when each option makes sense.

OptionChoose it when
OpenTelemetryOpenTelemetry is an open, vendor-neutral standard and set of SDKs for producing traces, metrics and logs, plus a Collector that processes and routes them.
Vendor agents (Datadog, New Relic)Choose a vendor agent if you commit to one platform and value its turnkey auto-instrumentation and support over portability.
Jaeger client libraries or ZipkinChoose these only for existing estates already built on them, as new work is generally directed towards OpenTelemetry.
Prometheus client librariesChoose them for metrics-only needs on a Prometheus stack where traces are not yet required.
Cloud native tracing (AWS X-Ray, Azure Application Insights)Choose them for small single-cloud workloads where native integration is enough, though OpenTelemetry can often feed them too.

Tools we use alongside OpenTelemetry

OpenTelemetry CollectorGrafana TempoJaegerPrometheusGrafana LokiGrafanaDatadogElasticsearchKafkaKubernetes OperatorFluent BitHelm

Frequently asked questions

What is OpenTelemetry?
OpenTelemetry is a Cloud Native Computing Foundation project that defines APIs, SDKs, a wire protocol (OTLP) and a Collector for traces, metrics and logs. It standardises how applications emit telemetry so you can send it to any compatible backend instead of being tied to one vendor's proprietary agent.
Is OpenTelemetry a replacement for Prometheus or Datadog?
No. OpenTelemetry produces and transports telemetry but does not store or visualise it. You still need backends such as Prometheus, Tempo, Loki, Elasticsearch or a commercial platform. It can feed all of them, which is its main benefit.
What is the OpenTelemetry Collector?
The Collector is a standalone service that receives telemetry, processes it and exports it to one or more destinations. Processors can batch, filter, add attributes, redact sensitive data and sample. Running it between applications and backends gives you central control without changing application code.
Head sampling or tail sampling?
Head sampling decides when a trace starts, is cheap and simple, but cannot know if the trace will fail. Tail sampling decides after seeing the whole trace, so it can keep errors and slow requests, but needs more memory and a routing layer. Many teams combine both.
Should we use auto-instrumentation?
Yes as a starting point. It captures HTTP, database and messaging spans with little effort. Then add manual spans and attributes for business operations, and review span names so traces are readable. Coverage and maturity differ by language, so we test each service type.
How much overhead does OpenTelemetry add?
It adds some CPU, memory and network use, which varies with language, sampling rate and exporter settings. We keep it modest with batching, sensible sampling and Collector memory limits, and we measure the effect on your own services instead of assuming a figure.

Talk to an engineer about OpenTelemetry

Book a free 30-minute call. We review your current setup and tell you honestly whether and how we can help.

Written by Saddique Khan, DevOps / SRE / Cloud Consultant Engineer. Last updated 2026-10-09.