- Кроном забираем метрики и метаданные в соответствии с Prometheus-совместимым протоколом.
- Загружаем метрики батчами (батчи - todo) в ClickHouse. Метаданные пока храним только в памяти.
- (todo) Напилить консольный клиент и/или настройку параметров экспорта простыми yaml-ами (пример от sensu https://docs.sensu.io/sensu-enterprise/latest/integrations/influxdb/)
В первой версии использовалась простая таблица на движке MergeTree.
CREATE DATABASE metrics
CREATE TABLE metrics.metrics (
_id UUID,
ts DateTime64(3, 'Europe/Moscow'),
name String,
value Decimal128(5),
labels Array(String),
le Nullable(String),
quantile Nullable(String)
)
ENGINE = MergeTree()
ORDER BY (ts)
Используем таблицу с движком GraphiteMergeTree:
CREATE TABLE metrics.metrics_graphite (
Path String,
Time DateTime,
Value Decimal128(5),
Version Int64,
le Nullable(String),
quantile Nullable(String),
labels Array(String)
) ENGINE = GraphiteMergeTree('metrics_rollup')
ORDER BY Time
Изначально хотелось брать сырые метрики, опрашивая инстансы самостоятельно, то есть по факту скопировав функционал прометея. Но такое дублирование трудозатратно и прометей уже написан. Поэтому в итоге пулим метрики уже из прометея.
Метеданные пулятся тоже по крону и прикапываются в кеш. Метаданные пока не сохраняются в базу. Есть вариант либо строить диф с текущим состоянием и записывать в тот же кликхаус в отдельную таблицу, либо предоставлять чувствительный к перезапускам интерфейс просмотра данных о метриках на самих инстансах telemetry-broker.
Unused: Пример получаемых из ручки /metrics сырых данных находится в файле.