Короткий ответ
Типичный набор: counter http_requests_total для количества запросов и ошибок, histogram http_request_duration_seconds для latency с перцентилями, gauge db_connection_pool_in_use для занятости пула соединений, и бизнес-метрики типа counter orders_created_total.
Как это работает подробнее
counter — монотонно растущее значение, удобно для вычисления rate() за интервал; gauge — произвольно растущее/убывающее текущее значение; histogram распределяет наблюдения по бакетам и позволяет вычислять перцентили через histogram_quantile.
Пример кода
example.py
from prometheus_client import Counter, Histogram, Gauge
REQUESTS = Counter("http_requests_total", "Total HTTP requests", ["method", "path", "status"])
LATENCY = Histogram("http_request_duration_seconds", "Request latency", ["path"])
POOL_IN_USE = Gauge("db_connection_pool_in_use", "Connections currently in use")
@LATENCY.labels(path="/orders").time()
def handle_orders_request():
REQUESTS.labels(method="GET", path="/orders", status="200").inc()Что использовать на практике
- Рекомендация. latency лучше измерять histogram, а не average — среднее скрывает длинный хвост медленных запросов; по counter с лейблом status считают error rate для алертов SLO; gauge пула соединений помогает заметить приближение к исчерпанию до таймаутов.
Подводные камни
- Риск. заводить лейбл с высокой кардинальностью (например, user_id) — взрывной рост числа временных рядов; мерить latency как gauge вместо histogram, что не даёт перцентилей по множеству запросов.