Skip to content

Commit 42cacda

Browse files
danielgblancopdelewskichalinsvrnm
authored
Add blog post on Go Compile-Time Instrumentation SIG (open-telemetry#5956)
Co-authored-by: Przemyslaw Delewski <[email protected]> Co-authored-by: Patrice Chalin <[email protected]> Co-authored-by: Severin Neumann <[email protected]>
1 parent b60cf33 commit 42cacda

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
---
2+
title:
3+
Alibaba, Datadog, and Quesma Join Forces on Go Compile-Time Instrumentation
4+
linkTitle: Go Compile-Time Instrumentation
5+
date: 2025-01-24
6+
author: OpenTelemetry Governance Committee
7+
issue: https://github.com/open-telemetry/community/issues/2509
8+
sig: Governance Committee
9+
cSpell:ignore: instrgen quesma toolexec
10+
---
11+
12+
Standards are only useful if they're widely adopted, and adoption is only
13+
effective if the available tooling facilitates it. I imagine
14+
[SI units](https://en.wikipedia.org/wiki/International_System_of_Units) would
15+
not have been too popular when they were introduced if you had to build your own
16+
scales to weigh things in Kilograms!
17+
18+
If you use [OpenTelemetry in Go](/docs/languages/go/), you'll be familiar with
19+
the challenges of configuring instrumentation libraries to automatically
20+
generate telemetry from well-known open source components. Due to the compiled
21+
nature of the language, you currently have two options[^1]:
22+
23+
- Use a separate binary that analyzes your Go process and attaches eBPF programs
24+
to hooks in your application &mdash; see
25+
[opentelemetry-go-instrumentation](https://github.com/open-telemetry/opentelemetry-go-instrumentation/).
26+
- Manually configure instrumentation libraries in your code, for example see
27+
[Instrument the HTTP server](/docs/languages/go/getting-started/#instrument-the-http-server).
28+
29+
For different reasons, it is possible that none of those options is viable, or
30+
optimal, in your environment. However, things are about to change!
31+
32+
## Industry collaboration at the heart of open standards
33+
34+
Over the past few months, OpenTelemetry has received not one, but two donation
35+
proposals from industry leaders to provide a solution to the problem described
36+
above, and enable the use of zero-code, vendor-neutral, compile-time
37+
instrumentation in Go applications. These are:
38+
39+
- Alibaba's
40+
[donation proposal](https://github.com/open-telemetry/community/issues/2344)
41+
of
42+
[opentelemetry-go-auto-instrumentation](https://github.com/alibaba/opentelemetry-go-auto-instrumentation)
43+
- Datadog's
44+
[donation proposal](https://github.com/open-telemetry/community/issues/2497)
45+
of [Orchestrion](https://github.com/datadog/orchestrion)
46+
47+
We are very grateful to Alibaba and Datadog for these donation proposals. This
48+
continues to demonstrate the convergence of the wider industry towards the
49+
standards defined by OpenTelemetry.
50+
51+
Compile-time instrumentation leverages the standard Go toolchain’s `-toolexec`
52+
mechanism to re-write Go source code before it is passed to the Go compiler,
53+
adding instrumentation in all relevant places (including dependencies as well as
54+
the Go standard library).
55+
56+
The most exciting part of this announcement is that it won't be Alibaba's or
57+
Datadog's solution that "wins". In the true spirit of open source collaboration,
58+
these two organizations have decided to join forces and commit the necessary
59+
resources to bootstrap a new
60+
[Go Compile-Time Instrumentation SIG](https://github.com/open-telemetry/community/blob/main/projects/go-compile-instrumentation.md),
61+
with the intention of providing a unified, vendor-neutral approach that picks
62+
the best aspects of each solution and benefits the community as a whole. They
63+
will be supported with further contributions from Quesma, bringing in experience
64+
on
65+
[instrgen](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/dafdad14b7858c7f491c8cb72e4bc7deaf9378e3/instrgen/README.md),
66+
OpenTelemetry's initial experimental approach to provide Go compile-time
67+
instrumentation based on `-toolexec` and which will be superseded as part of the
68+
initial efforts of this SIG.
69+
70+
In the longer term, this SIG will focus on:
71+
72+
- Developing compiler plugins or enhancements that inject instrumentation code
73+
automatically, ensuring minimal runtime performance overhead and compatibility
74+
with existing Go projects.
75+
- Providing standardized instrumentation patterns aligned with OpenTelemetry and
76+
other monitoring frameworks.
77+
78+
If you are interested in contributing, or you simply want to find out more,
79+
here's some useful information about the SIG:
80+
81+
- GitHub repository:
82+
[opentelemetry-go-compile-instrumentation](https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation)
83+
- CNCF Slack:
84+
[#otel-go-compt-instr-sig](https://cloud-native.slack.com/archives/C088D8GSSSF)
85+
- Meetings: Every other Thursday UTC: 08:00 – 09:00 (subscribe to
86+
[this Google Group](https://groups.google.com/a/opentelemetry.io/g/calendar-go)
87+
for calendar invites, or read more about
88+
[our community calendar](https://github.com/open-telemetry/community/?tab=readme-ov-file#calendar))
89+
90+
We look forward to seeing this new SIG in operation, and cannot wait for the
91+
fruits of this awesome collaboration!
92+
93+
[^1]:
94+
Unless you want to "build your own scales", or the OTel equivalent, which is
95+
manually instrumenting third-party libraries.

static/refcache.json

+40
Original file line numberDiff line numberDiff line change
@@ -1823,6 +1823,10 @@
18231823
"StatusCode": 200,
18241824
"LastSeen": "2024-08-20T08:40:41.563366481Z"
18251825
},
1826+
"https://cloud-native.slack.com/archives/C088D8GSSSF": {
1827+
"StatusCode": 200,
1828+
"LastSeen": "2025-01-17T12:58:36.720595Z"
1829+
},
18261830
"https://cloud-native.slack.com/archives/CJFCJHG4Q": {
18271831
"StatusCode": 200,
18281832
"LastSeen": "2024-08-09T10:45:09.309237-04:00"
@@ -3347,6 +3351,10 @@
33473351
"StatusCode": 200,
33483352
"LastSeen": "2025-01-06T11:23:54.720969-05:00"
33493353
},
3354+
"https://en.wikipedia.org/wiki/International_System_of_Units": {
3355+
"StatusCode": 200,
3356+
"LastSeen": "2025-01-17T12:58:25.584113Z"
3357+
},
33503358
"https://en.wikipedia.org/wiki/JSON": {
33513359
"StatusCode": 200,
33523360
"LastSeen": "2025-01-06T11:23:32.692041-05:00"
@@ -4307,6 +4315,10 @@
43074315
"StatusCode": 200,
43084316
"LastSeen": "2024-08-06T15:18:42.027775+02:00"
43094317
},
4318+
"https://github.com/alibaba/opentelemetry-go-auto-instrumentation": {
4319+
"StatusCode": 206,
4320+
"LastSeen": "2025-01-17T12:58:30.442533Z"
4321+
},
43104322
"https://github.com/alolita": {
43114323
"StatusCode": 206,
43124324
"LastSeen": "2025-01-13T12:11:00.000033-05:00"
@@ -4863,6 +4875,10 @@
48634875
"StatusCode": 206,
48644876
"LastSeen": "2025-01-13T12:41:52.17647-05:00"
48654877
},
4878+
"https://github.com/datadog/orchestrion": {
4879+
"StatusCode": 206,
4880+
"LastSeen": "2025-01-17T12:58:33.133351Z"
4881+
},
48664882
"https://github.com/dattto": {
48674883
"StatusCode": 200,
48684884
"LastSeen": "2024-12-17T15:37:33.267299-05:00"
@@ -6439,6 +6455,10 @@
64396455
"StatusCode": 206,
64406456
"LastSeen": "2025-01-16T14:23:17.554218-05:00"
64416457
},
6458+
"https://github.com/open-telemetry/community/blob/main/projects/go-compile-instrumentation.md": {
6459+
"StatusCode": 206,
6460+
"LastSeen": "2025-01-18T20:45:35.792292Z"
6461+
},
64426462
"https://github.com/open-telemetry/community/blob/main/reports/ADA_Logics-collector-fuzzing-audit-2024.pdf": {
64436463
"StatusCode": 206,
64446464
"LastSeen": "2025-01-16T14:23:17.415384-05:00"
@@ -6487,6 +6507,14 @@
64876507
"StatusCode": 200,
64886508
"LastSeen": "2024-10-15T15:52:36.027937+01:00"
64896509
},
6510+
"https://github.com/open-telemetry/community/issues/2344": {
6511+
"StatusCode": 206,
6512+
"LastSeen": "2025-01-18T20:45:29.87596Z"
6513+
},
6514+
"https://github.com/open-telemetry/community/issues/2497": {
6515+
"StatusCode": 206,
6516+
"LastSeen": "2025-01-18T20:45:32.577654Z"
6517+
},
64906518
"https://github.com/open-telemetry/community/issues/828": {
64916519
"StatusCode": 206,
64926520
"LastSeen": "2025-01-13T11:43:27.58776-05:00"
@@ -8803,10 +8831,18 @@
88038831
"StatusCode": 206,
88048832
"LastSeen": "2025-01-07T10:33:12.688711-05:00"
88058833
},
8834+
"https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation": {
8835+
"StatusCode": 206,
8836+
"LastSeen": "2025-01-17T12:58:34.746413Z"
8837+
},
88068838
"https://github.com/open-telemetry/opentelemetry-go-contrib": {
88078839
"StatusCode": 206,
88088840
"LastSeen": "2025-01-07T10:31:43.730419-05:00"
88098841
},
8842+
"https://github.com/open-telemetry/opentelemetry-go-contrib/blob/dafdad14b7858c7f491c8cb72e4bc7deaf9378e3/instrgen/README.md": {
8843+
"StatusCode": 206,
8844+
"LastSeen": "2025-01-17T13:21:30.685258Z"
8845+
},
88108846
"https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CONTRIBUTING.md#code-owners": {
88118847
"StatusCode": 206,
88128848
"LastSeen": "2025-01-16T11:38:11.841222-05:00"
@@ -14367,6 +14403,10 @@
1436714403
"StatusCode": 200,
1436814404
"LastSeen": "2024-06-18T10:36:39.590318+02:00"
1436914405
},
14406+
"https://groups.google.com/a/opentelemetry.io/g/calendar-go": {
14407+
"StatusCode": 200,
14408+
"LastSeen": "2025-01-17T12:58:38.699931Z"
14409+
},
1437014410
"https://groups.google.com/a/opentelemetry.io/g/calendar-maintainer-meeting": {
1437114411
"StatusCode": 200,
1437214412
"LastSeen": "2024-06-18T10:36:41.220362+02:00"

0 commit comments

Comments
 (0)