Что такое метрика типа Counter в Prometheus и чем она отличается от Gauge?

Ответ

Метрика типа 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 — может как увеличиваться, так и уменьшаться (текущее количество активных горутин, температура процессора, размер очереди). Его значение интересно само по себе в конкретный момент времени.