Типы метрик: counter, gauge, histogram, summary
Урок разбирает четыре типа метрик Prometheus и когда какой выбирать.
Тип метрики определяет смысл числа и то, какие операции над ним корректны: одни значения только растут, другие колеблются, третьи описывают распределение.
Выбор типа метрики — не формальность. Если перепутать counter и gauge, формулы вроде rate() дадут бессмыслицу. Разберём все четыре типа на примерах.
Counter — счётчик
Counter только растёт (и обнуляется при рестарте процесса). Им считают события: число запросов, ошибок, отправленных байт. Само значение counter малоинформативно — важна его скорость роста, которую даёт функция rate().
http_requests_total # это counter
rate(http_requests_total[5m]) # запросов в секунду за 5 минутGauge — измеритель
Gauge может расти и падать. Это «мгновенное» значение: текущая температура, свободная память, число активных соединений, длина очереди.
node_memory_MemAvailable_bytes # gauge: то растёт, то падает
queue_length # gauge: текущая длина очередиПрименять rate() к gauge нельзя — у него нет смысла «скорости роста счётчика».
Histogram — гистограмма
Histogram раскладывает наблюдения по корзинам (buckets) с границами. Идеален для задержек: по нему считают процентили. Под капотом histogram порождает несколько рядов: _bucket по границам, _sum и _count.
# p95 задержки по гистограмме
histogram_quantile(
0.95,
rate(http_request_duration_seconds_bucket[5m])
)Summary — сводка
Summary тоже описывает распределение, но процентили считаются на стороне клиента и хранятся готовыми. Минус: такие квантили нельзя корректно агрегировать между инстансами. Поэтому для распределённых сервисов чаще выбирают histogram.
Как работает под капотом
Counter и gauge — это один ряд с одним числом. Histogram и summary «разворачиваются» в несколько рядов. Это важно для кардинальности: гистограмма с десятью корзинами и пятью лейблами создаёт куда больше рядов, чем одинокий counter.
| Тип | Поведение | Пример |
| counter | только растёт | число запросов |
| gauge | растёт и падает | свободная память |
| histogram | корзины наблюдений | задержка, p95 |
| summary | готовые квантили | задержка на одном инстансе |
Частые ошибки
- Применять
rate()к gauge. Скорость роста имеет смысл только для counter. - Брать gauge там, где нужен counter. Если значение можно «обнулить и пересчитать», вы потеряете историю событий.
- Усреднять квантили summary между инстансами. Математически это неверно — для агрегации берите histogram.
Итог
- Counter только растёт — смотрите его через
rate(). - Gauge колеблется — это мгновенное значение.
- Histogram даёт процентили через
histogram_quantile(); summary считает их на клиенте.