mrkeyoor.com_
Sun 04 Oct 03:12 UTC
Dev Toolsevaluationupdated 04 Oct 2026

opentelemetry-go review

OpenTelemetry Go is the official Go API and SDK for recording traces, metrics, and logs, then sending them to an observability system. It gives application code a vendor-neutral instrumentation layer, with exporters for OTLP, Prometheus, stdout, and Zipkin.

Verdict

Our run installed 36 packages in 16 seconds and built commit d7b0371 in 6 seconds, but its Python-oriented harness found no test target for this Go repository. Use OpenTelemetry Go when you need one standard API for traces, metrics, and logs, especially if telemetry may change destinations later. Pair it with the contrib repository, pin each module deliberately, and run the native Go suite in your own release gate.

We ran it

Lab card: what happened when we ran opentelemetry-goScreenshot of opentelemetry-go (opentelemetry.io/docs/languages/go)
Install✓ · 16s36 packages · 39 MB
Build✓ · 6s
Testsn/ano test script
Known vulns0(pip-audit)
Repo1629 files~962,218 lines of source · 33.5 MB · 14 CI workflows

Answers from our run

Does opentelemetry-go build from source?

Dependencies installed in 16 seconds (36 packages), and the build succeeded in 6 seconds. We cloned commit d7b0371 into a clean Debian container with 3 CPUs and no project-specific setup.

Does opentelemetry-go have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does opentelemetry-go have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use opentelemetry-go?

Projects outside Go: this repository is the Go implementation, and other languages have separate OpenTelemetry SDKs.

What are the alternatives to opentelemetry-go?

OpenTelemetry Go Contrib, Prometheus Go client, Sentry Go SDK. Our run installed 36 packages in 16 seconds and built commit d7b0371 in 6 seconds, but its Python-oriented harness found no test target for this Go repository.

Setup3/5Fast lab steps; real setup needs exporters and native Go checks
Docs5/5Clear signal status, compatibility, exporters, and version policy
Community5/56,572 stars and active October 2026 maintenance
Maturity5/5All three signals stable, with explicit module guarantees

Who it’s for

Go teams that want traces, metrics, and logs behind the OpenTelemetry standard.
Library authors who need instrumentation without forcing users onto one observability vendor.
Platform teams sending telemetry through OTLP to a collector or hosted backend.
Maintainers prepared to track stable and experimental Go modules separately.

Who it’s NOT for

Projects outside Go: this repository is the Go implementation, and other languages have separate OpenTelemetry SDKs.
Teams pinned below the currently supported Go window: the README lists Go 1.26 and 1.27 across its guaranteed environments.
Developers expecting framework instrumentation in this checkout: the README directs them to the separate opentelemetry-go-contrib repository.
Buyers who need every package under one stability promise: the versioning policy keeps experimental modules at v0, while stable modules use v1.
Dependency-minimal HTTP exporter users who cannot accept gRPC in the module graph: open issue 2579 documents that transitive dependency.

Setup reality

Our sandbox installed commit d7b0371 in 16 seconds, adding 36 packages and using 39 MB on disk. The measured build passed in 6 seconds. No test script or target was available to that harness, so tests were skipped. Pip-audit found 0 known vulnerabilities.

The lab harness classified the checkout as Python and ran under uv with Python 3.12, while the project itself is a Go module and the current README lists Go 1.26 and 1.27. A real application must also choose an exporter and configure its endpoint, transport, sampling, and any backend authentication.

The core repository does not contain the framework integrations or examples most teams need first; those live in opentelemetry-go-contrib. Stable and experimental modules carry different version numbers, and support guarantees cover only the operating systems, architectures, and Go versions in the compatibility table.

All 3 telemetry signals are stable

OpenTelemetry Go gives Go applications common APIs for traces, metrics, and logs. The SDK records those signals and exporters send them elsewhere. OTLP covers all three, Prometheus exports metrics, stdout handles all three for inspection, and Zipkin handles traces. That split lets application code describe work once while the deployment decides whether data goes to a collector, a local console, or a vendor endpoint.

The October 2 release matters because v1.47.0 is the first stable release of the Logs API and SDK. Traces and metrics were already marked stable, so the README now lists stable status for all 3 signals. This is the point at which a Go team can adopt the main signals under stated compatibility guarantees instead of mixing stable trace and metric APIs with a pre-1.0 logging layer.

Instrumentation lives in a second repository

The core package is lower level than many first-time users expect. It contains APIs, SDKs, propagators, and exporters. Instrumentation for HTTP routers, gRPC, database clients, and other libraries lives in open-telemetry/opentelemetry-go-contrib. The README sends readers there and to a separate examples directory. Installing only this repository leaves you writing spans and meters directly unless your dependencies already emit OpenTelemetry data.

