Использование ClickHouse для мониторинга
Введение
Этот гид предназначен для пользователей, стремящихся создать собственное решение для мониторинга на базе SQL с использованием ClickHouse, сосредоточив внимание на логах и трассировках. Он охватывает все аспекты создания собственного решения, включая вопросы приема данных, оптимизацию схем для ваших паттернов доступа и извлечение структуры из неструктурированных логов.
ClickHouse сам по себе не является "всё-в-одном" решением для мониторинга. Тем не менее, его можно использовать в качестве высокоэффективного движка хранения для данных мониторинга, обладающего непревзойдёнными коэффициентами сжатия и молниеносными временами отклика на запросы. Для того чтобы пользователи могли использовать ClickHouse в рамках решения для мониторинга, необходимы как пользовательский интерфейс, так и фреймворк для сбора данных. В настоящее время мы рекомендуем использовать Grafana для визуализации сигналов мониторинга и OpenTelemetry для сбора данных (оба этих инструмента официально поддерживаются).

Хотя мы рекомендуем использовать проект OpenTelemetry (OTel) для сбора данных, подобные архитектуры могут быть созданы с использованием других фреймворков и инструментов, например, Vector и Fluentd (см. пример с Fluent Bit). Существуют и альтернативные инструменты визуализации, такие как Superset и Metabase.
Почему стоит использовать ClickHouse?
Самой важной характеристикой любого централизованного хранилища для мониторинга является его способность быстро агрегировать, анализировать и искать огромные объемы логов данных из различных источников. Эта централизация упрощает устранение неполадок, облегчая выявление основных причин сбоев в обслуживании.
Поскольку пользователи становятся все более чувствительными к ценам и находят стоимость этих готовых решений высокой и непредсказуемой в сравнении с их ценностью, эффективное и предсказуемое хранение логов, где производительность запросов приемлема, становится более ценным, чем когда-либо.
Благодаря своей производительности и стоимости ClickHouse стал де-факто стандартом для движков хранения логов и трассировок в продуктах мониторинга.
Более конкретно, следующие характеристики делают ClickHouse идеальным для хранения данных мониторинга:
- Сжатие - Данные мониторинга обычно содержат поля, значения которых берутся из определенного набора, например, HTTP-коды или имена сервисов. Столбцовая структура хранения ClickHouse, где значения хранятся в отсортированном виде, означает, что эти данные сжимаются чрезвычайно эффективно, особенно при использовании ряда специализированных кодеков для данных временных рядов. В отличие от других хранилищ данных, которые требуют столько же места, сколько и оригинальный размер данных, обычно в формате JSON, ClickHouse сжимает логи и трассировки в среднем до 14 раз. Кроме того, это сжатие обеспечивает значительную экономию хранилища для крупных установок мониторинга и ускоряет запросы, так как меньший объем данных нужно считывать с диска.
- Быстрая агрегация - Решения для мониторинга обычно сильно зависят от визуализации данных через графики, например, линии показывающие уровни ошибок или столбчатые диаграммы, показывающие источники трафика. Агрегации или GROUP BY являются основополагающими для работы этих графиков, которые также должны быть быстрыми и отзывчивыми при применении фильтров в рабочих потоках для диагностики проблем. Столбцовый формат ClickHouse в сочетании с векторизованным движком выполнения запросов идеально подходит для быстрой агрегации, а разреженная индексация позволяет быстро фильтровать данные в ответ на действия пользователей.
- Быстрое линейное сканирование - В то время как альтернативные технологии полагаются на инвертированные индексы для быстрой выборки логов, это неизбежно приводит к высокой загрузке диска и ресурсов. Хотя ClickHouse предоставляет инвертированные индексы в качестве дополнительного типа индекса, линейные сканирования высокопараллелизованы и используют все доступные ядра на машине (если не настроено иное). Это потенциально позволяет сканировать десятки ГБ/с (сжатых) для поиска совпадений с высокооптимизированными операторами сопоставления текста.
- Знакомство с SQL - SQL является общепринятым языком, с которым знакомы все инженеры. С более чем 50-летним развитием он зарекомендовал себя как де-факто язык для аналитики данных и остается 3-м самым популярным языком программирования. Мониторинг - это просто еще одна задача обработки данных, для которой SQL идеально подходит.
- Аналитические функции - ClickHouse расширяет ANSI SQL аналитическими функциями, предназначенными для упрощения написания SQL-запросов. Эти функции необходимы для пользователей, выполняющих анализ коренных причин, где данные должны быть разделены и обработаны.
- Вторичные индексы - ClickHouse поддерживает вторичные индексы, такие как фильтры Блума, для ускорения выполнения определенных профилей запросов. Эти индексы могут быть опционально включены на уровне колонок, предоставляя пользователю детальный контроль и позволяя оценить соотношение затрат и производительности.
- Открытый код и открытые стандарты - Как открытая база данных, ClickHouse принимает открытые стандарты, такие как Open Telemetry. Возможность вносить свой вклад и активно участвовать в проектах привлекательна, позволяя избежать сложностей, связанных с зависимостью от конкретного поставщика.
Когда стоит использовать ClickHouse для мониторинга
Использование ClickHouse для данных мониторинга требует от пользователей принятия SQL-ориентированного подхода к мониторингу. Мы рекомендуем этот блог-пост для ознакомления с историей SQL-ориентированного мониторинга, но в кратком виде:
SQL-ориентированный мониторинг подходит вам, если:
- Вы или ваши команды знакомы с SQL (или хотите его изучить).
- Вы предпочитаете придерживаться открытых стандартов, таких как OpenTelemetry, чтобы избежать зависимости от конкретного поставщика и достичь расширяемости.
- Вы готовы работать в экосистеме, поддерживаемой инновациями с открытым исходным кодом, от сбора до хранения и визуализации.
- Вы предполагаете рост до средних или крупных объемов данных мониторинга (или даже очень крупных объемов).
- Вы хотите контролировать общую стоимость владения (TCO) и избежать растущих затрат на мониторинг.
- Вы не можете или не хотите оставаться с маленькими периодами хранения данных для вашего мониторинга только для управления расходами.
SQL-ориентированный мониторинг может не подойти вам, если:
- Изучение (или создание!) SQL не привлекает вас или ваши команды.
- Вы ищете готовое, комплексное решение для мониторинга.
- Объемы ваших данных мониторинга слишком маленькие, чтобы это имело значительное значение (например, <150 GiB) и не прогнозируются на рост.
- Ваш случай использования требует наличия больших объемов метрик и нуждается в PromQL. В этом случае вы все равно можете использовать ClickHouse для логов и трассировок вместе с Prometheus для метрик, объединяя их на уровне представления с Grafana.
- Вы предпочитаете дождаться более зрелой экосистемы и большего числа готовых решений для SQL-ориентированного мониторинга.
Логи и трассировки
Случай использования мониторинга имеет три различных столпа: Логирование, Трассировка и Метрики. Каждый из них имеет свои типы данных и паттерны доступа.
В настоящее время мы рекомендуем ClickHouse для хранения двух типов данных мониторинга:
- Логи - Логи - это временные записи событий, происходящих в системе, фиксирующие подробную информацию о различных аспектах работы программного обеспечения. Данные в логах обычно являются неструктурированными или полуструктурированными и могут включать сообщения об ошибках, записи о действиях пользователей, изменения системы и другие события. Логи жизненно важны для устранения неполадок, обнаружения аномалий и понимания конкретных событий, предшествующих проблемам в системе.
- Трассировки - Трассировки фиксируют путь запросов по различным сервисам в распределенной системе, детализируя путь и производительность этих запросов. Данные в трассировках имеют высокую степень структурированности и состоят из спанов и трассировок, которые обозначают каждый шаг, который проходит запрос, включая информацию о времени. Трассировки предоставляют ценную информацию о производительности системы, помогая выявлять узкие места, проблемы с задержками и оптимизировать эффективность микросервисов.
Хотя ClickHouse может использоваться для хранения метрик, этот столп менее развит в ClickHouse, с ожидаемой поддержкой функций, таких как поддержка формата данных Prometheus и PromQL.
Распределенная трассировка
Распределенная трассировка - это критически важная функция мониторинга. Распределенная трассировка, просто называемая трассировкой, отображает путь запроса через систему. Запрос будет исходить от конечного пользователя или приложения и будет распространяться по системе, обычно вызывая поток действий между микросервисами. Записывая эту последовательность и позволяя последующим событиям быть связными, это позволяет пользователю мониторинга или SRE диагностировать проблемы в потоке приложения независимо от сложности или серверной безвозвратной архитектуры.
Каждая трассировка состоит из нескольких спанов, причем начальный(span) связан с запросом, известным как корневой.span. Этот корневой.span захватывает весь запрос от начала до конца. Последующие спаны под корневым.span предоставляют детализированную информацию о различных шагах или операциях, которые происходят во время выполнения запроса. Без трассировки диагностика проблем с производительностью в распределенной системе может оказаться крайне сложной. Трассировка упрощает процесс отладки и понимания распределенных систем, детализируя последовательность событий в запросе по мере его движения по системе.
Большинство поставщиков мониторинга визуализируют эту информацию в виде водопада, с относительным временем, показанным с помощью горизонтальных полос пропорционального размера. Например, в Grafana:

Для пользователей, которым необходимо глубже ознакомиться с концепциями логов и трассировок, мы настоятельно рекомендуем документацию OpenTelemetry.