Этот вопрос проверяет понимание, как использовать счётчики Prometheus (counter) и превращать их в полезные графики и дашборды в Grafana.
Метрики типа counter в Prometheus всегда растут (или обнуляются при рестарте), поэтому в Grafana обычно строят графики не по “сырым” значениям, а по их производным — с помощью функций rate() или increase(). Это позволяет получать, например, число запросов в секунду или количество ошибок за интервал. В Grafana настраивают запросы на Prometheus (через PromQL), выбирают нужный временной интервал и строят графики/панели. Таким образом, счётчики превращаются в наглядные показатели нагрузки и ошибок.
Метрика типа counter — базовый тип в Prometheus.
Она монотонно возрастает (только увеличивается) и может сбрасываться при рестарте процесса. Это идеально подходит для счёта событий: запросов, ошибок, задач.
python
from prometheus_client import Counter
REQUESTS_TOTAL = Counter(
"http_requests_total",
"Total HTTP requests",
["method", "status"]
)
def handle_request(method, status):
REQUESTS_TOTAL.labels(method=method, status=status).inc()
В метрике будем получать строки вида:
text
http_requests_total{method="GET",status="200"} 1243
http_requests_total{method="GET",status="500"} 12
Если просто построить график http_requests_total, он будет монотонно расти — это не очень полезно.
Нас обычно интересует скорость событий: запросов в секунду, ошибок в минуту и т.д.
rate() и increase()В PromQL есть две ключевые функции:
rate(counter[5m]) — средняя скорость роста метрики за последние 5 минут;
increase(counter[5m]) — суммарный прирост за интервал.
Примеры запросов для Grafana:
Запросов в секунду:
text
rate(http_requests_total[5m])
Количество 500-х ответов в минуту:
text
increase(http_requests_total{status="500"}[1m])
В Grafana при создании панели:
Выбираем источник данных: Prometheus.
Вводим PromQL-запрос, например:
text
sum(rate(http_requests_total[5m])) by (status)
Настраиваем визуализацию (график, столбцы, single stat).
Опционально добавляем пороги (thresholds) и алерты.
http_requests_total — общий счётчик запросов.
Графики в Grafana:
“Requests per second” → sum(rate(http_requests_total[1m]))
“5xx per minute” → sum(increase(http_requests_total{status=~"5.."}[1m]))
“Error rate %” → отношение ошибок к общему числу запросов.
Счётчик (counter) сам по себе — просто число. Смысл появляется, когда ты используешь функции rate() и increase() и строишь на их основе панели в Grafana. Это стандартный способ получать понятные метрики вроде “запросы в секунду” и “ошибки в минуту”.