Типы метрик
Тема дорожной карты · Observability
В наблюдаемости используются четыре фундаментальных типа метрик: Counter, Gauge, Histogram и Summary. Counter — это монотонно возрастающее значение, которое сбрасывается только при перезапуске; он применяется для подсчёта событий, таких как HTTP-запросы или ошибки; функции rate() и increase() в Prometheus вычисляют полезные скорости на основе счётчиков. Gauge представляет единственное числовое значение, которое может как увеличиваться, так и уменьшаться, — например, текущее использование памяти, количество активных горутин или глубина очереди. Histogram сэмплирует наблюдения и подсчитывает их в настраиваемых корзинах, позволяя вычислять перцентили задержки с помощью histogram_quantile() в Prometheus. Summary похож на Histogram, но вычисляет настраиваемые квантили на стороне клиента, что обеспечивает точность, но снижает гибкость при агрегировании между экземплярами. Понимание этих типов метрик фундаментально для эффективной наблюдаемости: выбор неправильного типа ведёт к вводящим в заблуждение дашбордам и ошибочным расчётам SLI.
Как это работает
Типы метрик — числовые агрегаты по времени: counters, gauges, histograms. Дёшево хранить, быстро запрашивать, идеально для дашбордов + алертов. Стандарт: Prometheus (де факто), VictoriaMetrics (совместимый, часто проще эксплуатировать), формат OpenMetrics. Инструментируйте приложения client-библиотеками (prom-client для Node, prometheus_client для Python и т.д.). Конвенция имён: <namespace>_<subsystem>_<name>_<unit>. Labels = измерения; cardinality важна.
Когда применять
По дефолту Prometheus-формат метрик везде. 4 золотых сигнала (rate, error, latency-percentile, saturation) на каждый сервис. Histograms — для latency (per-replica + агрегируемые). Pre-aggregate через recording rules для дашбордов с частыми запросами. Cardinality labels ограниченная — высокая cardinality убивает Prometheus.
Типичные ошибки
Ловушки Типы метрик: per-user-id labels (взрыв cardinality); Counter где должен быть Histogram (http_requests не говорит про latency); короткий retention без long-term storage backend (когда исследуете "что было на прошлой неделе", данных уже нет).