TimeSeries. Один обработчик поддерживает удалённую запись, удалённое чтение, мгновенные запросы PromQL и запросы PromQL по диапазону.
Чтобы предоставить собственные метрики ClickHouse для сбора сервером Prometheus, см. конечную точку метрик Prometheus.
Предварительные требования
Шаги настройки различаются для ClickHouse Cloud и самоуправляемого ClickHouse. Следуйте разделу, соответствующему вашему развертыванию.ClickHouse Cloud
Поддержка PromQL в ClickHouse Cloud доступна в режиме закрытой предварительной версии. В сервисах, участвующих в закрытой предварительной версии, параметр
enable_time_series_table и конечные точки Prometheus API уже настроены. В остальных сервисах ClickHouse Cloud такой конфигурации нет, и включить эту возможность самостоятельно в подобном сервисе невозможно. Оператор SET enable_time_series_table и конфигурация http_handlers, описанные в следующих разделах, относятся к самоуправляемым развертываниям.Самоуправляемый вариант: включение настройки TimeSeries
Включите настройкуenable_time_series_table для пользователя, создающего таблицу и работающего с ней:
enable_time_series_table в профиле пользователя API.
Самоуправляемый вариант: настройка конечных точек API Prometheus
Настройте один обработчик с маршрутизацией по префиксу на основном HTTP-порту ClickHouse:<defaults/> сохраняет встроенные обработчики для таких конечных точек, как /ping, а также для SQL-запросов. Указанный выше префикс предоставляет доступ к этим конечным точкам через один обработчик:
В примере в обработчике не указаны
database и table. В каждом запросе необходимо передавать параметр запроса table (кроме /format_query, который только разбирает переданное выражение PromQL и не требует таблицы). Также можно передать database, использовать полное имя таблицы, например prometheus.metrics, или не указывать базу данных, чтобы использовать default. Это позволяет одному обработчику обслуживать несколько таблиц TimeSeries.
Чтобы использовать одну фиксированную таблицу для всех запросов, настройте её в обработчике:
Создание таблицы TimeSeries
Создайте базу данных и таблицуTimeSeries:
Приём метрик через удалённую запись
ClickHouse поддерживает протокол удалённой записи Prometheus. Настройте Prometheus на запись в обработчик:prometheus.metrics.
Чтобы объединять данные из множества одновременных запросов удалённой записи в меньшее число частей, включите асинхронные вставки, добавив настройку async_insert в URL (или включив её в профиле пользователя):
TimeSeries, независимо от настройки wait_for_async_insert: согласно протоколу удалённой записи подтверждённая запись считается надёжно сохранённой. Если сброс на диск завершается ошибкой, запрос возвращает ошибку, и Prometheus повторяет попытку.
Запрос с PromQL
Используйте конечную точку мгновенного запроса, чтобы вычислить выражение PromQL на определённый момент времени:--get curl отправляет параметры в формате application/x-www-form-urlencoded методом POST:
sum by (job) (http_requests_total{code="200"}) / 2. Эта конечная точка не вычисляет выражение, поэтому ей не нужны параметры database и table.
Список функций и операторов агрегации, поддерживаемых HTTP API, диалектом promql и табличными функциями, см. в разделе Поддерживаемые возможности PromQL.
Grafana
Настройте источник данных Prometheus, указав базовый URL без/api/v1 в конце:
/api/v1/query или /api/v1/query_range к этому базовому URL, а также customQueryParameters к каждому запросу.
При httpMethod: POST Grafana передаёт параметры запроса в теле запроса. ClickHouse читает как тело запроса, так и строку запроса URL, поэтому customQueryParameters по-прежнему применяется. Используйте POST для длинных выражений PromQL, поскольку длина URL ограничена.
Реализованы только конечные точки запросов
/api/v1/query, /api/v1/query_range и /api/v1/format_query, а также конечные точки метаданных /api/v1/series, /api/v1/labels, /api/v1/label/<name>/values и /api/v1/metadata. Для /api/v1/series требуется как минимум один селектор серий match[]; она поддерживает необязательные параметры start, end и limit и возвращает объединение серий, соответствующих каждому селектору. /api/v1/labels принимает те же параметры, при этом match[] необязателен, и возвращает отсортированные имена меток соответствующих серий (или всех серий, если селекторы не указаны). /api/v1/label/<name>/values принимает те же параметры, что и /api/v1/labels, и возвращает отсортированные значения одной метки, причём в <name> может использоваться принятое в Prometheus экранирование U__... для имён меток, содержащих символы вне [a-zA-Z0-9_]. Этих конечных точек достаточно для всего, что источник данных Prometheus в Grafana использует для просмотра меток, переменных шаблона и автодополнения в конструкторе запросов.Точки входа SQL
ClickHouse использует один и тот же конвертер PromQL для HTTP API, диалектаpromql, а также табличных функций prometheusQuery и prometheusQueryRange.
Выполните PromQL напрямую с помощью clickhouse-client:
Запрос метаданных метрик
Конечная точка/prometheus/api/v1/metadata возвращает метаданные метрик, хранящиеся в целевой таблице Metrics таблицы TimeSeries: тип, текст справки и единицу измерения каждого семейства метрик. Она поддерживает следующие параметры Prometheus в строке запроса URL:
Целевая таблица
Metrics по умолчанию — это ReplacingMergeTree, упорядоченная по имени семейства метрик: в ней сохраняется последняя записанная запись метаданных для каждого семейства метрик. Несколько записей для одного семейства возвращаются только до тех пор, пока они хранятся в целевой таблице: до слияния её частей или если таблица определена с движком, который их сохраняет.
Чтение метрик через удалённое чтение
ClickHouse поддерживает протокол Prometheus удалённого чтения по адресу/prometheus/api/v1/read.
Настройте сервер Prometheus для чтения из той же таблицы TimeSeries: