Select Git revision
request.go 2.35 KiB
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
)
var (
RequestLabels = []string{
"service",
"method",
}
)
type RequestMetrics struct {
Total *prometheus.CounterVec
FailedTotal *prometheus.CounterVec
DurationSeconds *prometheus.HistogramVec
}
// Пример использования:
// ...
// requestMetrics := metrics.NewRequestMetrics("content")
// s.Items = itemsMiddleware.MetricsMiddleware(requestMetrics)
// s.Collections = collectionsMiddleware.MetricsMiddleware(requestMetrics)
// ...
// NewRequestMetrics возвращает метрики для подсчета количества удачных/неудачных запросов, а так же длительности ответов.
//
// subsystem указывает подсистему, к которой принадлежат метрики.
// Значение должно быть уникальным, совпадение разрешено только при совпадении ключей labels. Пустое значение допустимо.
//
// labels - список меток, где каждый элемент метки соответствует парам ключ-значение. Отсутствие допустимо.
// Значения меток должны быть уникальными в рамках одной subsystem.
//
// Метрики записываются в prometheus.DefaultRegisterer
func NewRequestMetrics(subsystem string) *RequestMetrics {
metrics := &RequestMetrics{
Total: prometheus.NewCounterVec(prometheus.CounterOpts{
Subsystem: subsystem,
Name: "service_requests_total",
Help: "Количество запросов.",
}, RequestLabels),
FailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{
Subsystem: subsystem,
Name: "service_requests_failed_total",
Help: "Количество запросов, вернувших ошибку.",
}, RequestLabels),
DurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{
Subsystem: subsystem,
Name: "service_request_duration_seconds",
Help: "Длительность обработки запроса.",
Buckets: prometheus.DefBuckets,
}, RequestLabels),
}
prometheus.MustRegister(
metrics.Total,
metrics.FailedTotal,
metrics.DurationSeconds,
)
return metrics
}