mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-09 23:24:05 -08:00
scrape: add benchmark for TargetsFromGroup
`loadConfiguration` is made more general. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
ff993b279a
commit
95fc032a61
|
@ -443,7 +443,7 @@ func TestPopulateLabels(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfiguration(t *testing.T, c string) *config.Config {
|
func loadConfiguration(t testing.TB, c string) *config.Config {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
cfg := &config.Config{}
|
cfg := &config.Config{}
|
||||||
|
|
|
@ -386,3 +386,91 @@ func TestTargetsFromGroup(t *testing.T) {
|
||||||
t.Fatalf("Expected error %s, got %s", expectedError, failures[0])
|
t.Fatalf("Expected error %s, got %s", expectedError, failures[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkTargetsFromGroup(b *testing.B) {
|
||||||
|
// Simulate Kubernetes service-discovery and use subset of rules from typical Prometheus config.
|
||||||
|
cfgText := `
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: job1
|
||||||
|
scrape_interval: 15s
|
||||||
|
scrape_timeout: 10s
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__meta_kubernetes_pod_container_port_name]
|
||||||
|
separator: ;
|
||||||
|
regex: .*-metrics
|
||||||
|
replacement: $1
|
||||||
|
action: keep
|
||||||
|
- source_labels: [__meta_kubernetes_pod_phase]
|
||||||
|
separator: ;
|
||||||
|
regex: Succeeded|Failed
|
||||||
|
replacement: $1
|
||||||
|
action: drop
|
||||||
|
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_name]
|
||||||
|
separator: /
|
||||||
|
regex: (.*)
|
||||||
|
target_label: job
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
- source_labels: [__meta_kubernetes_namespace]
|
||||||
|
separator: ;
|
||||||
|
regex: (.*)
|
||||||
|
target_label: namespace
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
- source_labels: [__meta_kubernetes_pod_name]
|
||||||
|
separator: ;
|
||||||
|
regex: (.*)
|
||||||
|
target_label: pod
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
- source_labels: [__meta_kubernetes_pod_container_name]
|
||||||
|
separator: ;
|
||||||
|
regex: (.*)
|
||||||
|
target_label: container
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
- source_labels: [__meta_kubernetes_pod_name, __meta_kubernetes_pod_container_name,
|
||||||
|
__meta_kubernetes_pod_container_port_name]
|
||||||
|
separator: ':'
|
||||||
|
regex: (.*)
|
||||||
|
target_label: instance
|
||||||
|
replacement: $1
|
||||||
|
action: replace
|
||||||
|
- separator: ;
|
||||||
|
regex: (.*)
|
||||||
|
target_label: cluster
|
||||||
|
replacement: dev-us-central-0
|
||||||
|
action: replace
|
||||||
|
`
|
||||||
|
config := loadConfiguration(b, cfgText)
|
||||||
|
for _, nTargets := range []int{1, 10, 100} {
|
||||||
|
b.Run(fmt.Sprintf("%d_targets", nTargets), func(b *testing.B) {
|
||||||
|
targets := []model.LabelSet{}
|
||||||
|
for i := 0; i < nTargets; i++ {
|
||||||
|
labels := model.LabelSet{
|
||||||
|
model.AddressLabel: model.LabelValue(fmt.Sprintf("localhost:%d", i)),
|
||||||
|
"__meta_kubernetes_namespace": "some_namespace",
|
||||||
|
"__meta_kubernetes_pod_container_name": "some_container",
|
||||||
|
"__meta_kubernetes_pod_container_port_name": "http-metrics",
|
||||||
|
"__meta_kubernetes_pod_container_port_number": "80",
|
||||||
|
"__meta_kubernetes_pod_label_name": "some_name",
|
||||||
|
"__meta_kubernetes_pod_name": "some_pod",
|
||||||
|
"__meta_kubernetes_pod_phase": "Running",
|
||||||
|
}
|
||||||
|
// Add some more labels, because Kubernetes SD generates a lot
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
labels[model.LabelName(fmt.Sprintf("__meta_kubernetes_pod_label_extra%d", i))] = "a_label_abcdefgh"
|
||||||
|
labels[model.LabelName(fmt.Sprintf("__meta_kubernetes_pod_labelpresent_extra%d", i))] = "true"
|
||||||
|
}
|
||||||
|
targets = append(targets, labels)
|
||||||
|
}
|
||||||
|
group := &targetgroup.Group{Targets: targets}
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
targets, _ := TargetsFromGroup(group, config.ScrapeConfigs[0], false)
|
||||||
|
if len(targets) != nTargets {
|
||||||
|
b.Fatalf("Expected %d targets, got %d", nTargets, len(targets))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue