mirror of
https://github.com/prometheus/prometheus
synced 2024-12-24 15:32:48 +00:00
discovery/kubernetes: add present labels for labels/annotations (#5443)
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
parent
c1682adb2f
commit
dafd1632a2
@ -387,10 +387,11 @@ func TestEndpointsDiscoveryWithService(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "test",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "test",
|
||||
"__meta_kubernetes_service_labelpresent_app": "true",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
},
|
||||
Source: "endpoints/default/testendpoints",
|
||||
},
|
||||
@ -452,11 +453,13 @@ func TestEndpointsDiscoveryWithServiceUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "svc",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_component": "testing",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "svc",
|
||||
"__meta_kubernetes_service_labelpresent_app": "true",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_component": "testing",
|
||||
"__meta_kubernetes_service_labelpresent_component": "true",
|
||||
},
|
||||
Source: "endpoints/default/testendpoints",
|
||||
},
|
||||
@ -560,10 +563,11 @@ func TestEndpointsDiscoveryNamespaces(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_namespace": "ns1",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "app1",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
"__meta_kubernetes_namespace": "ns1",
|
||||
"__meta_kubernetes_endpoints_name": "testendpoints",
|
||||
"__meta_kubernetes_service_label_app": "app1",
|
||||
"__meta_kubernetes_service_labelpresent_app": "true",
|
||||
"__meta_kubernetes_service_name": "testendpoints",
|
||||
},
|
||||
Source: "endpoints/ns1/testendpoints",
|
||||
},
|
||||
|
@ -131,12 +131,14 @@ func ingressSourceFromNamespaceAndName(namespace, name string) string {
|
||||
}
|
||||
|
||||
const (
|
||||
ingressNameLabel = metaLabelPrefix + "ingress_name"
|
||||
ingressLabelPrefix = metaLabelPrefix + "ingress_label_"
|
||||
ingressAnnotationPrefix = metaLabelPrefix + "ingress_annotation_"
|
||||
ingressSchemeLabel = metaLabelPrefix + "ingress_scheme"
|
||||
ingressHostLabel = metaLabelPrefix + "ingress_host"
|
||||
ingressPathLabel = metaLabelPrefix + "ingress_path"
|
||||
ingressNameLabel = metaLabelPrefix + "ingress_name"
|
||||
ingressLabelPrefix = metaLabelPrefix + "ingress_label_"
|
||||
ingressLabelPresentPrefix = metaLabelPrefix + "ingress_labelpresent_"
|
||||
ingressAnnotationPrefix = metaLabelPrefix + "ingress_annotation_"
|
||||
ingressAnnotationPresentPrefix = metaLabelPrefix + "ingress_annotationpresent_"
|
||||
ingressSchemeLabel = metaLabelPrefix + "ingress_scheme"
|
||||
ingressHostLabel = metaLabelPrefix + "ingress_host"
|
||||
ingressPathLabel = metaLabelPrefix + "ingress_path"
|
||||
)
|
||||
|
||||
func ingressLabels(ingress *v1beta1.Ingress) model.LabelSet {
|
||||
@ -145,13 +147,15 @@ func ingressLabels(ingress *v1beta1.Ingress) model.LabelSet {
|
||||
ls[namespaceLabel] = lv(ingress.Namespace)
|
||||
|
||||
for k, v := range ingress.Labels {
|
||||
ln := strutil.SanitizeLabelName(ingressLabelPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(ingressLabelPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(ingressLabelPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
|
||||
for k, v := range ingress.Annotations {
|
||||
ln := strutil.SanitizeLabelName(ingressAnnotationPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(ingressAnnotationPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(ingressAnnotationPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
return ls
|
||||
}
|
||||
|
@ -118,10 +118,12 @@ func expectedTargetGroups(ns string, tls TLSMode) map[string]*targetgroup.Group
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_ingress_name": "testingress",
|
||||
"__meta_kubernetes_namespace": lv(ns),
|
||||
"__meta_kubernetes_ingress_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_ingress_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_ingress_name": "testingress",
|
||||
"__meta_kubernetes_namespace": lv(ns),
|
||||
"__meta_kubernetes_ingress_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_ingress_labelpresent_testlabel": "true",
|
||||
"__meta_kubernetes_ingress_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_ingress_annotationpresent_testannotation": "true",
|
||||
},
|
||||
Source: key,
|
||||
},
|
||||
|
@ -43,6 +43,7 @@ const (
|
||||
metaLabelPrefix = model.MetaLabelPrefix + "kubernetes_"
|
||||
namespaceLabel = metaLabelPrefix + "namespace"
|
||||
metricsNamespace = "prometheus_sd_kubernetes"
|
||||
presentValue = model.LabelValue("true")
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -54,6 +54,7 @@ type k8sDiscoveryTest struct {
|
||||
}
|
||||
|
||||
func (d k8sDiscoveryTest) Run(t *testing.T) {
|
||||
t.Helper()
|
||||
ch := make(chan []*targetgroup.Group)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
|
||||
defer cancel()
|
||||
@ -124,6 +125,7 @@ Loop:
|
||||
}
|
||||
|
||||
func requireTargetGroups(t *testing.T, expected, res map[string]*targetgroup.Group) {
|
||||
t.Helper()
|
||||
b1, err := json.Marshal(expected)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -140,10 +140,12 @@ func nodeSourceFromName(name string) string {
|
||||
}
|
||||
|
||||
const (
|
||||
nodeNameLabel = metaLabelPrefix + "node_name"
|
||||
nodeLabelPrefix = metaLabelPrefix + "node_label_"
|
||||
nodeAnnotationPrefix = metaLabelPrefix + "node_annotation_"
|
||||
nodeAddressPrefix = metaLabelPrefix + "node_address_"
|
||||
nodeNameLabel = metaLabelPrefix + "node_name"
|
||||
nodeLabelPrefix = metaLabelPrefix + "node_label_"
|
||||
nodeLabelPresentPrefix = metaLabelPrefix + "node_labelpresent_"
|
||||
nodeAnnotationPrefix = metaLabelPrefix + "node_annotation_"
|
||||
nodeAnnotationPresentPrefix = metaLabelPrefix + "node_annotationpresent_"
|
||||
nodeAddressPrefix = metaLabelPrefix + "node_address_"
|
||||
)
|
||||
|
||||
func nodeLabels(n *apiv1.Node) model.LabelSet {
|
||||
@ -152,13 +154,15 @@ func nodeLabels(n *apiv1.Node) model.LabelSet {
|
||||
ls[nodeNameLabel] = lv(n.Name)
|
||||
|
||||
for k, v := range n.Labels {
|
||||
ln := strutil.SanitizeLabelName(nodeLabelPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(nodeLabelPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(nodeLabelPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
|
||||
for k, v := range n.Annotations {
|
||||
ln := strutil.SanitizeLabelName(nodeAnnotationPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(nodeAnnotationPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(nodeAnnotationPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
return ls
|
||||
}
|
||||
|
@ -75,9 +75,11 @@ func TestNodeDiscoveryBeforeStart(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_node_name": "test",
|
||||
"__meta_kubernetes_node_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_node_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_node_name": "test",
|
||||
"__meta_kubernetes_node_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_node_labelpresent_testlabel": "true",
|
||||
"__meta_kubernetes_node_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_node_annotationpresent_testannotation": "true",
|
||||
},
|
||||
Source: "node/test",
|
||||
},
|
||||
@ -158,8 +160,9 @@ func TestNodeDiscoveryUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_node_label_Unschedulable": "true",
|
||||
"__meta_kubernetes_node_name": "test0",
|
||||
"__meta_kubernetes_node_label_Unschedulable": "true",
|
||||
"__meta_kubernetes_node_labelpresent_Unschedulable": "true",
|
||||
"__meta_kubernetes_node_name": "test0",
|
||||
},
|
||||
Source: "node/test0",
|
||||
},
|
||||
|
@ -144,7 +144,9 @@ const (
|
||||
podReadyLabel = metaLabelPrefix + "pod_ready"
|
||||
podPhaseLabel = metaLabelPrefix + "pod_phase"
|
||||
podLabelPrefix = metaLabelPrefix + "pod_label_"
|
||||
podLabelPresentPrefix = metaLabelPrefix + "pod_labelpresent_"
|
||||
podAnnotationPrefix = metaLabelPrefix + "pod_annotation_"
|
||||
podAnnotationPresentPrefix = metaLabelPrefix + "pod_annotationpresent_"
|
||||
podNodeNameLabel = metaLabelPrefix + "pod_node_name"
|
||||
podHostIPLabel = metaLabelPrefix + "pod_host_ip"
|
||||
podUID = metaLabelPrefix + "pod_uid"
|
||||
@ -185,13 +187,15 @@ func podLabels(pod *apiv1.Pod) model.LabelSet {
|
||||
}
|
||||
|
||||
for k, v := range pod.Labels {
|
||||
ln := strutil.SanitizeLabelName(podLabelPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(podLabelPrefix+k)] = lv(v)
|
||||
ls[model.LabelName(podLabelPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
|
||||
for k, v := range pod.Annotations {
|
||||
ln := strutil.SanitizeLabelName(podAnnotationPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(podAnnotationPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(podAnnotationPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
|
||||
return ls
|
||||
|
@ -178,18 +178,20 @@ func TestPodDiscoveryBeforeRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_pod_name": "testpod",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_pod_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_pod_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_pod_node_name": "testnode",
|
||||
"__meta_kubernetes_pod_ip": "1.2.3.4",
|
||||
"__meta_kubernetes_pod_host_ip": "2.3.4.5",
|
||||
"__meta_kubernetes_pod_ready": "true",
|
||||
"__meta_kubernetes_pod_phase": "Running",
|
||||
"__meta_kubernetes_pod_uid": "abc123",
|
||||
"__meta_kubernetes_pod_controller_kind": "testcontrollerkind",
|
||||
"__meta_kubernetes_pod_controller_name": "testcontrollername",
|
||||
"__meta_kubernetes_pod_name": "testpod",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_pod_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_pod_labelpresent_testlabel": "true",
|
||||
"__meta_kubernetes_pod_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_pod_annotationpresent_testannotation": "true",
|
||||
"__meta_kubernetes_pod_node_name": "testnode",
|
||||
"__meta_kubernetes_pod_ip": "1.2.3.4",
|
||||
"__meta_kubernetes_pod_host_ip": "2.3.4.5",
|
||||
"__meta_kubernetes_pod_ready": "true",
|
||||
"__meta_kubernetes_pod_phase": "Running",
|
||||
"__meta_kubernetes_pod_uid": "abc123",
|
||||
"__meta_kubernetes_pod_controller_kind": "testcontrollerkind",
|
||||
"__meta_kubernetes_pod_controller_name": "testcontrollername",
|
||||
},
|
||||
Source: "pod/default/testpod",
|
||||
},
|
||||
|
@ -135,13 +135,15 @@ func serviceSourceFromNamespaceAndName(namespace, name string) string {
|
||||
}
|
||||
|
||||
const (
|
||||
serviceNameLabel = metaLabelPrefix + "service_name"
|
||||
serviceLabelPrefix = metaLabelPrefix + "service_label_"
|
||||
serviceAnnotationPrefix = metaLabelPrefix + "service_annotation_"
|
||||
servicePortNameLabel = metaLabelPrefix + "service_port_name"
|
||||
servicePortProtocolLabel = metaLabelPrefix + "service_port_protocol"
|
||||
serviceClusterIPLabel = metaLabelPrefix + "service_cluster_ip"
|
||||
serviceExternalNameLabel = metaLabelPrefix + "service_external_name"
|
||||
serviceNameLabel = metaLabelPrefix + "service_name"
|
||||
serviceLabelPrefix = metaLabelPrefix + "service_label_"
|
||||
serviceLabelPresentPrefix = metaLabelPrefix + "service_labelpresent_"
|
||||
serviceAnnotationPrefix = metaLabelPrefix + "service_annotation_"
|
||||
serviceAnnotationPresentPrefix = metaLabelPrefix + "service_annotationpresent_"
|
||||
servicePortNameLabel = metaLabelPrefix + "service_port_name"
|
||||
servicePortProtocolLabel = metaLabelPrefix + "service_port_protocol"
|
||||
serviceClusterIPLabel = metaLabelPrefix + "service_cluster_ip"
|
||||
serviceExternalNameLabel = metaLabelPrefix + "service_external_name"
|
||||
)
|
||||
|
||||
func serviceLabels(svc *apiv1.Service) model.LabelSet {
|
||||
@ -151,13 +153,15 @@ func serviceLabels(svc *apiv1.Service) model.LabelSet {
|
||||
ls[namespaceLabel] = lv(svc.Namespace)
|
||||
|
||||
for k, v := range svc.Labels {
|
||||
ln := strutil.SanitizeLabelName(serviceLabelPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(serviceLabelPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(serviceLabelPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
|
||||
for k, v := range svc.Annotations {
|
||||
ln := strutil.SanitizeLabelName(serviceAnnotationPrefix + k)
|
||||
ls[model.LabelName(ln)] = lv(v)
|
||||
ln := strutil.SanitizeLabelName(k)
|
||||
ls[model.LabelName(serviceAnnotationPrefix+ln)] = lv(v)
|
||||
ls[model.LabelName(serviceAnnotationPresentPrefix+ln)] = presentValue
|
||||
}
|
||||
return ls
|
||||
}
|
||||
|
@ -186,10 +186,12 @@ func TestServiceDiscoveryUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
Labels: model.LabelSet{
|
||||
"__meta_kubernetes_service_name": "testservice",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_service_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_service_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_service_name": "testservice",
|
||||
"__meta_kubernetes_namespace": "default",
|
||||
"__meta_kubernetes_service_label_testlabel": "testvalue",
|
||||
"__meta_kubernetes_service_labelpresent_testlabel": "true",
|
||||
"__meta_kubernetes_service_annotation_testannotation": "testannotationvalue",
|
||||
"__meta_kubernetes_service_annotationpresent_testannotation": "true",
|
||||
},
|
||||
Source: "svc/default/testservice",
|
||||
},
|
||||
|
@ -708,7 +708,9 @@ Available meta labels:
|
||||
|
||||
* `__meta_kubernetes_node_name`: The name of the node object.
|
||||
* `__meta_kubernetes_node_label_<labelname>`: Each label from the node object.
|
||||
* `__meta_kubernetes_node_labelpresent_<labelname>`: `true` for each label from the node object.
|
||||
* `__meta_kubernetes_node_annotation_<annotationname>`: Each annotation from the node object.
|
||||
* `__meta_kubernetes_node_annotationpresent_<annotationname>`: `true` for each annotation from the node object.
|
||||
* `__meta_kubernetes_node_address_<address_type>`: The first address for each node address type, if it exists.
|
||||
|
||||
In addition, the `instance` label for the node will be set to the node name
|
||||
@ -724,10 +726,12 @@ service port.
|
||||
Available meta labels:
|
||||
|
||||
* `__meta_kubernetes_namespace`: The namespace of the service object.
|
||||
* `__meta_kubernetes_service_annotation_<annotationname>`: The annotation of the service object.
|
||||
* `__meta_kubernetes_service_annotation_<annotationname>`: Each annotation from the service object.
|
||||
* `__meta_kubernetes_service_annotationpresent_<annotationname>`: "true" for each annotation of the service object.
|
||||
* `__meta_kubernetes_service_cluster_ip`: The cluster IP address of the service. (Does not apply to services of type ExternalName)
|
||||
* `__meta_kubernetes_service_external_name`: The DNS name of the service. (Applies to services of type ExternalName)
|
||||
* `__meta_kubernetes_service_label_<labelname>`: The label of the service object.
|
||||
* `__meta_kubernetes_service_label_<labelname>`: Each label from the service object.
|
||||
* `__meta_kubernetes_service_labelpresent_<labelname>`: `true` for each label of the service object.
|
||||
* `__meta_kubernetes_service_name`: The name of the service object.
|
||||
* `__meta_kubernetes_service_port_name`: Name of the service port for the target.
|
||||
* `__meta_kubernetes_service_port_number`: Number of the service port for the target.
|
||||
@ -744,8 +748,10 @@ Available meta labels:
|
||||
* `__meta_kubernetes_namespace`: The namespace of the pod object.
|
||||
* `__meta_kubernetes_pod_name`: The name of the pod object.
|
||||
* `__meta_kubernetes_pod_ip`: The pod IP of the pod object.
|
||||
* `__meta_kubernetes_pod_label_<labelname>`: The label of the pod object.
|
||||
* `__meta_kubernetes_pod_annotation_<annotationname>`: The annotation of the pod object.
|
||||
* `__meta_kubernetes_pod_label_<labelname>`: Each label from the pod object.
|
||||
* `__meta_kubernetes_pod_labelpresent_<labelname>`: `true`for each label from the pod object.
|
||||
* `__meta_kubernetes_pod_annotation_<annotationname>`: Each annotation from the pod object.
|
||||
* `__meta_kubernetes_pod_annotationpresent_<annotationname>`: `true` for each annotation from the pod object.
|
||||
* `__meta_kubernetes_pod_container_name`: Name of the container the target address points to.
|
||||
* `__meta_kubernetes_pod_container_port_name`: Name of the container port.
|
||||
* `__meta_kubernetes_pod_container_port_number`: Number of the container port.
|
||||
@ -789,8 +795,10 @@ Available meta labels:
|
||||
|
||||
* `__meta_kubernetes_namespace`: The namespace of the ingress object.
|
||||
* `__meta_kubernetes_ingress_name`: The name of the ingress object.
|
||||
* `__meta_kubernetes_ingress_label_<labelname>`: The label of the ingress object.
|
||||
* `__meta_kubernetes_ingress_annotation_<annotationname>`: The annotation of the ingress object.
|
||||
* `__meta_kubernetes_ingress_label_<labelname>`: Each label from the ingress object.
|
||||
* `__meta_kubernetes_ingress_labelpresent_<labelname>`: `true` for each label from the ingress object.
|
||||
* `__meta_kubernetes_ingress_annotation_<annotationname>`: Each annotation from the ingress object.
|
||||
* `__meta_kubernetes_ingress_annotationpresent_<annotationname>`: `true` for each annotation from the ingress object.
|
||||
* `__meta_kubernetes_ingress_scheme`: Protocol scheme of ingress, `https` if TLS
|
||||
config is set. Defaults to `http`.
|
||||
* `__meta_kubernetes_ingress_path`: Path from ingress spec. Defaults to `/`.
|
||||
|
Loading…
Reference in New Issue
Block a user