Передача контекста трассировки в ClickHouse
clickhouse-client с помощью флагов --opentelemetry-traceparent и --opentelemetry-tracestate.
Если родительский контекст трассировки не передан или переданный контекст трассировки не соответствует указанному выше стандарту W3C, ClickHouse может начать новую трассировку с вероятностью, задаваемой настройкой opentelemetry_start_trace_probability.
Передача контекста трассировки
- Запросы к удалённым серверам ClickHouse, например при использовании движка таблицы Distributed.
- Табличная функция url. Информация о контексте трассировки отправляется в заголовках HTTP.
Трассировка запросов ClickHouse Keeper
Включение трассировки запросов Keeper
Типы спанов Keeper
zookeeper.create— Создание нового узлаzookeeper.get— Получение данных узлаzookeeper.set— Запись данных узлаzookeeper.remove— Удаление узлаzookeeper.list— Получение списка дочерних узловzookeeper.exists— Проверка существования узлаzookeeper.multi— Атомарное выполнение нескольких операцийzookeeper.client.requests_queue— Время ожидания запросов в очереди перед отправкой
keeper.receive_request— Получение и разбор запроса от клиентаkeeper.dispatcher.requests_queue— Ожидание запроса в очереди диспетчераkeeper.write.pre_commit— Предварительная обработка запросов на запись перед фиксацией в Raftkeeper.write.commit— Обработка запросов на запись после фиксации в Raftkeeper.read.wait_for_write— Ожидание запросов на чтение, зависящих от записиkeeper.read.process— Обработка запросов на чтениеkeeper.dispatcher.responses_queue— Ожидание ответа в очереди диспетчераkeeper.send_response— Отправка ответа клиенту
Сэмплирование и производительность
Трассировка самого ClickHouse
trace spans для каждого запроса и некоторых этапов его выполнения, таких как планирование запроса или распределенные запросы.
Чтобы эта информация была полезной, ее нужно экспортировать в систему мониторинга с поддержкой OpenTelemetry, например Jaeger или Prometheus. ClickHouse не зависит от какой-либо конкретной системы мониторинга и предоставляет данные трассировки только через системную таблицу. Информация о спанах трассировки OpenTelemetry, требуемая стандартом, хранится в таблице system.opentelemetry_span_log.
Эта таблица должна быть включена в конфигурации сервера, см. элемент opentelemetry_span_log в файле конфигурации по умолчанию config.xml. По умолчанию она включена.
Теги или атрибуты сохраняются в виде двух параллельных массивов, содержащих ключи и значения. Используйте ARRAY JOIN, чтобы работать с ними.
Журналирование настроек запроса
Интеграция с системами мониторинга
http://localhost:9411, в формате Zipkin v2 JSON: