Files
grafana/pkg/registry/apis/iam/metrics.go

67 lines
2.2 KiB
Go

package iam
import (
"sync"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/prometheus/client_golang/prometheus"
)
const (
metricsNamespace = "iam"
metricsSubSystem = "apiserver"
)
var (
registerOnce sync.Once
hooksWaitHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: metricsNamespace,
Subsystem: metricsSubSystem,
Name: "hooks_wait_duration_seconds",
Help: "Time spent in the hooks waiting for a ticket to start processing",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 5), // 1ms to ~16s
}, []string{"resource_type", "operation"})
// hooksDurationHistogram tracks the total duration of hook operations
hooksDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: metricsNamespace,
Subsystem: metricsSubSystem,
Name: "hooks_operation_duration_seconds",
Help: "Time spent executing hook operations (create, update, delete)",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 10), // 1ms to ~1s
}, []string{"resource_type", "operation", "status"})
// hooksOperationCounter tracks the number of hook operations
hooksOperationCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: metricsNamespace,
Subsystem: metricsSubSystem,
Name: "hooks_operations_total",
Help: "Total number of hook operations by resource type, operation, and status",
}, []string{"resource_type", "operation", "status"})
// hooksTuplesCounter tracks the number of tuples written/deleted
hooksTuplesCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: metricsNamespace,
Subsystem: metricsSubSystem,
Name: "hooks_tuples_total",
Help: "Total number of tuples written or deleted by resource type and operation type",
}, []string{"resource_type", "operation", "action"})
)
func registerMetrics(reg prometheus.Registerer) {
registerOnce.Do(func() {
metrics := []prometheus.Collector{
hooksWaitHistogram,
hooksDurationHistogram,
hooksOperationCounter,
hooksTuplesCounter,
}
for _, metric := range metrics {
if err := reg.Register(metric); err != nil {
log.New("iam.apis").Warn("failed to register iam apiserver metrics", "error", err)
}
}
})
}