Перейти к основному содержимому

Практикум Prometheus — архитектура и модель данных

Инженеру Разработчику

Практикум, шаг 1 из 9. Дальше — установка.


Зачем Prometheus

Prometheus — система мониторинга и алертинга с открытым исходным кодом, де-факто стандарт для Kubernetes и cloud-native. В отличие от Zabbix с единым UI и push-агентами, Prometheus строится вокруг pull-опроса HTTP-эндпоинтов /metrics и языка запросов PromQL.

Цепочка работы:

  1. Scrape — сервер Prometheus по расписанию забирает метрики с targets.
  2. Store — значения пишутся в локальную TSDB (time series database).
  3. Query — PromQL и HTTP API для графиков и правил.
  4. Alert — alerting rules → Alertmanager → каналы оповещений.

Подробное сравнение с Zabbix и ELK — в главе про мониторинг.


Архитектурные компоненты

КомпонентНазначение
Prometheus ServerScrape, TSDB, rule engine, web UI (:9090)
ExportersАдаптеры для ОС, БД, SNMP — отдают текстовый exposition format
PushgatewayБуфер для краткоживущих jobs (CI, cron), которые Prometheus не успеет опросить
AlertmanagerГруппировка, inhibition, маршрутизация алертов
Service discoveryKubernetes, Consul, DNS, file_sd — динамический список targets

Официальный обзор — Introduction / Overview.


Pull и push

МодельКто инициируетПлюсыМинусы
Pull (Prometheus)Сервер мониторингаЦентрализованный контроль targets, проще обнаружить «мёртвый» scrapeНужен доступ с Prometheus к каждому эндпоинту
Push (Zabbix active, OTel)Агент или приложениеУдобно за NAT, для batchСложнее контролировать кардинальность

Prometheus по умолчанию pull; исключение — Pushgateway для одноразовых задач. Телеметрия через OpenTelemetry часто идёт push в collector, который уже может отдавать метрики Prometheus scrape или remote_write.


Модель данных

Каждая метрикавременной ряд с именем и метками (labels):

http_requests_total{job="api", instance="10.0.0.5:8080", method="GET", status="200"} 1024
  • Имя — что измеряем (http_requests_total, node_cpu_seconds_total).
  • Labels — измерения (job, instance, method, status).
  • Значение — число с timestamp при каждом scrape.
Кардинальность

Каждая уникальная комбинация labels — отдельный ряд в памяти. Метка user_id с миллионами значений «убьёт» Prometheus. Для идентификаторов запросов используйте логи и трассировки (шаг 7).


Что Prometheus не заменяет

ЗадачаИнструмент в экосистеме
Долгое хранение (>15–30 дней)Mimir, Thanos, Cortex
Полнотекстовые логиLoki, ELK
Распределённые трейсыTempo, Jaeger
Профили CPU/heapPyroscope
Единый UI корреляцииGrafana

Prometheus закрывает метрики и алерты по метрикам; полная observability собирается вокруг него.


Место в стеке Grafana Labs

Современный маршрут Grafana Labs (часто LGTM+):

  • Loki — логи
  • Grafana — визуализация и alerting
  • Tempo — трейсы
  • Mimir — долгосрочные метрики (remote storage для Prometheus)
  • Alloy — единый агент вместо связки Prometheus Agent + Promtail + OTel Collector
  • Beyla — eBPF-метрики без изменения кода
  • Faro — Real User Monitoring (браузер)
  • Pyroscope — continuous profiling

В этом практикуме Prometheus остаётся точкой входа; расширение — в шагах 7–9.


Проверка понимания

  1. Чем target отличается от job?
  2. Зачем Pushgateway, если Prometheus pull?
  3. Почему высокая кардинальность labels опасна?
Дальше

Установите сервер и получите первый график — шаг 2. Ориентир — First steps и Getting started.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").