Шпаргалка по PromQL: частые запросы с примерами

Готовые PromQL-выражения для типовых задач мониторинга: rate по счётчикам, агрегации, квантили из гистограмм, топ-N и заготовки алертов. Скопируйте и адаптируйте под свои метрики.

Селекторы и матчеры

http_requests_total{job="api", code=~"5.."}
  • = точное совпадение, != отрицание
  • =~ regex-совпадение, !~ regex-отрицание

Rate по счётчикам

sum(rate(http_requests_total[5m])) by (code)

rate() — для счётчиков (только растут). Окно [5m] должно покрывать минимум 4 скрейпа.

Агрегации

avg by (instance) (node_load1)
topk(5, sum by (pod) (container_memory_working_set_bytes))

Квантили из гистограмм

histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

Группировать по le нужно только внутри histogram_quantile.

Доля ошибок (error rate)

sum(rate(http_requests_total{code=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))

Заготовки алертов

# Хост недоступен
up{job="node"} == 0

# CPU выше 90% пять минут
avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.9

# Скоро кончится диск
predict_linear(node_filesystem_avail_bytes[6h], 4*3600) < 0

Подсказки

  • increase(x[1h]) — суммарный прирост счётчика за час
  • irate() — для быстрых графиков, rate() — для алертов
  • Сначала фильтруйте лейблами, потом агрегируйте — так дешевле по кардинальности