Перейти к основному содержимому
Перейти к основному содержимому

Трассировка ClickHouse с помощью OpenTelemetry

OpenTelemetry - это открытый стандарт для сбора трасс и метрик из распределенного приложения. ClickHouse имеет некоторую поддержку OpenTelemetry.

Передача контекста трассировки в ClickHouse

ClickHouse принимает HTTP-заголовки контекста трассировки, как описано в рекомендациях W3C. Он также принимает контекст трассировки через собственный протокол, который используется для обмена данными между серверами ClickHouse или между клиентом и сервером. Для ручного тестирования заголовки контекста трассировки, соответствующие рекомендации по контексту трассировки, могут быть предоставлены clickhouse-client с использованием флагов --opentelemetry-traceparent и --opentelemetry-tracestate.

Если родительский контекст трассировки не предоставлен или предоставленный контекст трассировки не соответствует стандарту W3C, ClickHouse может начать новую трассировку, вероятность чего контролируется настройкой opentelemetry_start_trace_probability.

Распространение контекста трассировки

Контекст трассировки передается в дочерние сервисы в следующих случаях:

  • Запросы к удаленным серверам ClickHouse, например, при использовании распределенного движка таблиц.

  • Функция таблицы url. Информация о контексте трассировки отправляется в HTTP-заголовках.

Трассировка самого ClickHouse

ClickHouse создает trace spans для каждого запроса и некоторых этапов выполнения запроса, таких как планирование запроса или распределенные запросы.

Чтобы быть полезной, информация о трассировке должна быть экспортирована в мониторинговую систему, которая поддерживает OpenTelemetry, такую как Jaeger или Prometheus. ClickHouse избегает зависимости от конкретной мониторинговой системы, предоставляя данные трассировки лишь через системную таблицу. Информация о trace span, требуемая стандартом в соответствии со стандартом, хранится в таблице system.opentelemetry_span_log.

Таблица должна быть включена в конфигурации сервера, см. элемент opentelemetry_span_log в файле конфигурации по умолчанию config.xml. Она включена по умолчанию.

Теги или атрибуты сохраняются как два параллельных массива, содержащих ключи и значения. Используйте ARRAY JOIN для работы с ними.

Настройки журналирования запросов

Настройка log_query_settings позволяет регистрировать изменения параметров запроса во время его выполнения. Когда она включена, любые изменения, внесенные в параметры запроса, будут зафиксированы в журнале OpenTelemetry span. Эта функция особенно полезна в производственных средах для отслеживания изменений конфигурации, которые могут повлиять на производительность запроса.

Интеграция с мониторинговыми системами

На данный момент нет готового инструмента, который мог бы экспортировать данные трассировки из ClickHouse в мониторинговую систему.

Для тестирования возможно настроить экспорт с использованием материализованного представления с движком URL над таблицей system.opentelemetry_span_log, что будет отправлять поступающие данные журнала на HTTP-эндпоинт коллектора трасс. Например, чтобы отправить минимальные данные span в экземпляр Zipkin, работающий по адресу http://localhost:9411, в формате JSON v2 для Zipkin:

В случае возникновения ошибок, часть данных журнала, для которой произошла ошибка, будет тихо утеряна. Проверьте журнал сервера на наличие сообщений об ошибках, если данные не приходят.