k8s.io/apiserver@v0.29.3/pkg/storage/cacher/metrics/metrics.go (about)

     1  /*
     2  Copyright 2021 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package metrics
    18  
    19  import (
    20  	"sync"
    21  
    22  	compbasemetrics "k8s.io/component-base/metrics"
    23  	"k8s.io/component-base/metrics/legacyregistry"
    24  )
    25  
    26  const (
    27  	namespace = "apiserver"
    28  	subsystem = "watch_cache"
    29  )
    30  
    31  /*
    32   * By default, all the following metrics are defined as falling under
    33   * ALPHA stability level https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/1209-metrics-stability/kubernetes-control-plane-metrics-stability.md#stability-classes)
    34   *
    35   * Promoting the stability level of the metric is a responsibility of the component owner, since it
    36   * involves explicitly acknowledging support for the metric across multiple releases, in accordance with
    37   * the metric stability policy.
    38   */
    39  var (
    40  	listCacheCount = compbasemetrics.NewCounterVec(
    41  		&compbasemetrics.CounterOpts{
    42  			Namespace:      namespace,
    43  			Name:           "cache_list_total",
    44  			Help:           "Number of LIST requests served from watch cache",
    45  			StabilityLevel: compbasemetrics.ALPHA,
    46  		},
    47  		[]string{"resource_prefix", "index"},
    48  	)
    49  	listCacheNumFetched = compbasemetrics.NewCounterVec(
    50  		&compbasemetrics.CounterOpts{
    51  			Namespace:      namespace,
    52  			Name:           "cache_list_fetched_objects_total",
    53  			Help:           "Number of objects read from watch cache in the course of serving a LIST request",
    54  			StabilityLevel: compbasemetrics.ALPHA,
    55  		},
    56  		[]string{"resource_prefix", "index"},
    57  	)
    58  	listCacheNumReturned = compbasemetrics.NewCounterVec(
    59  		&compbasemetrics.CounterOpts{
    60  			Namespace:      namespace,
    61  			Name:           "cache_list_returned_objects_total",
    62  			Help:           "Number of objects returned for a LIST request from watch cache",
    63  			StabilityLevel: compbasemetrics.ALPHA,
    64  		},
    65  		[]string{"resource_prefix"},
    66  	)
    67  	InitCounter = compbasemetrics.NewCounterVec(
    68  		&compbasemetrics.CounterOpts{
    69  			Namespace:      namespace,
    70  			Name:           "init_events_total",
    71  			Help:           "Counter of init events processed in watch cache broken by resource type.",
    72  			StabilityLevel: compbasemetrics.ALPHA,
    73  		},
    74  		[]string{"resource"},
    75  	)
    76  
    77  	EventsReceivedCounter = compbasemetrics.NewCounterVec(
    78  		&compbasemetrics.CounterOpts{
    79  			Namespace:      namespace,
    80  			Subsystem:      subsystem,
    81  			Name:           "events_received_total",
    82  			Help:           "Counter of events received in watch cache broken by resource type.",
    83  			StabilityLevel: compbasemetrics.ALPHA,
    84  		},
    85  		[]string{"resource"},
    86  	)
    87  
    88  	EventsCounter = compbasemetrics.NewCounterVec(
    89  		&compbasemetrics.CounterOpts{
    90  			Namespace:      namespace,
    91  			Subsystem:      subsystem,
    92  			Name:           "events_dispatched_total",
    93  			Help:           "Counter of events dispatched in watch cache broken by resource type.",
    94  			StabilityLevel: compbasemetrics.ALPHA,
    95  		},
    96  		[]string{"resource"},
    97  	)
    98  
    99  	TerminatedWatchersCounter = compbasemetrics.NewCounterVec(
   100  		&compbasemetrics.CounterOpts{
   101  			Namespace:      namespace,
   102  			Name:           "terminated_watchers_total",
   103  			Help:           "Counter of watchers closed due to unresponsiveness broken by resource type.",
   104  			StabilityLevel: compbasemetrics.ALPHA,
   105  		},
   106  		[]string{"resource"},
   107  	)
   108  
   109  	watchCacheCapacityIncreaseTotal = compbasemetrics.NewCounterVec(
   110  		&compbasemetrics.CounterOpts{
   111  			Subsystem:      subsystem,
   112  			Name:           "capacity_increase_total",
   113  			Help:           "Total number of watch cache capacity increase events broken by resource type.",
   114  			StabilityLevel: compbasemetrics.ALPHA,
   115  		},
   116  		[]string{"resource"},
   117  	)
   118  
   119  	watchCacheCapacityDecreaseTotal = compbasemetrics.NewCounterVec(
   120  		&compbasemetrics.CounterOpts{
   121  			Subsystem:      subsystem,
   122  			Name:           "capacity_decrease_total",
   123  			Help:           "Total number of watch cache capacity decrease events broken by resource type.",
   124  			StabilityLevel: compbasemetrics.ALPHA,
   125  		},
   126  		[]string{"resource"},
   127  	)
   128  
   129  	WatchCacheCapacity = compbasemetrics.NewGaugeVec(
   130  		&compbasemetrics.GaugeOpts{
   131  			Subsystem:      subsystem,
   132  			Name:           "capacity",
   133  			Help:           "Total capacity of watch cache broken by resource type.",
   134  			StabilityLevel: compbasemetrics.ALPHA,
   135  		},
   136  		[]string{"resource"},
   137  	)
   138  
   139  	WatchCacheInitializations = compbasemetrics.NewCounterVec(
   140  		&compbasemetrics.CounterOpts{
   141  			Namespace:      namespace,
   142  			Subsystem:      subsystem,
   143  			Name:           "initializations_total",
   144  			Help:           "Counter of watch cache initializations broken by resource type.",
   145  			StabilityLevel: compbasemetrics.ALPHA,
   146  		},
   147  		[]string{"resource"},
   148  	)
   149  )
   150  
   151  var registerMetrics sync.Once
   152  
   153  // Register all metrics.
   154  func Register() {
   155  	// Register the metrics.
   156  	registerMetrics.Do(func() {
   157  		legacyregistry.MustRegister(listCacheCount)
   158  		legacyregistry.MustRegister(listCacheNumFetched)
   159  		legacyregistry.MustRegister(listCacheNumReturned)
   160  		legacyregistry.MustRegister(InitCounter)
   161  		legacyregistry.MustRegister(EventsReceivedCounter)
   162  		legacyregistry.MustRegister(EventsCounter)
   163  		legacyregistry.MustRegister(TerminatedWatchersCounter)
   164  		legacyregistry.MustRegister(watchCacheCapacityIncreaseTotal)
   165  		legacyregistry.MustRegister(watchCacheCapacityDecreaseTotal)
   166  		legacyregistry.MustRegister(WatchCacheCapacity)
   167  		legacyregistry.MustRegister(WatchCacheInitializations)
   168  	})
   169  }
   170  
   171  // RecordListCacheMetrics notes various metrics of the cost to serve a LIST request
   172  func RecordListCacheMetrics(resourcePrefix, indexName string, numFetched, numReturned int) {
   173  	listCacheCount.WithLabelValues(resourcePrefix, indexName).Inc()
   174  	listCacheNumFetched.WithLabelValues(resourcePrefix, indexName).Add(float64(numFetched))
   175  	listCacheNumReturned.WithLabelValues(resourcePrefix).Add(float64(numReturned))
   176  }
   177  
   178  // RecordsWatchCacheCapacityChange record watchCache capacity resize(increase or decrease) operations.
   179  func RecordsWatchCacheCapacityChange(objType string, old, new int) {
   180  	WatchCacheCapacity.WithLabelValues(objType).Set(float64(new))
   181  	if old < new {
   182  		watchCacheCapacityIncreaseTotal.WithLabelValues(objType).Inc()
   183  		return
   184  	}
   185  	watchCacheCapacityDecreaseTotal.WithLabelValues(objType).Inc()
   186  }