...

Source file src/github.com/linkerd/linkerd2/controller/proxy-injector/metrics.go

Documentation: github.com/linkerd/linkerd2/controller/proxy-injector

     1  package injector
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/linkerd/linkerd2/pkg/inject"
     7  	"github.com/linkerd/linkerd2/pkg/k8s"
     8  	"github.com/prometheus/client_golang/prometheus"
     9  	"github.com/prometheus/client_golang/prometheus/promauto"
    10  )
    11  
    12  const (
    13  	labelOwnerKind    = "owner_kind"
    14  	labelNamespace    = "namespace"
    15  	labelSkip         = "skip"
    16  	labelAnnotationAt = "annotation_at"
    17  	labelReason       = "skip_reason"
    18  )
    19  
    20  var (
    21  	requestLabels  = []string{labelOwnerKind, labelNamespace, labelAnnotationAt}
    22  	responseLabels = []string{labelOwnerKind, labelNamespace, labelSkip, labelReason, labelAnnotationAt}
    23  
    24  	proxyInjectionAdmissionRequests = promauto.NewCounterVec(prometheus.CounterOpts{
    25  		Name: "proxy_inject_admission_requests_total",
    26  		Help: "A counter for number of admission requests to proxy injector.",
    27  	}, append(requestLabels, validLabelNames(inject.ProxyAnnotations)...))
    28  
    29  	proxyInjectionAdmissionResponses = promauto.NewCounterVec(prometheus.CounterOpts{
    30  		Name: "proxy_inject_admission_responses_total",
    31  		Help: "A counter for number of admission responses from proxy injector.",
    32  	}, append(responseLabels, validLabelNames(inject.ProxyAnnotations)...))
    33  )
    34  
    35  func admissionRequestLabels(ownerKind, namespace, annotationAt string, configLabels prometheus.Labels) prometheus.Labels {
    36  	configLabels[labelOwnerKind] = ownerKind
    37  	configLabels[labelNamespace] = namespace
    38  	configLabels[labelAnnotationAt] = annotationAt
    39  	return configLabels
    40  }
    41  
    42  func admissionResponseLabels(owner, namespace, skip, reason, annotationAt string, configLabels prometheus.Labels) prometheus.Labels {
    43  	configLabels[labelOwnerKind] = owner
    44  	configLabels[labelNamespace] = namespace
    45  	configLabels[labelSkip] = skip
    46  	configLabels[labelReason] = reason
    47  	configLabels[labelAnnotationAt] = annotationAt
    48  	return configLabels
    49  }
    50  
    51  func configToPrometheusLabels(conf *inject.ResourceConfig) prometheus.Labels {
    52  	labels := conf.GetOverriddenConfiguration()
    53  	promLabels := map[string]string{}
    54  
    55  	for label, value := range labels {
    56  		promLabels[validProxyConfigurationLabel(label)] = value
    57  
    58  	}
    59  	return promLabels
    60  }
    61  
    62  func validLabelNames(labels []string) []string {
    63  	var validLabels []string
    64  
    65  	for _, label := range labels {
    66  		validLabels = append(validLabels, validProxyConfigurationLabel(label))
    67  	}
    68  	return validLabels
    69  }
    70  
    71  func validProxyConfigurationLabel(label string) string {
    72  	return strings.ReplaceAll(label[len(k8s.ProxyConfigAnnotationsPrefix)+1:], "-", "_")
    73  }
    74  

View as plain text