mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-03-11 15:34:56 +00:00
vmalert: skip automatically added labels on alerts restore (#871)
Label `alertgroup` was introduced in #611 and automatically added to generated time series. By mistake, this new label wasn't correctly purged on restore event and affected alert's ID uniqueness. This commit removes `alertgroup` label in restore function. https://github.com/VictoriaMetrics/VictoriaMetrics/issues/870
This commit is contained in:
parent
e8fe618bbb
commit
333675875f
2 changed files with 7 additions and 3 deletions
|
@ -403,7 +403,7 @@ func (ar *AlertingRule) Restore(ctx context.Context, q datasource.Querier, lookb
|
||||||
labelsFilter += fmt.Sprintf(",%s=%q", k, v)
|
labelsFilter += fmt.Sprintf(",%s=%q", k, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the last datapoint in range via MetricsQL `last_over_time`.
|
// Get the last data point in range via MetricsQL `last_over_time`.
|
||||||
// We don't use plain PromQL since Prometheus doesn't support
|
// We don't use plain PromQL since Prometheus doesn't support
|
||||||
// remote write protocol which is used for state persistence in vmalert.
|
// remote write protocol which is used for state persistence in vmalert.
|
||||||
expr := fmt.Sprintf("last_over_time(%s{alertname=%q%s}[%ds])",
|
expr := fmt.Sprintf("last_over_time(%s{alertname=%q%s}[%ds])",
|
||||||
|
@ -417,11 +417,14 @@ func (ar *AlertingRule) Restore(ctx context.Context, q datasource.Querier, lookb
|
||||||
labels := m.Labels
|
labels := m.Labels
|
||||||
m.Labels = make([]datasource.Label, 0)
|
m.Labels = make([]datasource.Label, 0)
|
||||||
// drop all extra labels, so hash key will
|
// drop all extra labels, so hash key will
|
||||||
// be identical to timeseries received in Exec
|
// be identical to time series received in Exec
|
||||||
for _, l := range labels {
|
for _, l := range labels {
|
||||||
if l.Name == alertNameLabel {
|
if l.Name == alertNameLabel {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if l.Name == alertGroupNameLabel {
|
||||||
|
continue
|
||||||
|
}
|
||||||
// drop all overridden labels
|
// drop all overridden labels
|
||||||
if _, ok := ar.Labels[l.Name]; ok {
|
if _, ok := ar.Labels[l.Name]; ok {
|
||||||
continue
|
continue
|
||||||
|
@ -436,7 +439,7 @@ func (ar *AlertingRule) Restore(ctx context.Context, q datasource.Querier, lookb
|
||||||
a.ID = hash(m)
|
a.ID = hash(m)
|
||||||
a.State = notifier.StatePending
|
a.State = notifier.StatePending
|
||||||
ar.alerts[a.ID] = a
|
ar.alerts[a.ID] = a
|
||||||
logger.Infof("alert %q(%d) restored to state at %v", a.Name, a.ID, a.Start)
|
logger.Infof("alert %q (%d) restored to state at %v", a.Name, a.ID, a.Start)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,6 +355,7 @@ func TestAlertingRule_Restore(t *testing.T) {
|
||||||
metricWithValueAndLabels(t, float64(time.Now().Truncate(time.Hour).Unix()),
|
metricWithValueAndLabels(t, float64(time.Now().Truncate(time.Hour).Unix()),
|
||||||
"__name__", alertForStateMetricName,
|
"__name__", alertForStateMetricName,
|
||||||
alertNameLabel, "",
|
alertNameLabel, "",
|
||||||
|
alertGroupNameLabel, "groupID",
|
||||||
"foo", "bar",
|
"foo", "bar",
|
||||||
"namespace", "baz",
|
"namespace", "baz",
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue