Какие существуют основные типы метрик в системах мониторинга, таких как Prometheus?

Ответ

В современных системах мониторинга, и в частности в популярной для Go связке с Prometheus, выделяют четыре основных типа метрик:

  1. Counter (Счётчик) — монотонно возрастающее значение. Используется для подсчета событий, например, общего числа HTTP-запросов или количества ошибок. Не может уменьшаться, только сбрасываться на 0 при перезапуске сервиса.

    requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{
        Name: "http_requests_total",
        Help: "Total number of HTTP requests.",
    })
  2. Gauge (Измеритель) — значение, которое может произвольно увеличиваться и уменьшаться. Идеально подходит для измерения текущих состояний: количество активных горутин, использование памяти, загрузка CPU, длина очереди.

    activeConnections = prometheus.NewGauge(prometheus.GaugeOpts{
        Name: "current_active_connections",
        Help: "Current number of active connections.",
    })
  3. Histogram (Гистограмма) — распределяет наблюдения (например, длительность запроса) по настраиваемым корзинам (бакетам) и предоставляет их суммарное значение. Позволяет вычислять квантили (например, 95-й перцентиль времени ответа) на стороне сервера Prometheus.

    responseLatency = prometheus.NewHistogram(prometheus.HistogramOpts{
        Name:    "http_response_latency_seconds",
        Help:    "Response latency in seconds.",
        Buckets: prometheus.DefBuckets, // Предопределенные бакеты
    })
  4. Summary (Сводка) — похожа на гистограмму, но вычисляет квантили непосредственно на стороне клиентского приложения и отправляет их в Prometheus. Более ресурсоемка для приложения, но менее требовательна к ресурсам сервера Prometheus при расчете квантилей.

Ответ 18+ 🔞

А, слушай, вот это тема, про которую можно сломать мозг, но если разобраться — всё проще пареной репы, ей-богу. Сидишь, смотришь на эти графики в Графане, а там какие-то цифры пляшут. А вся магия, блядь, начинается вот с этих четырёх типов метрик в Прометеусе. Их всего четыре, но если перепутать — будет пиздец, а не мониторинг.

Первое, счётчик, он же Counter. Представь себе счётчик Гейгера, только тикает он не от радиации, а от событий. Запрос пришёл — тик. Ошибка вылезла — тик. Он, сука, только вверх ползёт, как долг по ипотеке. Уменьшить его нельзя, только если сервис нахуй упал и обнулился. Нужен, чтобы отвечать на вопросы вроде «сколько всего запросов обработали за вчера?».

requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{
    Name: "http_requests_total",
    Help: "Total number of HTTP requests.",
})

Дальше — Gauge, или измеритель. Вот это уже веселее. Это как стрелка на бензобаке: может вверх, может вниз. Сколько сейчас горутин висят, сколько оперативки жрёт процесс, температура процессора — всё это он. Хочешь отследить, как очередь набухает, а потом сдувается — тебе сюда.

activeConnections = prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "current_active_connections",
    Help: "Current number of active connections.",
})

А теперь, блядь, готовься, тут начинается настоящая магия. Histogram, гистограмма. Это не просто цифра, это, сука, целое расследование. Она берёт твои замеры, например, время ответа сервера, и раскидывает их по корзинам. «От 0 до 100 мс», «от 100 до 200 мс» и так далее. Потом в Прометеусе можно спросить: «эй, а какой у меня 95-й перцентиль?» — и он тебе покажет, ниже какой задержки находятся 95% запросов. Охуенно удобно, но бакеты эти, корзины, надо заранее придумать.

responseLatency = prometheus.NewHistogram(prometheus.HistogramOpts{
    Name:    "http_response_latency_seconds",
    Help:    "Response latency in seconds.",
    Buckets: prometheus.DefBuckets, // Готовые корзины, чтоб не париться
})

Ну и на десерт — Summary, сводка. Сестра-близнец гистограммы, но с прикрученным, блядь, фитильком. Она сама, прямо в твоём приложении, считает эти самые квантили (типа медиану, 95-й перцентиль). С одной стороны — для Прометеуса это легче, он готовые цифры получает. С другой — твоё приложение начинает потеть, потому что расчёты эти не из лёгких. Выбирай, что тебе дороже: ресурсы сервера мониторинга или ресурсы твоего гофера.

Вот и вся философия, ёпта. Четыре кита, на которых держится вся эта ебля с графиками и алертами. Перепутал Counter с Gauge — получишь алерт, что «всё пропало», когда на самом деле просто очередь опустела. Так что думай, что и зачем меришь, а то будет тебе, как в том анекдоте, «ядра — чистый изумруд», а ты такой: «Да не я дрочистый, блядь, изумруд!».