diff --git a/pkg/services/ngalert/state/historian/loki.go b/pkg/services/ngalert/state/historian/loki.go index 452eb92af35..0223010475b 100644 --- a/pkg/services/ngalert/state/historian/loki.go +++ b/pkg/services/ngalert/state/historian/loki.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "math" + "sort" "time" "github.com/benbjohnson/clock" @@ -360,8 +361,14 @@ func buildLogQuery(query models.HistoryQuery) (string, error) { logQL := selectorString(selectors) labelFilters := "" - for k, v := range query.Labels { - labelFilters += fmt.Sprintf(" | labels_%s=%q", k, v) + labelKeys := make([]string, 0, len(query.Labels)) + for k := range query.Labels { + labelKeys = append(labelKeys, k) + } + // Ensure that all queries we build are deterministic. + sort.Strings(labelKeys) + for _, k := range labelKeys { + labelFilters += fmt.Sprintf(" | labels_%s=%q", k, query.Labels[k]) } if labelFilters != "" { diff --git a/pkg/services/ngalert/state/historian/loki_test.go b/pkg/services/ngalert/state/historian/loki_test.go index 47518d868f3..d254b5c05d0 100644 --- a/pkg/services/ngalert/state/historian/loki_test.go +++ b/pkg/services/ngalert/state/historian/loki_test.go @@ -183,18 +183,17 @@ func TestRemoteLokiBackend(t *testing.T) { }, exp: `{orgID="123",from="state-history",ruleUID="rule-uid"}`, }, - // TODO this case is flaky - investigate and re-enable. ref: https://drone.grafana.net/grafana/grafana/108325/3/7 - //{ - // name: "filters instance labels in log line", - // query: models.HistoryQuery{ - // OrgID: 123, - // Labels: map[string]string{ - // "customlabel": "customvalue", - // "labeltwo": "labelvaluetwo", - // }, - // }, - // exp: `{orgID="123",from="state-history"} | json | labels_customlabel="customvalue" | labels_labeltwo="labelvaluetwo"`, - //}, + { + name: "filters instance labels in log line", + query: models.HistoryQuery{ + OrgID: 123, + Labels: map[string]string{ + "customlabel": "customvalue", + "labeltwo": "labelvaluetwo", + }, + }, + exp: `{orgID="123",from="state-history"} | json | labels_customlabel="customvalue" | labels_labeltwo="labelvaluetwo"`, + }, } for _, tc := range cases {