prometheus client

Тема дорожной карты · Golang

Метрики Prometheus в Go предоставляются официальной библиотекой github.com/prometheus/client_golang, которая обеспечивает набор типов для инструментирования Golang-сервисов. Эти типы включают prometheus.Counter, prometheus.Gauge, prometheus.Histogram и prometheus.Summary, которые позволяют отслеживать различные метрики, такие как количество запросов, среднее время выполнения и другие важные показатели производительности. Регистрация метрик осуществляется через prometheus.MustRegister(myCounter), а публикация метрик по HTTP осуществляется с помощью promhttp.Handler() на специфический эндпоинт /metrics.

Организация метрик с использованием описательных наборов меток (prometheus.NewCounterVec(opts, []string{"method", "status"})) позволяет эффективно анализировать данные, разбивая их по HTTP-методу, gRPC-сервису или бизнес-измерению. Это делает возможным использование таких инструментов, как Grafana, для создания дашбордов, которые наглядно демонстрируют метрики и помогают в понимании работы сервиса.

Подпакет promauto упрощает процесс регистрации метрик, объединяя prometheus.MustRegister и создание типа в одном вызове. Это значительно уменьшает количество шаблонного кода в крупных Golang-кодовых базах, делая код более чистым и удобным для поддержки.

Сочетание метрик Prometheus с трассировкой OpenTelemetry и структурированным логированием (Zap или log/slog) предоставляет Golang-командам полный стек наблюдаемости, необходимый для надёжной эксплуатации сервисов в Kubernetes. Такой подход позволяет не только отслеживать метрики, но и анализировать трассировки и логи, что значительно упрощает диагностику и решение проблем.

Как это работает

Prometheus client строится на основе log/slog (структурированное логирование, Yöntem: 1.21+), Prometheus-клиента (github.com/prometheus/client_golang), OpenTelemetry Go SDK для traces + metrics. net/http/pprof экспонирует профили на отдельном порту. expvar — лёгкая альтернатива Prometheus для простых счётчиков. Cross-cutting concern: пробрасывайте context.Context везде — trace ID распространяются автоматически.

Когда применять

slog — для всего нового логирования: встроен, JSON из коробки, level-aware. Prometheus /metrics — на каждый сервис с первого дня. OpenTelemetry tracing — когда сервисов больше одного. /debug/pprof/* — на admin-порт, IP-restricted, за load balancer.

Типичные ошибки

Ловушки prometheus client: логирование через fmt.Println вместо slog (неструктурированно, дорого запрашивать); экспозиция /debug/pprof в публичный интернет (огромная утечка инфы + DoS-вектор); high-cardinality Prometheus-labels (request-id, user-id — Prometheus давится); нет sampling traces — backend перегружен.

Связанные понятия

Полезные ресурсы