Подключение телеметрии#

Предусловия#

Не требуются.

Последовательность выполнения#

В интерсепторах возможно подключить трассировку, используя фреймворк OpenTelemetry. Трассировка отображает полный путь обработки сообщений с указанием последовательности этапов обработки и временем выполнения каждого этапа в виде трейсов. Трейсы представляют собой блоки, состоящие из спанов – стадий обработки сообщения.

Реализует интерфейсы ProducerInterceptor/ConsumerInterceptor.

Телеметрию возможно подключить в конфигурации следующих интерсепторов:

Для каждого сообщения отображает отдельный трейс, состоящий из спанов для следующих этапов:

  • отправка сообщения Kafka Producer;

  • обработка сообщения интерсептором на стороне продюсера;

  • получение сообщения Kafka Consumer;

  • обработка сообщения интерсептором на стороне консьюмера.

Для включения телеметрии в конфигурации kafka-клиента необходимо указать следующие настройки:

# Подключить интерсептор телеметрии
# Kafka Producer
# interceptor.classes = ru.sbt.ss.kafka.interceptors.telemetry.ProducerTelemetryInterceptor

# Kafka Consumer
# interceptor.classes = ru.sbt.ss.kafka.interceptors.telemetry.ConsumerTelemetryInterceptor

# Задать путь к файлу конфигурации телеметрии
# interceptor.telemetry.config.path = /path/to/config/file

# Необязательные параметры

# Имена заголовков сообщений в которых могут лежать идентификаторы сообщений
# interceptor.telemetry.message.id.headers = header_name1, header_name2, ...

# Имена заголовков сообщений по которым будут выведены значения заголовков в атрибуты спанов
# interceptor.telemetry.headers = header_name1, header_name2, ...

Пример конфигурации Open Telemetry#

Поддерживается конфигурация Open Telemetry в форматах JSON и YAML

Для каждого kafka-клиента необходим отдельный файл конфигурации телеметрии. В файле необходимо указать хост экспортера endpoint одинаковый для каждого kafka-клиента и имя сервиса service.name, уникальное для каждого kafka-клиента.

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

{
  "file_format": "0.1",
  "tracer_provider": {
    "processors": [
      {
        "simple": {
          "exporter": {
            "otlp": {
              "endpoint": "http://localhost:4317"
            }
          }
        }
      }
    ],
    "sampler": {
      "always_on": {}
    }
  },
  "propagators": [
    "tracecontext"
  ],
  "resource": {
    "attributes": {
      "service.name": "EVENT"
    }
  }
}

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

file_format: "0.1"

resource:
  attributes:
    service.name: "EVENT"

propagators: [tracecontext]

tracer_provider:
  processors:
    - simple:
        exporter:
          otlp:
            endpoint: http://localhost:4317
  sampler:
    always_on: {}

Результат#

В интерсепторах выполнено подключение трассировки с использованием фреймворка OpenTelemetry.