Все предыдущие посты серии — про то, что кормит Prometheus метриками (node_exporter, postgres_exporter, rabbitmq_prometheus) — сам Prometheus в стеке до сих пор не появлялся. Пора закрыть пробел: это сердце модели “L” (метрики) в LGTM, и модель работы у него принципиально другая, чем у Loki/Tempo.

Главное архитектурное отличие: Prometheus сам ходит за метриками (pull), а не ждёт, пока их пришлют (push, как в Graphite/StatsD). Конфиг — scrape_configs:

scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100"]
  - job_name: "postgres"
    static_configs:
      - targets: ["localhost:9187"]

Каждые scrape_interval (по умолчанию 1 минута, обычно ставят 15-30 секунд) Prometheus сам приходит на /metrics каждого таргета и забирает текущие значения.

Метрики хранятся локально, в собственной TSDB (time series database) на диске сервера — никакой внешней БД не требуется для базовой работы. Запросы — на PromQL:

rate(node_cpu_seconds_total{mode="idle"}[5m])

rate() — скорость роста counter-метрики за интервал (для counter-ов, которые только растут, смотреть на абсолютное значение бессмысленно — важна именно скорость изменения), [5m] — окно, по которому считается rate.

Локальное хранилище — не рассчитано на годы истории и множество реплик; для долгосрочного хранения и горизонтального масштабирования метрики отдают дальше через remote_write:

remote_write:
  - url: "http://localhost:9009/api/v1/push"

Это тот же путь, что описан у Mimir — сам Prometheus в таком режиме превращается в локальный буфер и точку сбора, а долгая история и запросы по ней уезжают в отдельную систему.

#prometheus #lgtm