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

Трассировка ClickHouse с OpenTelemetry

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На данный момент нет готового инструмента для экспорта данных трассировки из ClickHouse в мониторинговую систему.

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

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