diff --git a/CHANGELOG.md b/CHANGELOG.md index d9c916430de..97456bddb02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -148,6 +148,7 @@ * [BUGFIX] Fix the issue where `--read-timeout` was applied to the entire `mimirtool analyze grafana` invocation rather than to individual Grafana API calls. #5915 * [BUGFIX] Fix incorrect remote-read path joining for `mimirtool remote-read` commands on Windows. #6011 * [BUGFIX] Fix template files full path being sent in `mimirtool alertmanager load` command. #6138 +* [BUGFIX] Analyze rule-file: .metricsUsed field wasn't populated. #6953 ### Mimir Continuous Test diff --git a/pkg/mimirtool/commands/analyse_rulefiles.go b/pkg/mimirtool/commands/analyse_rulefiles.go index 507a05afd18..b75d24b474f 100644 --- a/pkg/mimirtool/commands/analyse_rulefiles.go +++ b/pkg/mimirtool/commands/analyse_rulefiles.go @@ -6,8 +6,11 @@ package commands import ( + "sort" + "github.com/alecthomas/kingpin/v2" "github.com/pkg/errors" + "github.com/prometheus/common/model" "github.com/grafana/mimir/pkg/mimirtool/analyze" "github.com/grafana/mimir/pkg/mimirtool/rules" @@ -51,5 +54,12 @@ func AnalyzeRuleFiles(ruleFiles []string) (*analyze.MetricsInRuler, error) { } } } + var metricsUsed model.LabelValues + for metric := range output.OverallMetrics { + metricsUsed = append(metricsUsed, model.LabelValue(metric)) + } + sort.Sort(metricsUsed) + output.MetricsUsed = metricsUsed + return output, nil } diff --git a/pkg/mimirtool/commands/analyse_rulefiles_test.go b/pkg/mimirtool/commands/analyse_rulefiles_test.go new file mode 100644 index 00000000000..d2627b9b753 --- /dev/null +++ b/pkg/mimirtool/commands/analyse_rulefiles_test.go @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +package commands + +import ( + "testing" + + "github.com/prometheus/common/model" + "github.com/stretchr/testify/require" +) + +func TestAnalyzeRuleFiles(t *testing.T) { + mir, err := AnalyzeRuleFiles([]string{"testdata/prometheus_rules.yaml"}) + require.NoError(t, err) + require.Equal(t, 24, len(mir.MetricsUsed)) + expectedMetrics := model.LabelValues{ + "apiserver_request_duration_seconds_bucket", + "apiserver_request_duration_seconds_count", + "apiserver_request_total", + "container_memory_cache", + "container_memory_rss", + "container_memory_swap", + "container_memory_working_set_bytes", + "kube_pod_container_resource_limits", + "kube_pod_container_resource_requests", + "kube_pod_info", + "kube_pod_owner", + "kube_pod_status_phase", + "kube_replicaset_owner", + "kubelet_node_name", + "kubelet_pleg_relist_duration_seconds_bucket", + "node_cpu_seconds_total", + "node_memory_Buffers_bytes", + "node_memory_Cached_bytes", + "node_memory_MemAvailable_bytes", + "node_memory_MemFree_bytes", + "node_memory_Slab_bytes", + "scheduler_binding_duration_seconds_bucket", + "scheduler_e2e_scheduling_duration_seconds_bucket", + "scheduler_scheduling_algorithm_duration_seconds_bucket", + } + require.Equal(t, expectedMetrics, mir.MetricsUsed) +}