Поширення
Завдяки поширенню контексту, Сигнали можуть бути корельовані один з одним, незалежно від того, де вони генеруються. Хоча це не обмежується трасуванням, поширення контексту дозволяє трейсам будувати причинно-наслідкову інформацію про систему крізь сервіси, які довільно розподілені через процеси та мережеві межі.
Для переважної більшості випадків використання, бібліотеки, які нативно підтримують OpenTelemetry або бібліотеки інструментування, автоматично поширюватимуть контекст трасування крізь сервіси за вас. Лише в рідкісних випадках вам потрібно буде поширювати контекст вручну.
Щоб дізнатися більше, дивіться Поширення контексту.
Автоматичне поширення контексту
Розподілені трасування виходять за межі одного сервісу, що означає, що деякий контекст повинен бути переданий між сервісами для створення відносин пращур-нащадок між Відрізками. Це вимагає міжсервісного поширення контексту, механізму, за допомогою якого ідентифікатори для Трасування надсилаються до віддалених процесів.
Бібліотеки інструментування для HTTP фреймворків та серверів, таких як Phoenix, Cowboy, Elli та клієнтів, таких як Tesla автоматично впроваджують або витягують контекст, використовуючи глобально зареєстровані поширювачі. Стандартно використовуються глобальні поширбвачі W3C Trace Context та Baggage формати.
Ви можете налаштувати глобальні поширювачі, використовуючи змінну середовища OTP text_map_propagators
:
%% sys.config
...
{text_map_propagators, [baggage,
trace_context]},
...
## runtime.exs
...
text_map_propagators: [:baggage, :trace_context],
...
Ви також можете передати список, розділений комами, використовуючи змінну середовища OTEL_PROPAGATORS
. Обидві форми конфігурації приймають значення trace_context
, baggage
, b3
та b3multi
.
Ручне поширення контексту
Щоб вручну впровадити або витягти контекст, ви можете використовувати модуль otel_propagator_text_map
:
%% використовує контекст з словника процесу для додавання до порожнього списку заголовків
Headers = otel_propagator_text_map:inject([]),
%% створює контекст у словнику процесу з Headers
otel_propagator_text_map:extract(Headers),
# використовує контекст з словника процесу для додавання до порожнього списку заголовків
headers = :otel_propagator_text_map.inject([])
# створює контекст у словнику процесу з headers
:otel_propagator_text_map.extract(headers)
otel_propagator_text_map:inject/1
та otel_propagator_text_map:extract/1
використовують глобально зареєстровані поширювачі. Щоб використовувати конкретний поширювач, otel_propagator_text_map:inject/2
та otel_propagator_text_map:extract/2
можуть бути використані з першим аргументом, що є назвою модуля поширювача.
Наступні кроки
Щоб дізнатися більше про поширення, прочитайте Специфікацію API поширювачів.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!