Skip to content

Commit 8cf169b

Browse files
committed
Add LatencyNative availability
1 parent f9a0a4b commit 8cf169b

File tree

1 file changed

+44
-3
lines changed

1 file changed

+44
-3
lines changed

slo/rules.go

+44-3
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ func (o Objective) Burnrate(timerange time.Duration) string {
512512

513513
return expr.String()
514514
case LatencyNative:
515-
expr, err := parser.ParseExpr(`1 - histogram_fraction(0,0.696969, rate(metric{matchers="total"}[1s]))`)
515+
expr, err := parser.ParseExpr(`1 - histogram_fraction(0,0.696969, sum(rate(metric{matchers="total"}[1s])))`)
516516
if err != nil {
517517
return err.Error()
518518
}
@@ -911,7 +911,7 @@ func (o Objective) IncreaseRules() (monitoringv1.RuleGroup, error) {
911911
}
912912
}
913913

914-
expr, err := parser.ParseExpr(`histogram_count(increase(metric{matchers="total"}[1s]))`)
914+
expr, err := parser.ParseExpr(`histogram_count(sum(increase(metric{matchers="total"}[1s])))`)
915915
if err != nil {
916916
return monitoringv1.RuleGroup{}, err
917917
}
@@ -929,7 +929,7 @@ func (o Objective) IncreaseRules() (monitoringv1.RuleGroup, error) {
929929
Labels: ruleLabels,
930930
})
931931

932-
expr, err = parser.ParseExpr(`histogram_fraction(0, 0.696969, increase(metric{matchers="total"}[1s])) * histogram_count(increase(metric{matchers="total"}[1s]))`)
932+
expr, err = parser.ParseExpr(`histogram_fraction(0, 0.696969, sum(increase(metric{matchers="total"}[1s]))) * histogram_count(sum(increase(metric{matchers="total"}[1s])))`)
933933
if err != nil {
934934
return monitoringv1.RuleGroup{}, err
935935
}
@@ -1384,6 +1384,47 @@ func (o Objective) GenericRules() (monitoringv1.RuleGroup, error) {
13841384
Labels: ruleLabels,
13851385
})
13861386
}
1387+
case LatencyNative:
1388+
latencySeconds := time.Duration(o.Indicator.LatencyNative.Latency).Seconds()
1389+
1390+
// availability
1391+
{
1392+
expr, err := parser.ParseExpr(`sum(metric{matchers="errors"} or vector(0)) / sum(metric{matchers="total"})`)
1393+
if err != nil {
1394+
return monitoringv1.RuleGroup{}, err
1395+
}
1396+
1397+
metric := increaseName(o.Indicator.LatencyNative.Total.Name, o.Window)
1398+
matchers := o.Indicator.LatencyNative.Total.LabelMatchers
1399+
for _, m := range matchers {
1400+
if m.Name == labels.MetricName {
1401+
m.Value = metric
1402+
break
1403+
}
1404+
}
1405+
matchers = append(matchers, &labels.Matcher{
1406+
Type: labels.MatchEqual,
1407+
Name: "slo",
1408+
Value: o.Name(),
1409+
})
1410+
1411+
errorMatchers := slices.Clone(matchers)
1412+
errorMatchers = append(errorMatchers, &labels.Matcher{Type: labels.MatchEqual, Name: "le", Value: fmt.Sprintf("%g", latencySeconds)})
1413+
matchers = append(matchers, &labels.Matcher{Type: labels.MatchEqual, Name: "le", Value: ""})
1414+
1415+
objectiveReplacer{
1416+
metric: metric,
1417+
matchers: matchers,
1418+
errorMatchers: errorMatchers,
1419+
window: time.Duration(o.Window),
1420+
}.replace(expr)
1421+
1422+
rules = append(rules, monitoringv1.Rule{
1423+
Record: "pyrra_availability",
1424+
Expr: intstr.FromString(expr.String()),
1425+
Labels: ruleLabels,
1426+
})
1427+
}
13871428

13881429
case BoolGauge:
13891430
if len(o.Indicator.BoolGauge.Grouping) > 0 {

0 commit comments

Comments
 (0)