@ -18,6 +18,7 @@ import (
"github.com/prometheus/common/model"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v2"
"github.com/prometheus/prometheus/model/labels"
)
@ -500,3 +501,160 @@ func TestTargetLabelValidity(t *testing.T) {
"Expected %q to be %v" , test . str , test . valid )
}
}
func BenchmarkRelabel ( b * testing . B ) {
tests := [ ] struct {
name string
lbls labels . Labels
config string
cfgs [ ] * Config
} {
{
name : "example" , // From prometheus/config/testdata/conf.good.yml.
config : `
- source_labels : [ job , __meta_dns_name ]
regex : "(.*)some-[regex]"
target_label : job
replacement : foo - $ { 1 }
# action defaults to ' replace '
- source_labels : [ abc ]
target_label : cde
- replacement : static
target_label : abc
- regex :
replacement : static
target_label : abc ` ,
lbls : labels . FromStrings ( "__meta_dns_name" , "example-some-x.com" , "abc" , "def" , "job" , "foo" ) ,
} ,
{
name : "kubernetes" ,
config : `
- source_labels :
- __meta_kubernetes_pod_container_port_name
regex : . * - metrics
action : keep
- source_labels :
- __meta_kubernetes_pod_label_name
action : drop
regex : ""
- source_labels :
- __meta_kubernetes_pod_phase
regex : Succeeded | Failed
action : drop
- source_labels :
- __meta_kubernetes_pod_annotation_prometheus_io_scrape
regex : "false"
action : drop
- source_labels :
- __meta_kubernetes_pod_annotation_prometheus_io_scheme
target_label : __scheme__
regex : ( https ? )
replacement : $ 1
action : replace
- source_labels :
- __meta_kubernetes_pod_annotation_prometheus_io_path
target_label : __metrics_path__
regex : ( . + )
replacement : $ 1
action : replace
- source_labels :
- __address__
- __meta_kubernetes_pod_annotation_prometheus_io_port
target_label : __address__
regex : ( . + ? ) ( \ : \ d + ) ? ; ( \ d + )
replacement : $ 1 : $ 3
action : replace
- regex : __meta_kubernetes_pod_annotation_prometheus_io_param_ ( . + )
replacement : __param_ $ 1
action : labelmap
- regex : __meta_kubernetes_pod_label_prometheus_io_label_ ( . + )
action : labelmap
- regex : __meta_kubernetes_pod_annotation_prometheus_io_label_ ( . + )
action : labelmap
- source_labels :
- __meta_kubernetes_namespace
- __meta_kubernetes_pod_label_name
separator : /
target_label : job
replacement : $ 1
action : replace
- source_labels :
- __meta_kubernetes_namespace
target_label : namespace
action : replace
- source_labels :
- __meta_kubernetes_pod_name
target_label : pod
action : replace
- source_labels :
- __meta_kubernetes_pod_container_name
target_label : container
action : replace
- source_labels :
- __meta_kubernetes_pod_name
- __meta_kubernetes_pod_container_name
- __meta_kubernetes_pod_container_port_name
separator : ':'
target_label : instance
action : replace
- target_label : cluster
replacement : dev - us - central - 0
- source_labels :
- __meta_kubernetes_namespace
regex : hosted - grafana
action : drop
- source_labels :
- __address__
target_label : __tmp_hash
modulus : 3
action : hashmod
- source_labels :
- __tmp_hash
regex : ^ 0 $
action : keep
- regex : __tmp_hash
action : labeldrop ` ,
lbls : labels . FromStrings (
"__address__" , "10.132.183.40:80" ,
"__meta_kubernetes_namespace" , "loki-boltdb-shipper" ,
"__meta_kubernetes_pod_annotation_promtail_loki_boltdb_shipper_hash" , "50523b9759094a144adcec2eae0aa4ad" ,
"__meta_kubernetes_pod_annotationpresent_promtail_loki_boltdb_shipper_hash" , "true" ,
"__meta_kubernetes_pod_container_init" , "false" ,
"__meta_kubernetes_pod_container_name" , "promtail" ,
"__meta_kubernetes_pod_container_port_name" , "http-metrics" ,
"__meta_kubernetes_pod_container_port_number" , "80" ,
"__meta_kubernetes_pod_container_port_protocol" , "TCP" ,
"__meta_kubernetes_pod_controller_kind" , "DaemonSet" ,
"__meta_kubernetes_pod_controller_name" , "promtail-loki-boltdb-shipper" ,
"__meta_kubernetes_pod_host_ip" , "10.128.0.178" ,
"__meta_kubernetes_pod_ip" , "10.132.183.40" ,
"__meta_kubernetes_pod_label_controller_revision_hash" , "555b77cd7d" ,
"__meta_kubernetes_pod_label_name" , "promtail-loki-boltdb-shipper" ,
"__meta_kubernetes_pod_label_pod_template_generation" , "45" ,
"__meta_kubernetes_pod_labelpresent_controller_revision_hash" , "true" ,
"__meta_kubernetes_pod_labelpresent_name" , "true" ,
"__meta_kubernetes_pod_labelpresent_pod_template_generation" , "true" ,
"__meta_kubernetes_pod_name" , "promtail-loki-boltdb-shipper-jgtr7" ,
"__meta_kubernetes_pod_node_name" , "gke-dev-us-central-0-main-n2s8-2-14d53341-9hkr" ,
"__meta_kubernetes_pod_phase" , "Running" ,
"__meta_kubernetes_pod_ready" , "true" ,
"__meta_kubernetes_pod_uid" , "4c586419-7f6c-448d-aeec-ca4fa5b05e60" ,
"__metrics_path__" , "/metrics" ,
"__scheme__" , "http" ,
"__scrape_interval__" , "15s" ,
"__scrape_timeout__" , "10s" ,
"job" , "kubernetes-pods" ) ,
} ,
}
for i := range tests {
err := yaml . UnmarshalStrict ( [ ] byte ( tests [ i ] . config ) , & tests [ i ] . cfgs )
require . NoError ( b , err )
}
for _ , tt := range tests {
b . Run ( tt . name , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
_ = Process ( tt . lbls , tt . cfgs ... )
}
} )
}
}