Анонс v1 OpenTelemetry Go Compile-Time Instrumentation

Якщо ви пишете на Java, Python, Node.js або .NET, ви вже давно можете додавати OpenTelemetry до застосунку без редагування його коду: приєднайте агент під час запуску, і телеметрія почне надходити. Go був винятком. Програма на Go компілюється в єдиний статичний бінарний файл без середовища виконання, до якого можна підʼєднатися під час запуску, тому розробникам Go доводилося виконувати інструментування вручну або використовувати зовнішній eBPF-агент.

Ця прогалина закривається. Спільнота OpenTelemetry оголошує про перший стабільний реліз OpenTelemetry Go Compile-Time Instrumentation. Коли ми анонсували цю SIG на початку 2025 року, Alibaba та Datadog обʼєднали зусилля, щоб створити єдиний, незалежний від постачальників спосіб інструментування Go під час збірки. v1 — це перший стабільний реліз цього проєкту.

Якщо ви збираєте та запускаєте Go-сервіси, ви можете змінити один рядок у тому, як ви збираєте свій бінарний файл або образ контейнера, і отримати трасування та метрики OpenTelemetry для вашого застосунку та його залежностей без змін коду. Для інженера платформи або SRE це означає, що ви можете додати спостережуваність до сервісів у вашому парку, не чекаючи, поки кожна команда інструментує свій власний код.

Що таке Go Compile-Time Instrumentation?

Go компілюється в єдиний статичний бінарний файл, що довгий час робило автоматичне інструментування складнішим, ніж в інтерпретованих мовах. Цей проєкт вбудовується в стандартний інструментарій Go під час збірки (через механізм -toolexec) та впроваджує інструментування OpenTelemetry у ваш код, його залежності та стандартну бібліотеку в процесі компіляції. Немає окремого агента та нічого, що потрібно приєднувати під час виконання.

Для вас це означає телеметрію без змін вихідного коду: інструментування компілюється безпосередньо у ваш бінарний файл. Код вашого застосунку залишається вільним від проблем інструментування, і ви отримуєте покриття для сторонніх бібліотек, які вам не належать.

Ключові можливості у v1

  • Zero-code інструментування: інструментування застосунку та його залежностей без ручних змін коду.
  • Впровадження під час компіляції, без додаткових накладних витрат під час виконання: інструментування вбудовується в бінарний файл замість приєднання під час виконання.
  • Покриття сторонніх бібліотек та стандартної бібліотеки: інструментування залежностей та пакунків стандартної бібліотеки, які вам не належать.
  • Підтримувані інструментування у v1: поширені бібліотеки та фреймворки, включаючи net/http, database/sql, gRPC, Redis та метрики середовища виконання Go, з регулярним додаванням нових. Дивіться підтримувані бібліотеки для повного актуального списку.
  • Правила та розширюваність: додавайте підтримку нових бібліотек через формат правил інструментування SIG. Дивіться посібник з інструментування та довідник правил.
  • Відповідність семантичним домовленостям: телеметрія відповідає поточним семантичним домовленостям OpenTelemetry.
  • Сумісність з CI/CD: запускайте інструмент під час розробки або додайте його у свій конвеєр збірки.

Початок роботи

Проєкт постачає інструмент командного рядка з назвою otelc, який обгортає стандартний інструментарій Go. Зміна у вашій збірці — один рядок: запустіть otelc go build там, де ви раніше запускали go build. Усе після go передається інструментарію, тому решта вашої збірки залишається без змін, і та ж сама заміна працює в контейнерній збірці. Зазвичай otelc виявляє підтримувані бібліотеки у вашому модулі та інструментує їх автоматично, без конфігурації та змін коду.

Щоб встановити otelc, зібрати через нього ваш застосунок та побачити телеметрію, яку він продукує, дотримуйтесь посібника з початку роботи. Про все інше, конфігурацію, підтримувані бібліотеки та усунення несправностей, — дивіться в документації compile-time інструментування.

Коли варто це використовувати?

Якщо ви пишете або експлуатуєте Go-сервіси, у вас тепер є три взаємодоповнюючі способи отримати телеметрію OpenTelemetry, і compile-time інструментування — це третій варіант, обіцяний у початковому дописі:

  • Compile-time інструментування (цей проєкт): найкраще, коли ви можете перебудувати застосунок і не хочете змін коду, додаткових накладних витрат під час виконання та прагнете покриття залежностей та стандартної бібліотеки.
  • eBPF інструментування (OpenTelemetry eBPF Instrumentation, або OBI): найкраще, коли ви не можете перебудувати бінарний файл або хочете zero-code, багатомовне інструментування ззовні процесу.
  • Ручне інструментування з OpenTelemetry Go API: найкраще для власних відрізків та доменно-специфічної телеметрії, і воно поєднується з двома іншими.

v1 постачає сфокусований набір інструментувань, а не всю широту екосистеми Go, і покриття зростатиме з кожним релізом. Якщо бібліотеки, від яких ви залежите, ще не покриті, ви можете додати правило для неї або поєднати compile-time інструментування з ручними відрізками. Три підходи вирішують проблеми, що перетинаються різними способами, тому ми працюємо з OBI та Go SIG над наступними дописами, які порівнюють їх більш детально.

Що далі

v1 покриває основу підходу compile-time. Наші подальші пріоритети:

  • Більше інструментувань: розширення покриття популярних Go бібліотек та фреймворків, щоб більше застосунків працювали одразу після заміни на otelc.
  • Виявлення через реєстр: використання поточного OpenTelemetry Registry для виявлення та розповсюдження інструментувань, щоб ви могли отримувати підтримку нових бібліотек без очікування нового релізу otelc.
  • Продуктивність: продовження зниження вартості як під час збірки, так і під час виконання.
  • Впровадження та обізнаність: інвестиції в документацію, приклади та інформаційні матеріали, щоб команди знали, що інструмент існує та як вбудувати його у свою збірку.

Долучайтеся

Compile-time інструментування — це v1, і найкращий спосіб вплинути на те, куди воно рухатиметься далі — це використовувати його та долучитися.

  • Спробуйте і розкажіть нам, як воно. Додайте otelc до збірки та поділіться тим, що спрацювало, а що ні, у GitHub discussions та issues проєкту. Реальний досвід визначає roadmap.
  • Інструментуйте бібліотеку, яку ви використовуєте. Покриття зростає через формат правил SIG; посібник з інструментування проводить через додавання одного.
  • Приєднуйтеся до SIG. Знаходьте нас у #otel-go-compile-instrumentation у CNCF Slack та на наших SIG зустрічах.

Подяки

Досягнення v1 — це віха для всієї Go Compile-Time Instrumentation SIG. Дякуємо супроводжувачам, які довели реліз до стабільної версії: Xabier Martinez (Cabify), Yi Yang (Alibaba), Haibin Zhang (Alibaba) та Dario Castañé (Datadog), а також усім, хто зробив внесок у код, правила, документацію та зворотний звʼязок.

Особлива подяка Azhar Momin, який приєднався до проєкту через LFX Mentorship program і став одним з найактивніших контрибʼюторів та затверджувачем.

Востаннє змінено July 25, 2026: [uk] Blog Go Compile-Time Instrumentation (74e2a029)