...
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