Skip to content

Commit 70b3a1a

Browse files
authored
Merge pull request #327 from pyrra-dev/fix-latency-burnrates-regexp
slo: Fix latency burnrate recording rules with regexp matchers
2 parents 1f6478a + ef1494b commit 70b3a1a

File tree

3 files changed

+45
-40
lines changed

3 files changed

+45
-40
lines changed

slo/promql_test.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ var (
229229
Window: model.Duration(14 * 24 * time.Hour),
230230
Indicator: Indicator{
231231
Latency: &LatencyIndicator{
232+
Grouping: []string{
233+
"resource",
234+
"verb",
235+
},
232236
Success: Metric{
233237
Name: "apiserver_request_duration_seconds_bucket",
234238
LabelMatchers: []*labels.Matcher{
@@ -312,7 +316,7 @@ func TestObjective_QueryTotal(t *testing.T) {
312316
}, {
313317
name: "apiserver-read-resource-latency",
314318
objective: objectiveAPIServerLatency(),
315-
expected: `sum(apiserver_request_duration_seconds:increase2w{job="apiserver",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"})`,
319+
expected: `sum by(resource, verb) (apiserver_request_duration_seconds:increase2w{job="apiserver",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"})`,
316320
}}
317321
for _, tc := range testcases {
318322
t.Run(tc.name, func(t *testing.T) {
@@ -381,7 +385,7 @@ func TestObjective_QueryErrors(t *testing.T) {
381385
}, {
382386
name: "apiserver-read-resource-latency",
383387
objective: objectiveAPIServerLatency(),
384-
expected: `sum(apiserver_request_duration_seconds:increase2w{job="apiserver",le="",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"}) - sum(apiserver_request_duration_seconds:increase2w{job="apiserver",le="0.1",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"})`,
388+
expected: `sum by(resource, verb) (apiserver_request_duration_seconds:increase2w{job="apiserver",le="",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"}) - sum by(resource, verb) (apiserver_request_duration_seconds:increase2w{job="apiserver",le="0.1",resource=~"resource|",slo="apiserver-read-resource-latency",verb=~"LIST|GET"})`,
385389
}}
386390
for _, tc := range testcases {
387391
t.Run(tc.name, func(t *testing.T) {

slo/rules.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,12 @@ func (o Objective) Burnrates() (monitoringv1.RuleGroup, error) {
194194
if m.Name == labels.MetricName {
195195
continue
196196
}
197+
if _, ok := groupingMap[m.Name]; !ok {
198+
if m.Type == labels.MatchRegexp || m.Type == labels.MatchNotRegexp {
199+
continue
200+
}
201+
}
202+
197203
alertMatchers = append(alertMatchers, m.String())
198204
}
199205
alertMatchers = append(alertMatchers, fmt.Sprintf(`slo="%s"`, sloName))
@@ -299,11 +305,6 @@ func (o Objective) Burnrate(timerange time.Duration) string {
299305
for _, s := range o.Indicator.Latency.Grouping {
300306
groupingMap[s] = struct{}{}
301307
}
302-
for _, m := range o.Indicator.Latency.Total.LabelMatchers {
303-
if m.Type == labels.MatchRegexp || m.Type == labels.MatchNotRegexp {
304-
groupingMap[m.Name] = struct{}{}
305-
}
306-
}
307308

308309
grouping := make([]string, 0, len(groupingMap))
309310
for s := range groupingMap {

0 commit comments

Comments
 (0)