Какие типы метрик поддерживает Prometheus?

«Какие типы метрик поддерживает Prometheus?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Counter Монотонно возрастающий счетчик. Идеален для подсчета событий: количество HTTP-запросов, ошибок, завершенных задач. При перезапуске приложения сбрасывается в ноль. В запросах я часто использую функции rate() или increase() для анализа скорости событий.

# Пример метрики и запроса
http_requests_total{method="POST", handler="/api/v1/users"}
# Запрос: скорость запросов за последние 5 минут
rate(http_requests_total[5m])

2. Gauge Текущее значение, которое может как увеличиваться, так и уменьшаться. Использую для измерения состояния: использование памяти, CPU, температура, количество активных соединений, размер очереди.

node_memory_MemFree_bytes
# Запрос: текущая свободная память на хосте
node_memory_MemFree_bytes{instance="host-01"}

3. Histogram Выборка наблюдений (например, длительности запросов) и их группировка в настраиваемые корзины (buckets). Позволяет рассчитывать перцентили (например, 95-й перцентиль времени ответа). При экспорте создает несколько временных рядов (_bucket, _sum, _count).

// Пример инструментирования на Go с помощью клиентской библиотеки
requestDuration := prometheus.NewHistogram(prometheus.HistogramOpts{
    Name: "http_request_duration_seconds",
    Buckets: []float64{.1, .25, .5, 1, 2.5, 5},
})

4. Summary Аналогичен гистограмме, но вычисляет квантили (φ-квантили) на стороне клиента (приложения). Менее гибок для агрегации на стороне Prometheus, но может быть полезен, если нужно точно контролировать расчет квантилей в самом приложении.

Выбор типа зависит от задачи: Counter для скорости событий, Gauge для мгновенных значений, Histogram для распределения величин (особенно latency).