Пакет metrics предоставляет удобный способ регистрации и экспонирования метрик Prometheus, включая стандартные метрики Go-приложения. Поддерживает кастомную регистрацию метрик, их повторное использование и предоставляет HTTP-обработчики для вывода значений и описаний метрик.
Структура Registry представляет собой обёртку над prometheus.Registry, обеспечивающую потокобезопасную регистрацию метрик, экспонирование и описание зарегистрированных метрик.
Methods:
Создаёт новый Registry с предустановленными метриками:
go_*process_*build_info
Регистрирует метрику, если она ещё не была зарегистрирована. В противном случае возвращает уже существующую.
Возвращает HTTP-обработчик (/metrics), совместимый с Prometheus.
Возвращает HTTP-обработчик, печатающий описания всех зарегистрированных метрик в текстовом виде. Используется, например, для дебага.
Интерфейс Metric — это алиас для prometheus.Collector.
Обобщённая функция, упрощающая регистрацию метрик с сохранением типа.
Глобальный экземпляр Registry со всеми предустановленными метриками.
Типовые квантили для создания Summary-метрик
Преобразует time.Duration в миллисекунды как float64. Гарантирует, что 0 миллисекунд будет преобразовано в 1 (чтобы избежать нулевых значений в метриках).
import (
"net/http"
"github.com/txix-open/isp-kit/metrics"
"github.com/prometheus/client_golang/prometheus"
)
func main() {
registry := metrics.NewRegistry()
http.Handle("/metrics", registry.MetricsHandler())
http.ListenAndServe(":8080", nil)
}var myCounter = prometheus.NewCounter(prometheus.CounterOpts{
Name: "my_custom_counter_total",
Help: "A custom counter example",
})
func main() {
metrics.DefaultRegistry.GetOrRegister(myCounter).(prometheus.Counter).Inc()
}http.Handle("/metrics-description", metrics.DefaultRegistry.MetricsDescriptionHandler())