eBPF-Based Instrumentation is currently the default setting of Odigos Open-Source version, and is also available with the Odigos Enterprise plan.

Native Instrumentation is currently not supported for this language.

Supported Versions

Odigos uses the official opentelemetry-go-instrumentation OpenTelemetry Auto Instrumentation using eBPF, thus it supports the same golang versions as this project.

  • Go runtime versions 1.17 and above are supported.

Odigos Enterprise data collection is done using eBPF, so Odigos requires, at minimum, platforms that have underlying Linux kernel versions of 5.4.0.

Traces

Odigos will automatically instrument your golang services to record and collect spans for distributed tracing, by utilizing the OpenTelemetry Go official auto Instrumentation Libraries.

Instrumentation Libraries

The following go modules will be auto instrumented by Odigos:

HTTP Frameworks

Please note that in order for the http.route parameter to be properly extracted by Go auto instrumentation, you should use Go 1.22 or above and declare a template handler as described in this article.

HTTP Clients

  • net/http go standard library for http server and client

Database Clients, ORMs, and data access libraries

Messaging Systems Clients

RPC (Remote Procedure Call)

Please note that modules marked with ⭐️ are available in Odigos pro only.

About Go Offsets

Auto-instrumentation for Go with eBPF works by using eBPF uprobes to dynamically read variables in memory at runtime. For example, when instrumenting the net/http package Odigos is able to determine the http.request.method by probing the Method field in the current Request.

Doing so relies on knowing the exact memory location of this field. This is known as the field’s “offset” (because it refers to the field’s location as a number of bytes offset from the start of the current struct). With this information, our eBPF code can access the value directly.

However, most production Go programs do not preserve this offset information at compile time. Only Go programs compiled with debug information will include this information by default. To work with all Go programs, Odigos ships with a precompiled list of known offsets for all currently supported versions of instrumented libraries.

This precompiled list is updated to be up-to-date with every release of Odigos. But, this means that you may encounter errors instrumenting applications that use very newly released versions of dependencies. If this occurs, it will be resolved by updating to the next release of Odigos.