Использование Grafana и ClickHouse для Observability
Grafana является предпочтительным инструментом визуализации данных Observability в ClickHouse. Это достигается с помощью официального плагина ClickHouse для Grafana. Пользователи могут следовать инструкциям по установке, приведённым здесь.
Версия 4 плагина делает логи и трейсы полноправными объектами в новом конструкторе запросов. Это снижает необходимость для SRE-инженеров писать SQL‑запросы и упрощает Observability на основе SQL, продвигая вперёд этот зарождающийся подход. Частью этого стало размещение OpenTelemetry (OTel) в основе плагина, поскольку мы считаем, что в ближайшие годы именно это станет фундаментом Observability на основе SQL и определит, как будут собираться данные.
Интеграция с OpenTelemetry
При настройке источника данных ClickHouse в Grafana плагин позволяет пользователю указать базу данных и таблицу по умолчанию для логов и трейсов, а также задать, соответствуют ли эти таблицы схеме OTel. Это позволяет плагину возвращать столбцы, необходимые для корректного отображения логов и трейсов в Grafana. Если вы внесли изменения в стандартную схему OTel и предпочитаете использовать собственные имена столбцов, их можно указать здесь. Использование стандартных имен столбцов OTel для таких столбцов, как время (Timestamp), уровень логирования (SeverityText) или тело сообщения (Body), означает, что никаких изменений вносить не требуется.
Пользователи могут подключать Grafana к ClickHouse как по протоколу HTTP, так и по протоколу Native. Последний обеспечивает незначительные преимущества в производительности, которые вряд ли будут заметны в агрегирующих запросах, выполняемых пользователями Grafana. Напротив, протокол HTTP, как правило, проще проксировать и анализировать.
Конфигурация Logs требует указать столбцы времени, уровня логирования и сообщения, чтобы логи отображались корректно.
Конфигурация Traces немного сложнее (полный список здесь). Необходимые здесь столбцы нужны для того, чтобы последующие запросы, формирующие полный профиль трейса, могли работать независимо от конкретной структуры таблиц. Эти запросы предполагают, что данные имеют структуру, аналогичную OTel, поэтому пользователям, существенно отклоняющимся от стандартной схемы, потребуется использовать представления, чтобы воспользоваться этой функцией.

После настройки пользователи могут перейти в Grafana Explore и начать поиск по логам и трейсам.
Логи
Если вы соблюдаете требования Grafana к логам, вы можете выбрать Query Type: Log в конструкторе запросов и нажать Run Query. Конструктор запросов сформирует запрос для вывода списка логов и обеспечит их отображение, например:

Конструктор запросов предоставляет простой способ изменения запроса, избавляя пользователей от необходимости писать SQL. Фильтрацию, включая поиск логов, содержащих ключевые слова, можно выполнять прямо в конструкторе запросов. Пользователи, которым нужно писать более сложные запросы, могут переключиться в SQL-редактор. Если возвращаются необходимые столбцы и logs выбрано в качестве типа запроса (Query Type), результаты будут отображаться как логи. Требуемые столбцы для отображения логов перечислены здесь.
Переход от логов к трассам
Если логи содержат идентификаторы трассировок (trace IDs), пользователи могут переходить к соответствующей трассе для конкретной строки лога.

Трейсы
Аналогично описанному выше сценарию работы с логами, если таблица содержит все столбцы, необходимые Grafana для отображения трейсов (например, при использовании схемы OTel), конструктор запросов сможет автоматически формировать нужные запросы. При выборе Query Type: Traces и нажатии Run Query будет сгенерирован и выполнен запрос, аналогичный приведённому ниже (в зависимости от настроенных столбцов — далее предполагается использование OTel):
Этот запрос возвращает имена столбцов, которые ожидает Grafana, и отображает таблицу трейсов, как показано ниже. Фильтрацию по длительности или другим столбцам можно выполнять, не прибегая к написанию SQL-запросов.

Пользователи, желающие писать более сложные запросы, могут переключиться на SQL Editor.
Просмотр деталей трейса
Как показано выше, идентификаторы трейсов (Trace ID) отображаются как ссылки, по которым можно перейти. При нажатии на идентификатор трейса пользователь может выбрать просмотр связанных спанов по ссылке View Trace. При этом выполняется следующий запрос (при условии использования столбцов OTel) для получения спанов в требуемой структуре и отображения результата в виде диаграммы водопада.
Обратите внимание, что приведённый выше запрос использует материализованное представление otel_traces_trace_id_ts для поиска трассы по её идентификатору. Подробности см. в разделе Ускорение запросов — использование материализованных представлений для быстрого поиска.

Переход от трейсов к логам
Если логи содержат идентификаторы трассировки (trace_id), пользователи могут переходить от трейса к связанным с ним логам. Чтобы просмотреть логи, нажмите на trace_id и выберите View Logs. Будет выполнен следующий запрос при условии использования стандартных столбцов OTel.

Дашборды
Пользователи могут создавать дашборды в Grafana, используя источник данных ClickHouse. Мы рекомендуем документацию по источнику данных для Grafana и ClickHouse для получения дополнительной информации, в частности разделы о макросах и переменных.
Плагин предоставляет несколько готовых дашбордов, включая пример дашборда «Простой дашборд OTel в ClickHouse» для логов и трейсов, соответствующих спецификации OTel. Для этого пользователям необходимо использовать стандартные имена столбцов OTel; дашборд можно установить из конфигурации источника данных.

Ниже приведены несколько простых советов по построению визуализаций.
Временные ряды
Наряду со статистикой линейные графики являются самой распространённой формой визуализации в сценариях наблюдаемости. Плагин ClickHouse автоматически отобразит линейный график, если запрос возвращает столбец типа datetime с именем time и хотя бы один числовой столбец. Например:

Многолинейные графики
Многолинейные графики будут автоматически построены для запроса, если соблюдаются следующие условия:
- поле 1: поле типа DateTime с псевдонимом time
- поле 2: значение для группировки. Должно быть типа String.
- поле 3+: значения метрик
Например:

Визуализация геоданных
Ранее мы рассмотрели обогащение данных наблюдаемости геокоординатами с использованием IP-словарей. Предположим, у вас есть столбцы latitude и longitude; тогда данные наблюдаемости можно визуализировать с помощью функции geohashEncode. Она формирует геохэши, совместимые с диаграммой Geo Map в Grafana. Ниже приведены пример запроса и его визуализация:
