Ответ
Метрика типа Counter (счетчик) в Prometheus — это кумулятивная метрика, значение которой может только монотонно возрастать или быть сброшено до нуля (например, при перезапуске сервиса).
Основные характеристики:
- Монотонность: Значение никогда не уменьшается.
- Назначение: Идеально подходит для подсчета событий, которые происходят с течением времени. Например:
- Количество обработанных HTTP-запросов.
- Число выполненных задач в очереди.
- Количество возникших ошибок.
Пример кода на Go:
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
// promauto автоматически регистрирует метрику в default-регистре Prometheus.
var httpRequestsTotal = promauto.NewCounter(prometheus.CounterOpts{
Name: "myapp_http_requests_total",
Help: "Total number of processed HTTP requests.",
})
func handleRequest() {
// Увеличиваем счетчик на 1 при каждом вызове
httpRequestsTotal.Inc()
// ... логика обработки запроса
}
Как анализировать Counter?
Сами по себе абсолютные значения счетчика редко бывают полезны. Гораздо важнее скорость их изменения. Для этого в языке запросов PromQL используются функции:
rate(http_requests_total[5m])
: вычисляет среднюю скорость роста счетчика в секунду за последние 5 минут.increase(http_requests_total[1h])
: вычисляет, на сколько счетчик вырос за последний час.
Ключевое отличие от Gauge:
- Counter — только растет (количество запросов, ошибок). Используется с
rate()
. - Gauge — может как увеличиваться, так и уменьшаться (текущее количество активных горутин, температура процессора, размер очереди). Его значение интересно само по себе в конкретный момент времени.