metrics

package
v1.63.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 18, 2025 License: MIT Imports: 8 Imported by: 3

README

Package metrics

Пакет metrics предоставляет удобный способ регистрации и экспонирования метрик Prometheus, включая стандартные метрики Go-приложения. Поддерживает кастомную регистрацию метрик, их повторное использование и предоставляет HTTP-обработчики для вывода значений и описаний метрик.

Types

Registry

Структура Registry представляет собой обёртку над prometheus.Registry, обеспечивающую потокобезопасную регистрацию метрик, экспонирование и описание зарегистрированных метрик.

Methods:

func NewRegistry() *Registry

Создаёт новый Registry с предустановленными метриками:

  • go_*
  • process_*
  • build_info
(r *Registry) GetOrRegister(metric Metric) Metric

Регистрирует метрику, если она ещё не была зарегистрирована. В противном случае возвращает уже существующую.

(r *Registry) MetricsHandler() http.Handler

Возвращает HTTP-обработчик (/metrics), совместимый с Prometheus.

(r *Registry) MetricsDescriptionHandler() http.Handler

Возвращает HTTP-обработчик, печатающий описания всех зарегистрированных метрик в текстовом виде. Используется, например, для дебага.

Metric

Интерфейс Metric — это алиас для prometheus.Collector.

func GetOrRegister[M Metric](registry *Registry, metric M) M

Обобщённая функция, упрощающая регистрацию метрик с сохранением типа.

Global variables

var DefaultRegistry = NewRegistry()

Глобальный экземпляр Registry со всеми предустановленными метриками.

var DefaultObjectives map[float64]float64

Типовые квантили для создания Summary-метрик

Functions

func Milliseconds(duration time.Duration) float64

Преобразует time.Duration в миллисекунды как float64. Гарантирует, что 0 миллисекунд будет преобразовано в 1 (чтобы избежать нулевых значений в метриках).

Usage

Default usage flow
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)
}
Registering custom metric
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()
}
Using description handler
http.Handle("/metrics-description", metrics.DefaultRegistry.MetricsDescriptionHandler())

Documentation

Overview

nolint:ireturn

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultObjectives = map[float64]float64{
		0.5:  0.05,
		0.9:  0.01,
		0.95: 0.005,
		0.99: 0.001,
	}
)

nolint:gochecknoglobals,mnd

View Source
var (
	DefaultRegistry = NewRegistry()
)

nolint:gochecknoglobals

Functions

func GetOrRegister

func GetOrRegister[M Metric](registry *Registry, metric M) M

func Milliseconds

func Milliseconds(duration time.Duration) float64

Types

type Metric

type Metric interface {
	prometheus.Collector
}

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

func NewRegistry

func NewRegistry() *Registry

func (*Registry) GetOrRegister

func (r *Registry) GetOrRegister(metric Metric) Metric

func (*Registry) MetricsDescriptionHandler

func (r *Registry) MetricsDescriptionHandler() http.Handler

func (*Registry) MetricsHandler

func (r *Registry) MetricsHandler() http.Handler

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL