mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #81531 from logicalhan/kas-migration
migrate kube-apiserver metrics to stability framework
This commit is contained in:
		@@ -20,9 +20,8 @@ go_library(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/cmd/kube-apiserver",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//cmd/kube-apiserver/app:go_default_library",
 | 
			
		||||
        "//pkg/util/prometheusclientgo:go_default_library",
 | 
			
		||||
        "//pkg/version/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/logs:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/prometheus/clientgo:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,9 +24,8 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/component-base/logs"
 | 
			
		||||
	_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugins
 | 
			
		||||
	"k8s.io/kubernetes/cmd/kube-apiserver/app"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/util/prometheusclientgo" // load all the prometheus client-go plugins
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/version/prometheus"      // for version metric registration
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,8 +30,6 @@ go_library(
 | 
			
		||||
        "//pkg/registry/rbac/rest:go_default_library",
 | 
			
		||||
        "//pkg/serviceaccount:go_default_library",
 | 
			
		||||
        "//pkg/util/flag:go_default_library",
 | 
			
		||||
        "//pkg/util/workqueue/prometheus:go_default_library",
 | 
			
		||||
        "//pkg/version:go_default_library",
 | 
			
		||||
        "//pkg/version/verflag:go_default_library",
 | 
			
		||||
        "//plugin/pkg/auth/authenticator/token/bootstrap:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library",
 | 
			
		||||
@@ -67,6 +65,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/cli/flag:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/cli/globalflag:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/prometheus/workqueue:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/version:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/helper:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,8 @@ import (
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	cliflag "k8s.io/component-base/cli/flag"
 | 
			
		||||
	"k8s.io/component-base/cli/globalflag"
 | 
			
		||||
	_ "k8s.io/component-base/metrics/prometheus/workqueue" // for workqueue metric registration
 | 
			
		||||
	"k8s.io/component-base/version"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver"
 | 
			
		||||
	aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme"
 | 
			
		||||
@@ -80,8 +82,6 @@ import (
 | 
			
		||||
	rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/serviceaccount"
 | 
			
		||||
	utilflag "k8s.io/kubernetes/pkg/util/flag"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // for workqueue metric registration
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version/verflag"
 | 
			
		||||
	"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/crypto/ssh:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -36,33 +36,44 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"golang.org/x/crypto/ssh"
 | 
			
		||||
 | 
			
		||||
	utilnet "k8s.io/apimachinery/pkg/util/net"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	tunnelOpenCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "ssh_tunnel_open_count",
 | 
			
		||||
			Help: "Counter of ssh tunnel total open attempts",
 | 
			
		||||
	tunnelOpenCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "ssh_tunnel_open_count",
 | 
			
		||||
			Help:           "Counter of ssh tunnel total open attempts",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	tunnelOpenFailCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "ssh_tunnel_open_fail_count",
 | 
			
		||||
			Help: "Counter of ssh tunnel failed open attempts",
 | 
			
		||||
	tunnelOpenFailCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "ssh_tunnel_open_fail_count",
 | 
			
		||||
			Help:           "Counter of ssh tunnel failed open attempts",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(tunnelOpenCounter)
 | 
			
		||||
	prometheus.MustRegister(tunnelOpenFailCounter)
 | 
			
		||||
	legacyregistry.MustRegister(tunnelOpenCounter)
 | 
			
		||||
	legacyregistry.MustRegister(tunnelOpenFailCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: Unit tests for this code, we can spin up a test SSH server with instructions here:
 | 
			
		||||
 
 | 
			
		||||
@@ -233,6 +233,8 @@
 | 
			
		||||
  - k8s.io/utils
 | 
			
		||||
  - k8s.io/apiserver/pkg/util/feature
 | 
			
		||||
  - k8s.io/component-base/featuregate
 | 
			
		||||
  - k8s.io/component-base/metrics
 | 
			
		||||
  - k8s.io/component-base/metrics/legacyregistry
 | 
			
		||||
 | 
			
		||||
- baseImportPath: "./vendor/k8s.io/node-api/"
 | 
			
		||||
  allowedImports:
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/trace:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -36,19 +38,19 @@ var (
 | 
			
		||||
type converterMetricFactory struct {
 | 
			
		||||
	// A map from a converter name to it's metric. Allows the converterMetric to be created
 | 
			
		||||
	// again with the same metric for a specific converter (e.g. 'webhook').
 | 
			
		||||
	durations   map[string]*prometheus.HistogramVec
 | 
			
		||||
	durations   map[string]*metrics.HistogramVec
 | 
			
		||||
	factoryLock sync.Mutex
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newConverterMertricFactory() *converterMetricFactory {
 | 
			
		||||
	return &converterMetricFactory{durations: map[string]*prometheus.HistogramVec{}, factoryLock: sync.Mutex{}}
 | 
			
		||||
	return &converterMetricFactory{durations: map[string]*metrics.HistogramVec{}, factoryLock: sync.Mutex{}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ crConverterInterface = &converterMetric{}
 | 
			
		||||
 | 
			
		||||
type converterMetric struct {
 | 
			
		||||
	delegate  crConverterInterface
 | 
			
		||||
	latencies *prometheus.HistogramVec
 | 
			
		||||
	latencies *metrics.HistogramVec
 | 
			
		||||
	crdName   string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -57,14 +59,15 @@ func (c *converterMetricFactory) addMetrics(converterName string, crdName string
 | 
			
		||||
	defer c.factoryLock.Unlock()
 | 
			
		||||
	metric, exists := c.durations[converterName]
 | 
			
		||||
	if !exists {
 | 
			
		||||
		metric = prometheus.NewHistogramVec(
 | 
			
		||||
			prometheus.HistogramOpts{
 | 
			
		||||
				Name:    fmt.Sprintf("apiserver_crd_%s_conversion_duration_seconds", converterName),
 | 
			
		||||
				Help:    fmt.Sprintf("CRD %s conversion duration in seconds", converterName),
 | 
			
		||||
				Buckets: latencyBuckets,
 | 
			
		||||
		metric = metrics.NewHistogramVec(
 | 
			
		||||
			&metrics.HistogramOpts{
 | 
			
		||||
				Name:           fmt.Sprintf("apiserver_crd_%s_conversion_duration_seconds", converterName),
 | 
			
		||||
				Help:           fmt.Sprintf("CRD %s conversion duration in seconds", converterName),
 | 
			
		||||
				Buckets:        latencyBuckets,
 | 
			
		||||
				StabilityLevel: metrics.ALPHA,
 | 
			
		||||
			},
 | 
			
		||||
			[]string{"crd_name", "from_version", "to_version", "succeeded"})
 | 
			
		||||
		err := prometheus.Register(metric)
 | 
			
		||||
		err := legacyregistry.Register(metric)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,8 @@ go_library(
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,9 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apiserver/pkg/admission"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -154,33 +154,35 @@ func (m *AdmissionMetrics) ObserveWebhook(elapsed time.Duration, rejected bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type metricSet struct {
 | 
			
		||||
	latencies        *prometheus.HistogramVec
 | 
			
		||||
	latenciesSummary *prometheus.SummaryVec
 | 
			
		||||
	latencies        *metrics.HistogramVec
 | 
			
		||||
	latenciesSummary *metrics.SummaryVec
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newMetricSet(name string, labels []string, helpTemplate string, hasSummary bool) *metricSet {
 | 
			
		||||
	var summary *prometheus.SummaryVec
 | 
			
		||||
	var summary *metrics.SummaryVec
 | 
			
		||||
	if hasSummary {
 | 
			
		||||
		summary = prometheus.NewSummaryVec(
 | 
			
		||||
			prometheus.SummaryOpts{
 | 
			
		||||
				Namespace: namespace,
 | 
			
		||||
				Subsystem: subsystem,
 | 
			
		||||
				Name:      fmt.Sprintf("%s_admission_duration_seconds_summary", name),
 | 
			
		||||
				Help:      fmt.Sprintf(helpTemplate, "latency summary in seconds"),
 | 
			
		||||
				MaxAge:    latencySummaryMaxAge,
 | 
			
		||||
		summary = metrics.NewSummaryVec(
 | 
			
		||||
			&metrics.SummaryOpts{
 | 
			
		||||
				Namespace:      namespace,
 | 
			
		||||
				Subsystem:      subsystem,
 | 
			
		||||
				Name:           fmt.Sprintf("%s_admission_duration_seconds_summary", name),
 | 
			
		||||
				Help:           fmt.Sprintf(helpTemplate, "latency summary in seconds"),
 | 
			
		||||
				MaxAge:         latencySummaryMaxAge,
 | 
			
		||||
				StabilityLevel: metrics.ALPHA,
 | 
			
		||||
			},
 | 
			
		||||
			labels,
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &metricSet{
 | 
			
		||||
		latencies: prometheus.NewHistogramVec(
 | 
			
		||||
			prometheus.HistogramOpts{
 | 
			
		||||
				Namespace: namespace,
 | 
			
		||||
				Subsystem: subsystem,
 | 
			
		||||
				Name:      fmt.Sprintf("%s_admission_duration_seconds", name),
 | 
			
		||||
				Help:      fmt.Sprintf(helpTemplate, "latency histogram in seconds"),
 | 
			
		||||
				Buckets:   latencyBuckets,
 | 
			
		||||
		latencies: metrics.NewHistogramVec(
 | 
			
		||||
			&metrics.HistogramOpts{
 | 
			
		||||
				Namespace:      namespace,
 | 
			
		||||
				Subsystem:      subsystem,
 | 
			
		||||
				Name:           fmt.Sprintf("%s_admission_duration_seconds", name),
 | 
			
		||||
				Help:           fmt.Sprintf(helpTemplate, "latency histogram in seconds"),
 | 
			
		||||
				Buckets:        latencyBuckets,
 | 
			
		||||
				StabilityLevel: metrics.ALPHA,
 | 
			
		||||
			},
 | 
			
		||||
			labels,
 | 
			
		||||
		),
 | 
			
		||||
@@ -191,9 +193,9 @@ func newMetricSet(name string, labels []string, helpTemplate string, hasSummary
 | 
			
		||||
 | 
			
		||||
// MustRegister registers all the prometheus metrics in the metricSet.
 | 
			
		||||
func (m *metricSet) mustRegister() {
 | 
			
		||||
	prometheus.MustRegister(m.latencies)
 | 
			
		||||
	legacyregistry.MustRegister(m.latencies)
 | 
			
		||||
	if m.latenciesSummary != nil {
 | 
			
		||||
		prometheus.MustRegister(m.latenciesSummary)
 | 
			
		||||
		legacyregistry.MustRegister(m.latenciesSummary)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,8 +34,9 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/apis/audit/v1beta1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/pborman/uuid:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,9 @@ package audit
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	auditinternal "k8s.io/apiserver/pkg/apis/audit"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -28,46 +29,58 @@ const (
 | 
			
		||||
	subsystem = "apiserver_audit"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	eventCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "event_total",
 | 
			
		||||
			Help:      "Counter of audit events generated and sent to the audit backend.",
 | 
			
		||||
	eventCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "event_total",
 | 
			
		||||
			Help:           "Counter of audit events generated and sent to the audit backend.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		})
 | 
			
		||||
	errorCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
	errorCounter = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "error_total",
 | 
			
		||||
			Help: "Counter of audit events that failed to be audited properly. " +
 | 
			
		||||
				"Plugin identifies the plugin affected by the error.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"plugin"},
 | 
			
		||||
	)
 | 
			
		||||
	levelCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "level_total",
 | 
			
		||||
			Help:      "Counter of policy levels for audit events (1 per request).",
 | 
			
		||||
	levelCounter = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "level_total",
 | 
			
		||||
			Help:           "Counter of policy levels for audit events (1 per request).",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"level"},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	ApiserverAuditDroppedCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
	ApiserverAuditDroppedCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "requests_rejected_total",
 | 
			
		||||
			Help: "Counter of apiserver requests rejected due to an error " +
 | 
			
		||||
				"in audit logging backend.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(eventCounter)
 | 
			
		||||
	prometheus.MustRegister(errorCounter)
 | 
			
		||||
	prometheus.MustRegister(levelCounter)
 | 
			
		||||
	prometheus.MustRegister(ApiserverAuditDroppedCounter)
 | 
			
		||||
	legacyregistry.MustRegister(eventCounter)
 | 
			
		||||
	legacyregistry.MustRegister(errorCounter)
 | 
			
		||||
	legacyregistry.MustRegister(levelCounter)
 | 
			
		||||
	legacyregistry.MustRegister(ApiserverAuditDroppedCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObserveEvent updates the relevant prometheus metrics for the generated audit event.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,16 +23,24 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 | 
			
		||||
	utilerrors "k8s.io/apimachinery/pkg/util/errors"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/apiserver/pkg/authentication/authenticator"
 | 
			
		||||
	"k8s.io/apiserver/pkg/authentication/user"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var clientCertificateExpirationHistogram = prometheus.NewHistogram(
 | 
			
		||||
	prometheus.HistogramOpts{
 | 
			
		||||
/*
 | 
			
		||||
 * By default, the following metric is defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var clientCertificateExpirationHistogram = metrics.NewHistogram(
 | 
			
		||||
	&metrics.HistogramOpts{
 | 
			
		||||
		Namespace: "apiserver",
 | 
			
		||||
		Subsystem: "client",
 | 
			
		||||
		Name:      "certificate_expiration_seconds",
 | 
			
		||||
@@ -53,11 +61,12 @@ var clientCertificateExpirationHistogram = prometheus.NewHistogram(
 | 
			
		||||
			(6 * 30 * 24 * time.Hour).Seconds(),
 | 
			
		||||
			(12 * 30 * 24 * time.Hour).Seconds(),
 | 
			
		||||
		},
 | 
			
		||||
		StabilityLevel: metrics.ALPHA,
 | 
			
		||||
	},
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(clientCertificateExpirationHistogram)
 | 
			
		||||
	legacyregistry.MustRegister(clientCertificateExpirationHistogram)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UserConversion defines an interface for extracting user info from a client certificate chain
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/server/httplog:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -21,29 +21,38 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/apiserver/pkg/authentication/authenticator"
 | 
			
		||||
	"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
 | 
			
		||||
	genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	authenticatedUserCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "authenticated_user_requests",
 | 
			
		||||
			Help: "Counter of authenticated requests broken out by username.",
 | 
			
		||||
	authenticatedUserCounter = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "authenticated_user_requests",
 | 
			
		||||
			Help:           "Counter of authenticated requests broken out by username.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"username"},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(authenticatedUserCounter)
 | 
			
		||||
	legacyregistry.MustRegister(authenticatedUserCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithAuthentication creates an http handler that tries to authenticate the given request as a user, and then
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/emicklei/go-restful:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,9 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	restful "github.com/emicklei/go-restful"
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/validation"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	utilnet "k8s.io/apimachinery/pkg/util/net"
 | 
			
		||||
@@ -34,15 +37,14 @@ import (
 | 
			
		||||
	"k8s.io/apiserver/pkg/endpoints/request"
 | 
			
		||||
	"k8s.io/apiserver/pkg/features"
 | 
			
		||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
			
		||||
 | 
			
		||||
	restful "github.com/emicklei/go-restful"
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	compbasemetrics "k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// resettableCollector is the interface implemented by prometheus.MetricVec
 | 
			
		||||
// that can be used by Prometheus to collect metrics and reset their values.
 | 
			
		||||
type resettableCollector interface {
 | 
			
		||||
	prometheus.Collector
 | 
			
		||||
	compbasemetrics.Registerable
 | 
			
		||||
	Reset()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -50,13 +52,22 @@ const (
 | 
			
		||||
	APIServerComponent string = "apiserver"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	// TODO(a-robinson): Add unit tests for the handling of these metrics once
 | 
			
		||||
	// the upstream library supports it.
 | 
			
		||||
	requestCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_request_total",
 | 
			
		||||
			Help: "Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, client, and HTTP response contentType and code.",
 | 
			
		||||
	requestCounter = compbasemetrics.NewCounterVec(
 | 
			
		||||
		&compbasemetrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_request_total",
 | 
			
		||||
			Help:           "Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, client, and HTTP response contentType and code.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		// The label_name contentType doesn't follow the label_name convention defined here:
 | 
			
		||||
		// https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/instrumentation.md
 | 
			
		||||
@@ -64,22 +75,24 @@ var (
 | 
			
		||||
		// should be all lowercase and separated by underscores.
 | 
			
		||||
		[]string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component", "client", "contentType", "code"},
 | 
			
		||||
	)
 | 
			
		||||
	deprecatedRequestCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_request_count",
 | 
			
		||||
			Help: "(Deprecated) Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.",
 | 
			
		||||
	deprecatedRequestCounter = compbasemetrics.NewCounterVec(
 | 
			
		||||
		&compbasemetrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_request_count",
 | 
			
		||||
			Help:           "(Deprecated) Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "group", "version", "resource", "subresource", "scope", "component", "client", "contentType", "code"},
 | 
			
		||||
	)
 | 
			
		||||
	longRunningRequestGauge = prometheus.NewGaugeVec(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
			Name: "apiserver_longrunning_gauge",
 | 
			
		||||
			Help: "Gauge of all active long-running apiserver requests broken out by verb, group, version, resource, scope and component. Not all requests are tracked this way.",
 | 
			
		||||
	longRunningRequestGauge = compbasemetrics.NewGaugeVec(
 | 
			
		||||
		&compbasemetrics.GaugeOpts{
 | 
			
		||||
			Name:           "apiserver_longrunning_gauge",
 | 
			
		||||
			Help:           "Gauge of all active long-running apiserver requests broken out by verb, group, version, resource, scope and component. Not all requests are tracked this way.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
 | 
			
		||||
	)
 | 
			
		||||
	requestLatencies = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	requestLatencies = compbasemetrics.NewHistogramVec(
 | 
			
		||||
		&compbasemetrics.HistogramOpts{
 | 
			
		||||
			Name: "apiserver_request_duration_seconds",
 | 
			
		||||
			Help: "Response latency distribution in seconds for each verb, dry run value, group, version, resource, subresource, scope and component.",
 | 
			
		||||
			// This metric is used for verifying api call latencies SLO,
 | 
			
		||||
@@ -87,81 +100,91 @@ var (
 | 
			
		||||
			// Thus we customize buckets significantly, to empower both usecases.
 | 
			
		||||
			Buckets: []float64{0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,
 | 
			
		||||
				1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40, 50, 60},
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component"},
 | 
			
		||||
	)
 | 
			
		||||
	deprecatedRequestLatencies = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	deprecatedRequestLatencies = compbasemetrics.NewHistogramVec(
 | 
			
		||||
		&compbasemetrics.HistogramOpts{
 | 
			
		||||
			Name: "apiserver_request_latencies",
 | 
			
		||||
			Help: "(Deprecated) Response latency distribution in microseconds for each verb, group, version, resource, subresource, scope and component.",
 | 
			
		||||
			// Use buckets ranging from 125 ms to 8 seconds.
 | 
			
		||||
			Buckets: prometheus.ExponentialBuckets(125000, 2.0, 7),
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(125000, 2.0, 7),
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
 | 
			
		||||
	)
 | 
			
		||||
	deprecatedRequestLatenciesSummary = prometheus.NewSummaryVec(
 | 
			
		||||
		prometheus.SummaryOpts{
 | 
			
		||||
	deprecatedRequestLatenciesSummary = compbasemetrics.NewSummaryVec(
 | 
			
		||||
		&compbasemetrics.SummaryOpts{
 | 
			
		||||
			Name: "apiserver_request_latencies_summary",
 | 
			
		||||
			Help: "(Deprecated) Response latency summary in microseconds for each verb, group, version, resource, subresource, scope and component.",
 | 
			
		||||
			// Make the sliding window of 5h.
 | 
			
		||||
			// TODO: The value for this should be based on our SLI definition (medium term).
 | 
			
		||||
			MaxAge: 5 * time.Hour,
 | 
			
		||||
			MaxAge:         5 * time.Hour,
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
 | 
			
		||||
	)
 | 
			
		||||
	responseSizes = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	responseSizes = compbasemetrics.NewHistogramVec(
 | 
			
		||||
		&compbasemetrics.HistogramOpts{
 | 
			
		||||
			Name: "apiserver_response_sizes",
 | 
			
		||||
			Help: "Response size distribution in bytes for each group, version, verb, resource, subresource, scope and component.",
 | 
			
		||||
			// Use buckets ranging from 1000 bytes (1KB) to 10^9 bytes (1GB).
 | 
			
		||||
			Buckets: prometheus.ExponentialBuckets(1000, 10.0, 7),
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(1000, 10.0, 7),
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
 | 
			
		||||
	)
 | 
			
		||||
	// DroppedRequests is a number of requests dropped with 'Try again later' response"
 | 
			
		||||
	DroppedRequests = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_dropped_requests_total",
 | 
			
		||||
			Help: "Number of requests dropped with 'Try again later' response",
 | 
			
		||||
	DroppedRequests = compbasemetrics.NewCounterVec(
 | 
			
		||||
		&compbasemetrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_dropped_requests_total",
 | 
			
		||||
			Help:           "Number of requests dropped with 'Try again later' response",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"requestKind"},
 | 
			
		||||
	)
 | 
			
		||||
	DeprecatedDroppedRequests = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_dropped_requests",
 | 
			
		||||
			Help: "(Deprecated) Number of requests dropped with 'Try again later' response",
 | 
			
		||||
	DeprecatedDroppedRequests = compbasemetrics.NewCounterVec(
 | 
			
		||||
		&compbasemetrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_dropped_requests",
 | 
			
		||||
			Help:           "(Deprecated) Number of requests dropped with 'Try again later' response",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"requestKind"},
 | 
			
		||||
	)
 | 
			
		||||
	// RegisteredWatchers is a number of currently registered watchers splitted by resource.
 | 
			
		||||
	RegisteredWatchers = prometheus.NewGaugeVec(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
			Name: "apiserver_registered_watchers",
 | 
			
		||||
			Help: "Number of currently registered watchers for a given resources",
 | 
			
		||||
	RegisteredWatchers = compbasemetrics.NewGaugeVec(
 | 
			
		||||
		&compbasemetrics.GaugeOpts{
 | 
			
		||||
			Name:           "apiserver_registered_watchers",
 | 
			
		||||
			Help:           "Number of currently registered watchers for a given resources",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"group", "version", "kind"},
 | 
			
		||||
	)
 | 
			
		||||
	WatchEvents = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_watch_events_total",
 | 
			
		||||
			Help: "Number of events sent in watch clients",
 | 
			
		||||
	WatchEvents = compbasemetrics.NewCounterVec(
 | 
			
		||||
		&compbasemetrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_watch_events_total",
 | 
			
		||||
			Help:           "Number of events sent in watch clients",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"group", "version", "kind"},
 | 
			
		||||
	)
 | 
			
		||||
	WatchEventsSizes = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
			Name:    "apiserver_watch_events_sizes",
 | 
			
		||||
			Help:    "Watch event size distribution in bytes",
 | 
			
		||||
			Buckets: prometheus.ExponentialBuckets(1024, 2.0, 8), // 1K, 2K, 4K, 8K, ..., 128K.
 | 
			
		||||
	WatchEventsSizes = compbasemetrics.NewHistogramVec(
 | 
			
		||||
		&compbasemetrics.HistogramOpts{
 | 
			
		||||
			Name:           "apiserver_watch_events_sizes",
 | 
			
		||||
			Help:           "Watch event size distribution in bytes",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(1024, 2.0, 8), // 1K, 2K, 4K, 8K, ..., 128K.
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"group", "version", "kind"},
 | 
			
		||||
	)
 | 
			
		||||
	// Because of volatality of the base metric this is pre-aggregated one. Instead of reporing current usage all the time
 | 
			
		||||
	// it reports maximal usage during the last second.
 | 
			
		||||
	currentInflightRequests = prometheus.NewGaugeVec(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
			Name: "apiserver_current_inflight_requests",
 | 
			
		||||
			Help: "Maximal number of currently used inflight request limit of this apiserver per request kind in last second.",
 | 
			
		||||
	currentInflightRequests = compbasemetrics.NewGaugeVec(
 | 
			
		||||
		&compbasemetrics.GaugeOpts{
 | 
			
		||||
			Name:           "apiserver_current_inflight_requests",
 | 
			
		||||
			Help:           "Maximal number of currently used inflight request limit of this apiserver per request kind in last second.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"requestKind"},
 | 
			
		||||
	)
 | 
			
		||||
@@ -197,7 +220,7 @@ var registerMetrics sync.Once
 | 
			
		||||
func Register() {
 | 
			
		||||
	registerMetrics.Do(func() {
 | 
			
		||||
		for _, metric := range metrics {
 | 
			
		||||
			prometheus.MustRegister(metric)
 | 
			
		||||
			legacyregistry.MustRegister(metric)
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
@@ -241,7 +264,7 @@ func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, comp
 | 
			
		||||
	if requestInfo == nil {
 | 
			
		||||
		requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path}
 | 
			
		||||
	}
 | 
			
		||||
	var g prometheus.Gauge
 | 
			
		||||
	var g compbasemetrics.GaugeMetric
 | 
			
		||||
	scope := CleanScope(requestInfo)
 | 
			
		||||
	// We don't use verb from <requestInfo>, as for the healthy path
 | 
			
		||||
	// MonitorRequest is called from InstrumentRouteFunc which is registered
 | 
			
		||||
 
 | 
			
		||||
@@ -26,9 +26,9 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/storage/etcd3/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/emicklei/go-restful:go_default_library",
 | 
			
		||||
        "//vendor/github.com/go-openapi/spec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,7 @@ import (
 | 
			
		||||
	apimetrics "k8s.io/apiserver/pkg/endpoints/metrics"
 | 
			
		||||
	"k8s.io/apiserver/pkg/server/mux"
 | 
			
		||||
	etcd3metrics "k8s.io/apiserver/pkg/storage/etcd3/metrics"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DefaultMetrics installs the default prometheus metrics handler
 | 
			
		||||
@@ -33,7 +32,7 @@ type DefaultMetrics struct{}
 | 
			
		||||
// Install adds the DefaultMetrics handler
 | 
			
		||||
func (m DefaultMetrics) Install(c *mux.PathRecorderMux) {
 | 
			
		||||
	register()
 | 
			
		||||
	c.Handle("/metrics", prometheus.Handler())
 | 
			
		||||
	c.Handle("/metrics", legacyregistry.Handler())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MetricsWithReset install the prometheus metrics handler extended with support for the DELETE method
 | 
			
		||||
@@ -43,7 +42,7 @@ type MetricsWithReset struct{}
 | 
			
		||||
// Install adds the MetricsWithReset handler
 | 
			
		||||
func (m MetricsWithReset) Install(c *mux.PathRecorderMux) {
 | 
			
		||||
	register()
 | 
			
		||||
	defaultMetricsHandler := prometheus.Handler().ServeHTTP
 | 
			
		||||
	defaultMetricsHandler := legacyregistry.Handler().ServeHTTP
 | 
			
		||||
	c.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
 | 
			
		||||
		if req.Method == "DELETE" {
 | 
			
		||||
			apimetrics.Reset()
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/cache:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/trace:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,6 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/errors"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
@@ -41,16 +39,26 @@ import (
 | 
			
		||||
	"k8s.io/apiserver/pkg/storage"
 | 
			
		||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
			
		||||
	"k8s.io/client-go/tools/cache"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	utiltrace "k8s.io/utils/trace"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	initCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "apiserver_init_events_total",
 | 
			
		||||
			Help: "Counter of init events processed in watchcache broken by resource type",
 | 
			
		||||
	initCounter = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "apiserver_init_events_total",
 | 
			
		||||
			Help:           "Counter of init events processed in watchcache broken by resource type",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"resource"},
 | 
			
		||||
	)
 | 
			
		||||
@@ -64,7 +72,7 @@ const (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(initCounter)
 | 
			
		||||
	legacyregistry.MustRegister(initCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Config contains the configuration for a given Cache.
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,10 @@ go_library(
 | 
			
		||||
    srcs = ["metrics.go"],
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics",
 | 
			
		||||
    importpath = "k8s.io/apiserver/pkg/storage/etcd3/metrics",
 | 
			
		||||
    deps = ["//vendor/github.com/prometheus/client_golang/prometheus:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -20,29 +20,41 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	compbasemetrics "k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	etcdRequestLatency = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
			Name: "etcd_request_duration_seconds",
 | 
			
		||||
			Help: "Etcd request latency in seconds for each operation and object type.",
 | 
			
		||||
	etcdRequestLatency = compbasemetrics.NewHistogramVec(
 | 
			
		||||
		&compbasemetrics.HistogramOpts{
 | 
			
		||||
			Name:           "etcd_request_duration_seconds",
 | 
			
		||||
			Help:           "Etcd request latency in seconds for each operation and object type.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"operation", "type"},
 | 
			
		||||
	)
 | 
			
		||||
	objectCounts = prometheus.NewGaugeVec(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
			Name: "etcd_object_counts",
 | 
			
		||||
			Help: "Number of stored objects at the time of last check split by kind.",
 | 
			
		||||
	objectCounts = compbasemetrics.NewGaugeVec(
 | 
			
		||||
		&compbasemetrics.GaugeOpts{
 | 
			
		||||
			Name:           "etcd_object_counts",
 | 
			
		||||
			Help:           "Number of stored objects at the time of last check split by kind.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"resource"},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	deprecatedEtcdRequestLatenciesSummary = prometheus.NewSummaryVec(
 | 
			
		||||
		prometheus.SummaryOpts{
 | 
			
		||||
			Name: "etcd_request_latencies_summary",
 | 
			
		||||
			Help: "(Deprecated) Etcd request latency summary in microseconds for each operation and object type.",
 | 
			
		||||
	deprecatedEtcdRequestLatenciesSummary = compbasemetrics.NewSummaryVec(
 | 
			
		||||
		&compbasemetrics.SummaryOpts{
 | 
			
		||||
			Name:           "etcd_request_latencies_summary",
 | 
			
		||||
			Help:           "(Deprecated) Etcd request latency summary in microseconds for each operation and object type.",
 | 
			
		||||
			StabilityLevel: compbasemetrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"operation", "type"},
 | 
			
		||||
	)
 | 
			
		||||
@@ -54,11 +66,11 @@ var registerMetrics sync.Once
 | 
			
		||||
func Register() {
 | 
			
		||||
	// Register the metrics.
 | 
			
		||||
	registerMetrics.Do(func() {
 | 
			
		||||
		prometheus.MustRegister(etcdRequestLatency)
 | 
			
		||||
		prometheus.MustRegister(objectCounts)
 | 
			
		||||
		legacyregistry.MustRegister(etcdRequestLatency)
 | 
			
		||||
		legacyregistry.MustRegister(objectCounts)
 | 
			
		||||
 | 
			
		||||
		// TODO(danielqsj): Remove the following metrics, they are deprecated
 | 
			
		||||
		prometheus.MustRegister(deprecatedEtcdRequestLatenciesSummary)
 | 
			
		||||
		legacyregistry.MustRegister(deprecatedEtcdRequestLatenciesSummary)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/storage/etcd3:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apiserver/pkg/storage/value:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/coreos/etcd/clientv3:go_default_library",
 | 
			
		||||
        "//vendor/github.com/coreos/etcd/pkg/transport:go_default_library",
 | 
			
		||||
        "//vendor/github.com/grpc-ecosystem/go-grpc-prometheus:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ import (
 | 
			
		||||
	"k8s.io/apiserver/pkg/storage/etcd3"
 | 
			
		||||
	"k8s.io/apiserver/pkg/storage/storagebackend"
 | 
			
		||||
	"k8s.io/apiserver/pkg/storage/value"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// The short keepalive timeout and interval have been chosen to aggressively
 | 
			
		||||
@@ -46,6 +47,14 @@ const keepaliveTimeout = 10 * time.Second
 | 
			
		||||
// on heavily loaded arm64 CPUs (issue #64649)
 | 
			
		||||
const dialTimeout = 20 * time.Second
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	// grpcprom auto-registers (via an init function) their client metrics, since we are opting out of
 | 
			
		||||
	// using the global prometheus registry and using our own wrapped global registry,
 | 
			
		||||
	// we need to explicitly register these metrics to our global registry here.
 | 
			
		||||
	// For reference: https://github.com/kubernetes/kubernetes/pull/81387
 | 
			
		||||
	legacyregistry.RawMustRegister(grpcprom.DefaultClientMetrics)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newETCD3HealthCheck(c storagebackend.Config) (func() error, error) {
 | 
			
		||||
	// constructing the etcd v3 client blocks and times out if etcd is not available.
 | 
			
		||||
	// retry in a loop in the background until we successfully create the client, storing the client or error encountered
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,8 @@ go_library(
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/value",
 | 
			
		||||
    importpath = "k8s.io/apiserver/pkg/storage/value",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/status:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -20,9 +20,11 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"google.golang.org/grpc/status"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -30,85 +32,101 @@ const (
 | 
			
		||||
	subsystem = "storage"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	transformerLatencies = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	transformerLatencies = metrics.NewHistogramVec(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "transformation_duration_seconds",
 | 
			
		||||
			Help:      "Latencies in seconds of value transformation operations.",
 | 
			
		||||
			// In-process transformations (ex. AES CBC) complete on the order of 20 microseconds. However, when
 | 
			
		||||
			// external KMS is involved latencies may climb into milliseconds.
 | 
			
		||||
			Buckets: prometheus.ExponentialBuckets(5e-6, 2, 14),
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(5e-6, 2, 14),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"transformation_type"},
 | 
			
		||||
	)
 | 
			
		||||
	deprecatedTransformerLatencies = prometheus.NewHistogramVec(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	deprecatedTransformerLatencies = metrics.NewHistogramVec(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "transformation_latencies_microseconds",
 | 
			
		||||
			Help:      "(Deprecated) Latencies in microseconds of value transformation operations.",
 | 
			
		||||
			// In-process transformations (ex. AES CBC) complete on the order of 20 microseconds. However, when
 | 
			
		||||
			// external KMS is involved latencies may climb into milliseconds.
 | 
			
		||||
			Buckets: prometheus.ExponentialBuckets(5, 2, 14),
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(5, 2, 14),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"transformation_type"},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	transformerOperationsTotal = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "transformation_operations_total",
 | 
			
		||||
			Help:      "Total number of transformations.",
 | 
			
		||||
	transformerOperationsTotal = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "transformation_operations_total",
 | 
			
		||||
			Help:           "Total number of transformations.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"transformation_type", "transformer_prefix", "status"},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	deprecatedTransformerFailuresTotal = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "transformation_failures_total",
 | 
			
		||||
			Help:      "(Deprecated) Total number of failed transformation operations.",
 | 
			
		||||
	deprecatedTransformerFailuresTotal = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "transformation_failures_total",
 | 
			
		||||
			Help:           "(Deprecated) Total number of failed transformation operations.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"transformation_type"},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	envelopeTransformationCacheMissTotal = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "envelope_transformation_cache_misses_total",
 | 
			
		||||
			Help:      "Total number of cache misses while accessing key decryption key(KEK).",
 | 
			
		||||
	envelopeTransformationCacheMissTotal = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "envelope_transformation_cache_misses_total",
 | 
			
		||||
			Help:           "Total number of cache misses while accessing key decryption key(KEK).",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	dataKeyGenerationLatencies = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "data_key_generation_duration_seconds",
 | 
			
		||||
			Help:      "Latencies in seconds of data encryption key(DEK) generation operations.",
 | 
			
		||||
			Buckets:   prometheus.ExponentialBuckets(5e-6, 2, 14),
 | 
			
		||||
	dataKeyGenerationLatencies = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "data_key_generation_duration_seconds",
 | 
			
		||||
			Help:           "Latencies in seconds of data encryption key(DEK) generation operations.",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(5e-6, 2, 14),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	deprecatedDataKeyGenerationLatencies = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "data_key_generation_latencies_microseconds",
 | 
			
		||||
			Help:      "(Deprecated) Latencies in microseconds of data encryption key(DEK) generation operations.",
 | 
			
		||||
			Buckets:   prometheus.ExponentialBuckets(5, 2, 14),
 | 
			
		||||
	deprecatedDataKeyGenerationLatencies = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "data_key_generation_latencies_microseconds",
 | 
			
		||||
			Help:           "(Deprecated) Latencies in microseconds of data encryption key(DEK) generation operations.",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(5, 2, 14),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	dataKeyGenerationFailuresTotal = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
			Subsystem: subsystem,
 | 
			
		||||
			Name:      "data_key_generation_failures_total",
 | 
			
		||||
			Help:      "Total number of failed data encryption key(DEK) generation operations.",
 | 
			
		||||
	dataKeyGenerationFailuresTotal = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Namespace:      namespace,
 | 
			
		||||
			Subsystem:      subsystem,
 | 
			
		||||
			Name:           "data_key_generation_failures_total",
 | 
			
		||||
			Help:           "Total number of failed data encryption key(DEK) generation operations.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
@@ -117,14 +135,14 @@ var registerMetrics sync.Once
 | 
			
		||||
 | 
			
		||||
func RegisterMetrics() {
 | 
			
		||||
	registerMetrics.Do(func() {
 | 
			
		||||
		prometheus.MustRegister(transformerLatencies)
 | 
			
		||||
		prometheus.MustRegister(deprecatedTransformerLatencies)
 | 
			
		||||
		prometheus.MustRegister(transformerOperationsTotal)
 | 
			
		||||
		prometheus.MustRegister(deprecatedTransformerFailuresTotal)
 | 
			
		||||
		prometheus.MustRegister(envelopeTransformationCacheMissTotal)
 | 
			
		||||
		prometheus.MustRegister(dataKeyGenerationLatencies)
 | 
			
		||||
		prometheus.MustRegister(deprecatedDataKeyGenerationLatencies)
 | 
			
		||||
		prometheus.MustRegister(dataKeyGenerationFailuresTotal)
 | 
			
		||||
		legacyregistry.MustRegister(transformerLatencies)
 | 
			
		||||
		legacyregistry.MustRegister(deprecatedTransformerLatencies)
 | 
			
		||||
		legacyregistry.MustRegister(transformerOperationsTotal)
 | 
			
		||||
		legacyregistry.MustRegister(deprecatedTransformerFailuresTotal)
 | 
			
		||||
		legacyregistry.MustRegister(envelopeTransformationCacheMissTotal)
 | 
			
		||||
		legacyregistry.MustRegister(dataKeyGenerationLatencies)
 | 
			
		||||
		legacyregistry.MustRegister(deprecatedDataKeyGenerationLatencies)
 | 
			
		||||
		legacyregistry.MustRegister(dataKeyGenerationFailuresTotal)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,10 +44,10 @@ func TestTotals(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			error: errors.New("foo"),
 | 
			
		||||
			want: `
 | 
			
		||||
  # HELP apiserver_storage_transformation_failures_total (Deprecated) Total number of failed transformation operations.
 | 
			
		||||
  # HELP apiserver_storage_transformation_failures_total [ALPHA] (Deprecated) Total number of failed transformation operations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_failures_total counter
 | 
			
		||||
  apiserver_storage_transformation_failures_total{transformation_type="encrypt"} 1
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="Unknown",transformation_type="encrypt",transformer_prefix="k8s:enc:kms:v1:"} 1
 | 
			
		||||
`,
 | 
			
		||||
@@ -59,7 +59,7 @@ func TestTotals(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_failures_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="OK",transformation_type="encrypt",transformer_prefix="k8s:enc:kms:v1:"} 1
 | 
			
		||||
`,
 | 
			
		||||
@@ -72,10 +72,10 @@ func TestTotals(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			error: status.Error(codes.FailedPrecondition, "foo"),
 | 
			
		||||
			want: `
 | 
			
		||||
  # HELP apiserver_storage_transformation_failures_total (Deprecated) Total number of failed transformation operations.
 | 
			
		||||
  # HELP apiserver_storage_transformation_failures_total [ALPHA] (Deprecated) Total number of failed transformation operations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_failures_total counter
 | 
			
		||||
  apiserver_storage_transformation_failures_total{transformation_type="encrypt"} 1
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="FailedPrecondition",transformation_type="encrypt",transformer_prefix="k8s:enc:kms:v1:"} 1
 | 
			
		||||
`,
 | 
			
		||||
 
 | 
			
		||||
@@ -128,7 +128,7 @@ func TestPrefixFromMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="OK",transformation_type="from_storage",transformer_prefix="identity"} 1
 | 
			
		||||
  `,
 | 
			
		||||
@@ -142,7 +142,7 @@ func TestPrefixFromMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="OK",transformation_type="from_storage",transformer_prefix="other:"} 1
 | 
			
		||||
  `,
 | 
			
		||||
@@ -156,7 +156,7 @@ func TestPrefixFromMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="Unknown",transformation_type="from_storage",transformer_prefix="other:"} 1
 | 
			
		||||
  `,
 | 
			
		||||
@@ -170,7 +170,7 @@ func TestPrefixFromMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="Unknown",transformation_type="from_storage",transformer_prefix="unknown"} 1
 | 
			
		||||
  `,
 | 
			
		||||
@@ -214,7 +214,7 @@ func TestPrefixToMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="OK",transformation_type="to_storage",transformer_prefix="other:"} 1
 | 
			
		||||
  `,
 | 
			
		||||
@@ -228,7 +228,7 @@ func TestPrefixToMetrics(t *testing.T) {
 | 
			
		||||
				"apiserver_storage_transformation_operations_total",
 | 
			
		||||
			},
 | 
			
		||||
			want: `
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total Total number of transformations.
 | 
			
		||||
	# HELP apiserver_storage_transformation_operations_total [ALPHA] Total number of transformations.
 | 
			
		||||
  # TYPE apiserver_storage_transformation_operations_total counter
 | 
			
		||||
  apiserver_storage_transformation_operations_total{status="Unknown",transformation_type="to_storage",transformer_prefix="other:"} 1
 | 
			
		||||
  `,
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,6 @@ require (
 | 
			
		||||
	github.com/ghodss/yaml v0.0.0-20180820084758-c7ce16629ff4 // indirect
 | 
			
		||||
	github.com/go-openapi/spec v0.19.2
 | 
			
		||||
	github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
 | 
			
		||||
	github.com/prometheus/client_golang v0.9.2
 | 
			
		||||
	github.com/spf13/cobra v0.0.5
 | 
			
		||||
	github.com/spf13/pflag v1.0.3
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
 
 | 
			
		||||
@@ -25,13 +25,14 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/cache:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/transport:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/helper:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/client/listers/apiregistration/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-aggregator/pkg/controllers:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -17,27 +17,38 @@ limitations under the License.
 | 
			
		||||
package apiserver
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	unavailableCounter = prometheus.NewCounterVec(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "aggregator_unavailable_apiservice_count",
 | 
			
		||||
			Help: "Counter of APIServices which are marked as unavailable broken down by APIService name and reason.",
 | 
			
		||||
	unavailableCounter = metrics.NewCounterVec(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "aggregator_unavailable_apiservice_count",
 | 
			
		||||
			Help:           "Counter of APIServices which are marked as unavailable broken down by APIService name and reason.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"name", "reason"},
 | 
			
		||||
	)
 | 
			
		||||
	unavailableGauge = prometheus.NewGaugeVec(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
			Name: "aggregator_unavailable_apiservice",
 | 
			
		||||
			Help: "Gauge of APIServices which are marked as unavailable broken down by APIService name.",
 | 
			
		||||
	unavailableGauge = metrics.NewGaugeVec(
 | 
			
		||||
		&metrics.GaugeOpts{
 | 
			
		||||
			Name:           "aggregator_unavailable_apiservice",
 | 
			
		||||
			Help:           "Gauge of APIServices which are marked as unavailable broken down by APIService name.",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
		[]string{"name"},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(unavailableCounter)
 | 
			
		||||
	prometheus.MustRegister(unavailableGauge)
 | 
			
		||||
	legacyregistry.MustRegister(unavailableCounter)
 | 
			
		||||
	legacyregistry.MustRegister(unavailableGauge)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider/volume:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider/volume/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/cloud.google.com/go/compute/metadata:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -25,12 +25,13 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/client-go/util/flowcontrol"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"golang.org/x/oauth2"
 | 
			
		||||
	"golang.org/x/oauth2/google"
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/client-go/util/flowcontrol"
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -40,24 +41,34 @@ const (
 | 
			
		||||
	tokenURLBurst = 3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By default, all the following metrics are defined as falling under
 | 
			
		||||
 * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/20190404-kubernetes-control-plane-metrics-stability.md#stability-classes)
 | 
			
		||||
 *
 | 
			
		||||
 * Promoting the stability level of the metric is a responsibility of the component owner, since it
 | 
			
		||||
 * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
 | 
			
		||||
 * the metric stability policy.
 | 
			
		||||
 */
 | 
			
		||||
var (
 | 
			
		||||
	getTokenCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "get_token_count",
 | 
			
		||||
			Help: "Counter of total Token() requests to the alternate token source",
 | 
			
		||||
	getTokenCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "get_token_count",
 | 
			
		||||
			Help:           "Counter of total Token() requests to the alternate token source",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	getTokenFailCounter = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
			Name: "get_token_fail_count",
 | 
			
		||||
			Help: "Counter of failed Token() requests to the alternate token source",
 | 
			
		||||
	getTokenFailCounter = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Name:           "get_token_fail_count",
 | 
			
		||||
			Help:           "Counter of failed Token() requests to the alternate token source",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	prometheus.MustRegister(getTokenCounter)
 | 
			
		||||
	prometheus.MustRegister(getTokenFailCounter)
 | 
			
		||||
	legacyregistry.MustRegister(getTokenCounter)
 | 
			
		||||
	legacyregistry.MustRegister(getTokenFailCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AltTokenSource is the structure holding the data for the functionality needed to generates tokens
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							@@ -33,6 +33,7 @@ github.com/aws/aws-sdk-go v1.16.26 h1:GWkl3rkRO/JGRTWoLLIqwf7AWC4/W/1hMOUZqmX0js
 | 
			
		||||
github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 | 
			
		||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
 | 
			
		||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 | 
			
		||||
github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
 | 
			
		||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 | 
			
		||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 | 
			
		||||
github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -1638,6 +1638,10 @@ k8s.io/component-base/featuregate/testing
 | 
			
		||||
k8s.io/component-base/logs
 | 
			
		||||
k8s.io/component-base/metrics
 | 
			
		||||
k8s.io/component-base/metrics/legacyregistry
 | 
			
		||||
k8s.io/component-base/metrics/prometheus/clientgo
 | 
			
		||||
k8s.io/component-base/metrics/prometheus/clientgo/leaderelection
 | 
			
		||||
k8s.io/component-base/metrics/prometheus/restclient
 | 
			
		||||
k8s.io/component-base/metrics/prometheus/workqueue
 | 
			
		||||
k8s.io/component-base/version
 | 
			
		||||
# k8s.io/cri-api v0.0.0 => ./staging/src/k8s.io/cri-api
 | 
			
		||||
k8s.io/cri-api/pkg/apis
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user