From 42cacdab5284f659b37448e03814cdcab353faf5 Mon Sep 17 00:00:00 2001 From: Daniel Gomez Blanco Date: Fri, 24 Jan 2025 06:50:03 +0000 Subject: [PATCH] Add blog post on Go Compile-Time Instrumentation SIG (#5956) Co-authored-by: Przemyslaw Delewski <102958445+pdelewski@users.noreply.github.com> Co-authored-by: Patrice Chalin Co-authored-by: Severin Neumann --- .../2025/go-compile-time-instrumentation.md | 95 +++++++++++++++++++ static/refcache.json | 40 ++++++++ 2 files changed, 135 insertions(+) create mode 100644 content/en/blog/2025/go-compile-time-instrumentation.md diff --git a/content/en/blog/2025/go-compile-time-instrumentation.md b/content/en/blog/2025/go-compile-time-instrumentation.md new file mode 100644 index 000000000000..d7d13f0b3ee6 --- /dev/null +++ b/content/en/blog/2025/go-compile-time-instrumentation.md @@ -0,0 +1,95 @@ +--- +title: + Alibaba, Datadog, and Quesma Join Forces on Go Compile-Time Instrumentation +linkTitle: Go Compile-Time Instrumentation +date: 2025-01-24 +author: OpenTelemetry Governance Committee +issue: https://github.com/open-telemetry/community/issues/2509 +sig: Governance Committee +cSpell:ignore: instrgen quesma toolexec +--- + +Standards are only useful if they're widely adopted, and adoption is only +effective if the available tooling facilitates it. I imagine +[SI units](https://en.wikipedia.org/wiki/International_System_of_Units) would +not have been too popular when they were introduced if you had to build your own +scales to weigh things in Kilograms! + +If you use [OpenTelemetry in Go](/docs/languages/go/), you'll be familiar with +the challenges of configuring instrumentation libraries to automatically +generate telemetry from well-known open source components. Due to the compiled +nature of the language, you currently have two options[^1]: + +- Use a separate binary that analyzes your Go process and attaches eBPF programs + to hooks in your application — see + [opentelemetry-go-instrumentation](https://github.com/open-telemetry/opentelemetry-go-instrumentation/). +- Manually configure instrumentation libraries in your code, for example see + [Instrument the HTTP server](/docs/languages/go/getting-started/#instrument-the-http-server). + +For different reasons, it is possible that none of those options is viable, or +optimal, in your environment. However, things are about to change! + +## Industry collaboration at the heart of open standards + +Over the past few months, OpenTelemetry has received not one, but two donation +proposals from industry leaders to provide a solution to the problem described +above, and enable the use of zero-code, vendor-neutral, compile-time +instrumentation in Go applications. These are: + +- Alibaba's + [donation proposal](https://github.com/open-telemetry/community/issues/2344) + of + [opentelemetry-go-auto-instrumentation](https://github.com/alibaba/opentelemetry-go-auto-instrumentation) +- Datadog's + [donation proposal](https://github.com/open-telemetry/community/issues/2497) + of [Orchestrion](https://github.com/datadog/orchestrion) + +We are very grateful to Alibaba and Datadog for these donation proposals. This +continues to demonstrate the convergence of the wider industry towards the +standards defined by OpenTelemetry. + +Compile-time instrumentation leverages the standard Go toolchain’s `-toolexec` +mechanism to re-write Go source code before it is passed to the Go compiler, +adding instrumentation in all relevant places (including dependencies as well as +the Go standard library). + +The most exciting part of this announcement is that it won't be Alibaba's or +Datadog's solution that "wins". In the true spirit of open source collaboration, +these two organizations have decided to join forces and commit the necessary +resources to bootstrap a new +[Go Compile-Time Instrumentation SIG](https://github.com/open-telemetry/community/blob/main/projects/go-compile-instrumentation.md), +with the intention of providing a unified, vendor-neutral approach that picks +the best aspects of each solution and benefits the community as a whole. They +will be supported with further contributions from Quesma, bringing in experience +on +[instrgen](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/dafdad14b7858c7f491c8cb72e4bc7deaf9378e3/instrgen/README.md), +OpenTelemetry's initial experimental approach to provide Go compile-time +instrumentation based on `-toolexec` and which will be superseded as part of the +initial efforts of this SIG. + +In the longer term, this SIG will focus on: + +- Developing compiler plugins or enhancements that inject instrumentation code + automatically, ensuring minimal runtime performance overhead and compatibility + with existing Go projects. +- Providing standardized instrumentation patterns aligned with OpenTelemetry and + other monitoring frameworks. + +If you are interested in contributing, or you simply want to find out more, +here's some useful information about the SIG: + +- GitHub repository: + [opentelemetry-go-compile-instrumentation](https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation) +- CNCF Slack: + [#otel-go-compt-instr-sig](https://cloud-native.slack.com/archives/C088D8GSSSF) +- Meetings: Every other Thursday UTC: 08:00 – 09:00 (subscribe to + [this Google Group](https://groups.google.com/a/opentelemetry.io/g/calendar-go) + for calendar invites, or read more about + [our community calendar](https://github.com/open-telemetry/community/?tab=readme-ov-file#calendar)) + +We look forward to seeing this new SIG in operation, and cannot wait for the +fruits of this awesome collaboration! + +[^1]: + Unless you want to "build your own scales", or the OTel equivalent, which is + manually instrumenting third-party libraries. diff --git a/static/refcache.json b/static/refcache.json index a121f914c5d6..8ed4f6ba8dc7 100644 --- a/static/refcache.json +++ b/static/refcache.json @@ -1823,6 +1823,10 @@ "StatusCode": 200, "LastSeen": "2024-08-20T08:40:41.563366481Z" }, + "https://cloud-native.slack.com/archives/C088D8GSSSF": { + "StatusCode": 200, + "LastSeen": "2025-01-17T12:58:36.720595Z" + }, "https://cloud-native.slack.com/archives/CJFCJHG4Q": { "StatusCode": 200, "LastSeen": "2024-08-09T10:45:09.309237-04:00" @@ -3347,6 +3351,10 @@ "StatusCode": 200, "LastSeen": "2025-01-06T11:23:54.720969-05:00" }, + "https://en.wikipedia.org/wiki/International_System_of_Units": { + "StatusCode": 200, + "LastSeen": "2025-01-17T12:58:25.584113Z" + }, "https://en.wikipedia.org/wiki/JSON": { "StatusCode": 200, "LastSeen": "2025-01-06T11:23:32.692041-05:00" @@ -4307,6 +4315,10 @@ "StatusCode": 200, "LastSeen": "2024-08-06T15:18:42.027775+02:00" }, + "https://github.com/alibaba/opentelemetry-go-auto-instrumentation": { + "StatusCode": 206, + "LastSeen": "2025-01-17T12:58:30.442533Z" + }, "https://github.com/alolita": { "StatusCode": 206, "LastSeen": "2025-01-13T12:11:00.000033-05:00" @@ -4863,6 +4875,10 @@ "StatusCode": 206, "LastSeen": "2025-01-13T12:41:52.17647-05:00" }, + "https://github.com/datadog/orchestrion": { + "StatusCode": 206, + "LastSeen": "2025-01-17T12:58:33.133351Z" + }, "https://github.com/dattto": { "StatusCode": 200, "LastSeen": "2024-12-17T15:37:33.267299-05:00" @@ -6439,6 +6455,10 @@ "StatusCode": 206, "LastSeen": "2025-01-16T14:23:17.554218-05:00" }, + "https://github.com/open-telemetry/community/blob/main/projects/go-compile-instrumentation.md": { + "StatusCode": 206, + "LastSeen": "2025-01-18T20:45:35.792292Z" + }, "https://github.com/open-telemetry/community/blob/main/reports/ADA_Logics-collector-fuzzing-audit-2024.pdf": { "StatusCode": 206, "LastSeen": "2025-01-16T14:23:17.415384-05:00" @@ -6487,6 +6507,14 @@ "StatusCode": 200, "LastSeen": "2024-10-15T15:52:36.027937+01:00" }, + "https://github.com/open-telemetry/community/issues/2344": { + "StatusCode": 206, + "LastSeen": "2025-01-18T20:45:29.87596Z" + }, + "https://github.com/open-telemetry/community/issues/2497": { + "StatusCode": 206, + "LastSeen": "2025-01-18T20:45:32.577654Z" + }, "https://github.com/open-telemetry/community/issues/828": { "StatusCode": 206, "LastSeen": "2025-01-13T11:43:27.58776-05:00" @@ -8803,10 +8831,18 @@ "StatusCode": 206, "LastSeen": "2025-01-07T10:33:12.688711-05:00" }, + "https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation": { + "StatusCode": 206, + "LastSeen": "2025-01-17T12:58:34.746413Z" + }, "https://github.com/open-telemetry/opentelemetry-go-contrib": { "StatusCode": 206, "LastSeen": "2025-01-07T10:31:43.730419-05:00" }, + "https://github.com/open-telemetry/opentelemetry-go-contrib/blob/dafdad14b7858c7f491c8cb72e4bc7deaf9378e3/instrgen/README.md": { + "StatusCode": 206, + "LastSeen": "2025-01-17T13:21:30.685258Z" + }, "https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CONTRIBUTING.md#code-owners": { "StatusCode": 206, "LastSeen": "2025-01-16T11:38:11.841222-05:00" @@ -14367,6 +14403,10 @@ "StatusCode": 200, "LastSeen": "2024-06-18T10:36:39.590318+02:00" }, + "https://groups.google.com/a/opentelemetry.io/g/calendar-go": { + "StatusCode": 200, + "LastSeen": "2025-01-17T12:58:38.699931Z" + }, "https://groups.google.com/a/opentelemetry.io/g/calendar-maintainer-meeting": { "StatusCode": 200, "LastSeen": "2024-06-18T10:36:41.220362+02:00"