SUPER_OLEG_DEV Telegram 214
Манкипатчинг еще ведет к такой особенности, что подключать автоинструментарий надо раньше чем весь остальной код приложения.

Рекомендуемый подход - создать отдельный файл с интеграцией автоинструментария, запустить его до сервера:

node --require ./instrumentation.js app.js


Что тоже мне не хотелось бы заставлять делать пользователей фреймворка.
При этом у нас уже есть манкипатчинг некоторых модулей для серверных метрик, и все работает без таких приседаний.

В итоге я пришел к нескольких принципам при создании интеграции:
- хочу отдельный модуль, который работает при подключении без дополнительных действий
- модуль не использует автоинструментарий, самостоятельно покрываю базовый функционал телеметрией по Semantic Conventions
- делаю удобный трейсер, его и всю конфигурацию храню в DI контейнере

Сделать кастомный Tracer оказалось не сложно, есть отличный пример у Next.js которые в свою очередь подсмотрели у Datadog:
- https://github.com/DataDog/dd-trace-js/blob/59e9a2a75f4256755b4e6c9951a0bdf8d39b4015/index.d.ts#L9
- https://github.com/vercel/next.js/blob/9a1cd356dbafbfcf23d1b9ec05f772f766d05580/packages/next/src/server/lib/trace/tracer.ts#L74

API трейсера получилось такого вида, и инкапсулирует очень бойлерплейтный код Opentelemetry:

tracer.trace('trace-name', { ...spanParameters }, async (span) => { ... });


Ключевой момент, что любую операцию надо обернуть в этот асинхронный коллбэк, для поддержки вложенного контекста (который как раз реализован через Async Local Storage), что бы каждый новый span получал родительский спан из контекста выше, и они автоматически будут выстроены в цепочку при анализе трейсов:

root span
- child span
- nested child span
👍7🔥2



tgoop.com/super_oleg_dev/214
Create:
Last Update:

Манкипатчинг еще ведет к такой особенности, что подключать автоинструментарий надо раньше чем весь остальной код приложения.

Рекомендуемый подход - создать отдельный файл с интеграцией автоинструментария, запустить его до сервера:

node --require ./instrumentation.js app.js


Что тоже мне не хотелось бы заставлять делать пользователей фреймворка.
При этом у нас уже есть манкипатчинг некоторых модулей для серверных метрик, и все работает без таких приседаний.

В итоге я пришел к нескольких принципам при создании интеграции:
- хочу отдельный модуль, который работает при подключении без дополнительных действий
- модуль не использует автоинструментарий, самостоятельно покрываю базовый функционал телеметрией по Semantic Conventions
- делаю удобный трейсер, его и всю конфигурацию храню в DI контейнере

Сделать кастомный Tracer оказалось не сложно, есть отличный пример у Next.js которые в свою очередь подсмотрели у Datadog:
- https://github.com/DataDog/dd-trace-js/blob/59e9a2a75f4256755b4e6c9951a0bdf8d39b4015/index.d.ts#L9
- https://github.com/vercel/next.js/blob/9a1cd356dbafbfcf23d1b9ec05f772f766d05580/packages/next/src/server/lib/trace/tracer.ts#L74

API трейсера получилось такого вида, и инкапсулирует очень бойлерплейтный код Opentelemetry:

tracer.trace('trace-name', { ...spanParameters }, async (span) => { ... });


Ключевой момент, что любую операцию надо обернуть в этот асинхронный коллбэк, для поддержки вложенного контекста (который как раз реализован через Async Local Storage), что бы каждый новый span получал родительский спан из контекста выше, и они автоматически будут выстроены в цепочку при анализе трейсов:

root span
- child span
- nested child span

BY SuperOleg dev notes




Share with your friend now:
tgoop.com/super_oleg_dev/214

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels fall into two types: Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” Write your hashtags in the language of your target audience. Image: Telegram. The creator of the channel becomes its administrator by default. If you need help managing your channel, you can add more administrators from your subscriber base. You can provide each admin with limited or full rights to manage the channel. For example, you can allow an administrator to publish and edit content while withholding the right to add new subscribers.
from us


Telegram SuperOleg dev notes
FROM American