IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Как в haproxy добавить ID трассировки для OpenTelemetry

Чтобы добавить ID трассировки для OpenTelemetry в HAProxy и передать его клиенту (или между сервисами), можно использовать настройку добавления и обработки HTTP-заголовков. Это позволяет вставить заголовок traceparent в соответствии со спецификацией W3C Trace Context.

Шаги для добавления ID трассировки

1. Добавление статического или динамического traceparent заголовка

Вы можете сгенерировать ID трассировки в HAProxy и добавить его в запросы, направляемые к клиенту или backend’у.

Пример конфигурации:
Объяснение:

  • http-request set-header traceparent — добавляет заголовок.
  • $(uuid) — уникальный 16-байтовый идентификатор трассировки.
  • $(uuid:short) — 8-байтовый идентификатор спана.

Формат заголовка traceparent:

Где:

  • 00 — версия.
  • <trace-id> — уникальный идентификатор трассировки (16 байт, 32 символа).
  • <span-id> — идентификатор спана (8 байт, 16 символов).
  • <flags> — индикатор включения трассировки (например, 01 для активной трассировки).

 

2. Перенаправление уже существующего traceparent заголовка

Если клиентский запрос уже содержит заголовок traceparent, его можно просто проксировать дальше.

Пример конфигурации:
Объяснение:

  • %[req.hdr(traceparent)] — извлекает заголовок traceparent из входящего HTTP-запроса.
  • Заголовок проксируется к серверу.

3. Добавление заголовка для ответа клиента

Вы можете также добавить traceparent в ответ от backend’а, чтобы клиент мог его использовать.

Пример:

Советы по интеграции

  1. Совместимость с OpenTelemetry:
    • Убедитесь, что формат заголовка соответствует спецификации W3C Trace Context.
    • Используйте корректные длины trace-id (32 символа) и span-id (16 символов).
  2. Кастомизация логов: Добавьте трассировочный ID в логи HAProxy, чтобы упрощать отладку:
     

Работа с другими сервисами: Убедитесь, что backend’ы (или downstream сервисы) поддерживают работу с traceparent.

Пример итоговой конфигурации

Результат

  1. Клиент получает заголовок traceparent в ответе.
  2. Backend-сервисы получают либо новый, либо перенаправленный ID трассировки.
  3. В HAProxy можно отследить трассировочные данные через логи.

Это простой способ интеграции OpenTelemetry в существующую инфраструктуру через HAProxy.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *