Ответ
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).