О чем этот материал
Prometheus, exporter, scrape, типы метрик и практический взгляд на observability.
Это адаптированная версия учебной презентации: слайды разобраны в формате обычной статьи, чтобы материал было легче читать с телефона и возвращаться к нужным блокам позже.
Что внутри
Ниже краткий план материала. По нему удобно понять, в каком порядке разбирать тему.
- Поговорим о том, зачем нам метрики и как они выглядят в Prometheus
- Поговорим о том, что такое exporter
- Рассмотрим основные типы метрик и их особенности
- Посмотрим как писать метрики из кода Go приложения
- Разберем вопросы
Метрики на примере
Prometheus
Основные понятия
http_requests_total{code="200", handler="billing", method="get"} 69875
Prometheus.
выполняются раз в интервал времени. Этот интервал называют scrape interval.
Экспортер, как правило, не хранит метрики во времени (хотя можно и так), а только конечные значения, которые перезаписываются
- Метрика – имя, метки (теги, labels), значение.
- Сбор метрик может происходить по модели Pull или Push
- Exporter - это приложение, которая предоставляет метрики в формате
- Запрос метрики у Экспортера называется scrape. Запросы
Prometheus. Типы метрик. Основные
старта (рестарта) Экспортера. По сути счетчик.
(например, объём используемой оперативной памяти). По сути датчик.
- Counter - числовое значение, которое постоянно увеличивается, с самого
- Gauge - значение, которое может как увеличиваться, так и уменьшаться
Prometheus. Типы метрик. Counter
Отображение метрик типа Counter в сыром виде
Prometheus. Типы метрик. Counter increase(some_metric_name{}[1m])
Prometheus. Типы метрик. Составные
Например: 0.5, 0.8, 0.9, 0.95, 1. Что соответствует процентам 50%, 80% и так далее;
для длительности http-запроса: 100мс, 200мс, 400мс, 800мс, 1.6с Если промахнулись с порогами – метрика может стать бесполезной.
- Summary – Данные распределяются по квантилям, т.е. числа от 0 до 1.
- Histogram – Задаем пороги для значений выборки (агрегации). Например,
Prometheus. Типы метрик. Summary
Значение квантиля попадает в метку (label) quantile.
были <= X.
событий – в метрику с постфиксом _count и общая сумма всех событий с постфиксом _sum.
Что это значит:
- По всем событиям вычисляет квантили (0.5, 0.75, 0.9, 0.95, 0.99, 1).
- Значение X для квантиля 0.9 означает, что для 90% событий показания
- Помимо квантилей всегда записывается количество полученных
Prometheus. Типы метрик. Histogram
(buckets)
заданного порога
событий – в метрику с постфиксом _count и общая сумма всех событий с постфиксом _sum.
Что это значит:
- Требует, чтобы при инициализации были заданы пороги для “бакетов”
- Считает количество событий, значения которых были меньше
- Помимо бакетов всегда записывается общее количество полученных
Пишем метрики из приложения Go https://github.com/prometheus/client_golang
Пишем метрики из приложения Go
значений мерики
- Используем отдельный HTTP сервер на отдельном порту
- Используем готовый хэндлер из библиотеки
- Готовим переменную для метрики
- Объявляем метрику и ее параметры
- Пишем метод для обновления