Slide 44
Slide 44 text
◆
◆
import (
"context"
"net/url"
"time"
"github.com/prometheus/client_golang/prometheus"
clmetrics "k8s.io/client-go/tools/metrics"
crmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
)
var (
rateLimiterDelay = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "rest_client_rate_limiter_duration_seconds",
Help: "client-go rate limiter delay in seconds. Broken down by verb, and host.",
Buckets: []float64{0.005, 0.025, 0.1, 0.25, 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 30.0, 60.0},
},
[]string{"verb", "host"},
)
_ clmetrics.LatencyMetric = &latencyAdapter{}
)
func init() {
crmetrics.Registry.MustRegister(rateLimiterDelay)
adapter := latencyAdapter{
metric: rateLimiterDelay,
}
clmetrics.RateLimiterLatency = &adapter
}
type latencyAdapter struct {
metric *prometheus.HistogramVec
}
func (c *latencyAdapter) Observe(_ context.Context, verb string, u url.URL, latency time.Duration) {
c.metric.WithLabelValues(verb, u.Host).Observe(latency.Seconds())
}