Ответ
Prometheus использует собственную базу данных временных рядов (Time Series Database, TSDB). Эта модель идеально подходит для хранения метрик, так как данные представляют собой последовательность значений, привязанных к уникальным временным меткам.
Ключевые особенности этой модели:
- Структура данных: Каждая метрика определяется уникальным именем и набором пар ключ-значение, называемых метками (labels).
metric_name{label1="value1", label2="value2"} - Хранение: Данные записываются на локальный диск. Сначала они попадают в WAL (Write-Ahead Log) для надежности, а затем сжимаются в блоки для долгосрочного и эффективного хранения.
- Многомерность: Метки позволяют гибко фильтровать, группировать и агрегировать данные с помощью языка запросов PromQL. Это основное преимущество перед иерархическими моделями.
Пример временного ряда:
Запись показывает, что в момент времени 1625070000 было зафиксировано 42 HTTP-запроса с методом POST и статусом 200.
http_requests_total{method="POST", status="200"} 42 1625070000
Для долгосрочного хранения данных Prometheus часто интегрируют с внешними системами, такими как Thanos, VictoriaMetrics или Cortex.
Ответ 18+ 🔞
А, ну это же про ту самую базу, где всё по полочкам, но полочки эти — временные, блядь! Prometheus, сука, не просто так хранит метрики, он их в свою собственную TSDB пихает. Идеально, ёпта, для вот этих вот циферок, которые во времени плывут — значение и штамп, когда его словили. Всё просто, как три копейки.
Что там у него внутри, под капотом, блядь:
- Как данные выглядят: Каждая метрика — это как паспорт, имя и куча меток-тегов, эти ваши
labels. Выглядит как ёбаный паспорт с пропиской:
metric_name{label1="value1", label2="value2"}
Без этой хуйни — нихуя не найдешь потом. - Где лежит: Всё пишется прямиком на локальный диск, сука. Сначала летит в WAL (это типа черновика, чтобы если всё ебнулось — не потерять), а потом уже упаковывается в компактные блоки. Экономия места, блядь, овердохуищная!
- В чём сила, брат? А сила в этих самых метках! Это не какая-то древняя иерархия, где всё по папочкам. Тут можно фильтровать, кучковать и выёбываться с запросами на PromQL как угодно. Главный козырь, ёпта!
Вот смотри, как это в жизни выглядит:
Допустим, считаем запросы. Запись говорит: в момент времени 1625070000 наловили аж 42 HTTP-запроса, которые были методом POST и вернули статус 200. Красота!
http_requests_total{method="POST", status="200"} 42 1625070000
А если данных накопится, как говна за баней, то сам Prometheus может и не вывезти. Тут на помощь приходят всякие внешние штуки — Thanos, VictoriaMetrics или этот ваш Cortex. Их и подключают, чтобы хранить историю за все года, а не за последние три дня.