Поширення
Завдяки поширенню контексту сигнали можуть бути повʼязані між собою, незалежно від того, де вони генеруються. Хоча поширення контексту не обмежується трейсами, воно дозволяє трейсам створювати причинно-наслідкову інформацію про систему між сервісами, які довільно розподілені між процесами та межами мереж.
У переважній більшості випадків використання бібліотеки, що нативно підтримують 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 поширювачів.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!