diff --git a/promql/info.go b/promql/info.go index 204ac44b40..c5b88e6af3 100644 --- a/promql/info.go +++ b/promql/info.go @@ -143,6 +143,23 @@ func (ev *evaluator) fetchInfoSeries(ctx context.Context, mat Matrix, ignoreSeri } } if len(idLblValues) == 0 { + // Even when returning early, we need to remove __name__ from dataLabelMatchers + // since it's not a data label selector (it's used to select which info metrics + // to consider). Without this, combineWithInfoVector would incorrectly exclude + // series when only __name__ is specified in the selector. + for name, ms := range dataLabelMatchers { + for i, m := range ms { + if m.Name == labels.MetricName { + ms = slices.Delete(ms, i, i+1) + break + } + } + if len(ms) > 0 { + dataLabelMatchers[name] = ms + } else { + delete(dataLabelMatchers, name) + } + } return nil, nil, nil } diff --git a/promql/promqltest/testdata/info.test b/promql/promqltest/testdata/info.test index e15a429675..a0bf97322f 100644 --- a/promql/promqltest/testdata/info.test +++ b/promql/promqltest/testdata/info.test @@ -166,3 +166,35 @@ eval range from 0 to 2m step 1m info({job="work"}, {__name__="info_metric"}) data_metric{instance="a", job="work", state="running", label="new"} _ _ 30 info_metric{instance="b", job="work", state="stopped"} 1 1 1 info_metric{instance="a", job="work", state="running"} 1 1 1 + +clear + +load 1m + data_metric{} 1 2 3 + +eval range from 0 to 2m step 1m info(data_metric, {__name__="info_metric"}) + data_metric{} 1 2 3 + +clear + +load 1m + data_metric{} 1 2 3 + data_metric{instance="a"} 4 5 6 + +eval range from 0 to 2m step 1m info(data_metric, {__name__="info_metric"}) + data_metric{} 1 2 3 + data_metric{instance="a"} 4 5 6 + +clear + +load 1m + data_metric{} 1 2 3 + data_metric{instance="a"} 4 5 6 + data_metric{job="1"} 7 8 9 + data_metric{instance="a", job="1"} 10 20 30 + +eval range from 0 to 2m step 1m info(data_metric, {__name__="info_metric"}) + data_metric{} 1 2 3 + data_metric{instance="a"} 4 5 6 + data_metric{job="1"} 7 8 9 + data_metric{instance="a", job="1"} 10 20 30