Анонс 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 і став одним з найактивніших контрибʼюторів та затверджувачем.