That separation is sensible for maintainers, though it adds version work for adopters. The policy says stable contrib modules follow the core project's stable version, with releases staggered after core. Experimental modules remain at v0 and may make incompatible changes in a minor release. Read the module path and version for every integration you import. A repository release can contain v1.47.0, v0.69.0, v0.23.0, and v0.1.0 packages at once.

What happened when we ran it

Our sandbox installed commit d7b0371 in 16 seconds. The harness added 36 packages, used 39 MB on disk, and completed its build step in 6 seconds. Pip-audit reported 0 known vulnerabilities. The checkout had 1,629 files, roughly 962,218 lines of source, and occupied 33.5 MB in a fresh unprivileged container with 3 CPUs and 8 GB of RAM.

There is an important mismatch in that result. The supplied lab harness classified the checkout as Python and ran inside an uv image with Python 3.12. OpenTelemetry Go is a Go repository, and its current go.mod declares Go 1.26. The harness found no test script or target, so it skipped tests. We will not turn that absence into a claim about the project's native Go tests.

The measured install and build succeeded, but they do not replace go test across the modules your application imports. Our scan counted 14 CI workflow files and found no root Dockerfile or tests directory. Those layout signals do not prove that tests are missing. For an adoption decision, repeat the native Go commands at the pinned module versions and exercise the exporter against your chosen collector.

Go 1.26 and 1.27 define the supported window

The README's compatibility table names Go 1.26 and 1.27 on Ubuntu, macOS, and Windows. It covers amd64 and arm64 on all 3 systems, plus 386 on Ubuntu and Windows. Other systems may work, but the project makes no compatibility guarantee for them. A team on an older Go toolchain has to upgrade or select an older OpenTelemetry release with a matching support window.

OpenTelemetry follows Go's policy of supporting a release until two newer major versions exist. The project adds support for a new Go version in one minor release, then may use the next minor release to stop testing the oldest archived version. That cadence is predictable, but it can move faster than conservative enterprise toolchains. Put Go upgrades beside telemetry module upgrades in the same maintenance plan.

Exporters still need endpoint and failure decisions

Instrumentation does not produce a useful operations system by itself. An application must configure an exporter, endpoint, transport, sampling policy, resource attributes, and shutdown behavior. A hosted destination may also require credentials. Sending OTLP directly from every process is possible, while a collector can buffer, route, and transform data outside the application. The right choice depends on how you handle backpressure and outages.

Open issue 2579 shows a smaller packaging cost: the OTLP HTTP trace modules import gRPC through shared configuration. The report was opened in 2022 and was still active on October 1, 2026. If a strict module graph is part of the reason you picked HTTP, inspect go mod graph before accepting the dependency. Open issue 9055 also documents that disabling gRPC exporter compression through code reported an error in v1.46.0, even though it produced no compression.

v1.47.0 fixes production-shaped failures

Release v1.47.0 fixed a data race in the periodic metric reader, precision loss for large int64 metric values, a trace error-recording deadlock, and a nil-exporter shutdown panic. It also set a default maximum depth of 64 for composite attribute values. These are specific failure modes in concurrent services, and their presence in one release shows why telemetry libraries deserve the same upgrade discipline as networking code.

GitHub showed 6,572 stars and 160 combined open issues and pull requests on October 4, 2026. The last push was October 3, one day after v1.47.0. That pace and the detailed versioning policy point to an actively maintained project. The decision is still narrow: use the core SDK when vendor-neutral telemetry across 3 signals is worth coordinating core, contrib, exporter, collector, and Go versions.

Alternatives

ProjectWhat it isPick it when
OpenTelemetry Go ContribThe companion repository for Go framework instrumentation, detectors, and integrations.pick this alongside the core SDK when you need ready-made HTTP, gRPC, database, or framework hooks.
Prometheus Go clientA Go client focused on exposing and pushing Prometheus metrics.pick this instead when Prometheus metrics are the whole job and traces or logs are out of scope.
Sentry Go SDKA Go SDK tied to Sentry's error and performance monitoring service.pick this instead when Sentry is already the destination and direct product integration matters more than vendor neutrality.

What people are saying

  1. [github-trending] open-telemetry/opentelemetry-go

Sources

  1. OpenTelemetry Go README
  2. OpenTelemetry Go versioning policy
  3. OpenTelemetry Go v1.47.0 release
  4. OTLP HTTP gRPC dependency issue
  5. gRPC compression configuration issue

More dev tools reviews

dev-sidecar · responsively-app · AnyPS5 · benilla · pi-gui · toolkit · the whole board →