Как в haproxy добавить ID трассировки для OpenTelemetry
Чтобы добавить ID трассировки для OpenTelemetry в HAProxy и передать его клиенту (или между сервисами), можно использовать настройку добавления и обработки HTTP-заголовков. Это позволяет вставить заголовок traceparent
в соответствии со спецификацией W3C Trace Context.
Шаги для добавления ID трассировки
1. Добавление статического или динамического traceparent
заголовка
Вы можете сгенерировать ID трассировки в HAProxy и добавить его в запросы, направляемые к клиенту или backend’у.
Пример конфигурации:
1 2 3 4 5 6 7 8 |
frontend http-in bind *:80 http-request set-header traceparent 00-$(uuid)-$(uuid:short)-01 default_backend servers backend servers server server1 192.168.1.100:8080 |
http-request set-header traceparent
— добавляет заголовок.$(uuid)
— уникальный 16-байтовый идентификатор трассировки.$(uuid:short)
— 8-байтовый идентификатор спана.
Формат заголовка traceparent
:
1 2 |
00-<trace-id>-<span-id>-<flags> |
Где:
00
— версия.<trace-id>
— уникальный идентификатор трассировки (16 байт, 32 символа).<span-id>
— идентификатор спана (8 байт, 16 символов).<flags>
— индикатор включения трассировки (например,01
для активной трассировки).
2. Перенаправление уже существующего traceparent
заголовка
Если клиентский запрос уже содержит заголовок traceparent
, его можно просто проксировать дальше.
Пример конфигурации:
1 2 3 4 5 6 7 8 |
frontend http-in bind *:80 default_backend servers backend servers http-request set-header traceparent %[req.hdr(traceparent)] server server1 192.168.1.100:8080 |
%[req.hdr(traceparent)]
— извлекает заголовокtraceparent
из входящего HTTP-запроса.- Заголовок проксируется к серверу.
3. Добавление заголовка для ответа клиента
Вы можете также добавить traceparent
в ответ от backend’а, чтобы клиент мог его использовать.
Пример:
1 2 3 4 5 6 7 8 |
frontend http-in bind *:80 default_backend servers backend servers http-response set-header traceparent 00-$(uuid)-$(uuid:short)-01 server server1 192.168.1.100:8080 |
Советы по интеграции
- Совместимость с OpenTelemetry:
- Убедитесь, что формат заголовка соответствует спецификации W3C Trace Context.
- Используйте корректные длины
trace-id
(32 символа) иspan-id
(16 символов).
- Кастомизация логов: Добавьте трассировочный ID в логи HAProxy, чтобы упрощать отладку:
12log-format "%ci:%cp [%t] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %{+Q}[traceparent:%[req.hdr(traceparent)]]"
Работа с другими сервисами: Убедитесь, что backend’ы (или downstream сервисы) поддерживают работу с traceparent
.
Пример итоговой конфигурации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
global log stdout format raw local0 defaults log global option httplog timeout connect 5s timeout client 30s timeout server 30s frontend http-in bind *:80 http-request set-header traceparent 00-$(uuid)-$(uuid:short)-01 default_backend servers backend servers http-request set-header traceparent %[req.hdr(traceparent)] http-response set-header traceparent %[req.hdr(traceparent)] server server1 192.168.1.100:8080 |
Результат
- Клиент получает заголовок
traceparent
в ответе. - Backend-сервисы получают либо новый, либо перенаправленный ID трассировки.
- В HAProxy можно отследить трассировочные данные через логи.
Это простой способ интеграции OpenTelemetry в существующую инфраструктуру через HAProxy.
Recommended Posts
Как посмотреть метрики в Prometheus UI
12.03.2024