From e384d88abfa1cc8cab185cf5674f5b6fc859c6e2 Mon Sep 17 00:00:00 2001 From: Howie Date: Mon, 10 Oct 2022 15:44:58 +0800 Subject: [PATCH] fix issue#3053 (#3182) vmalert: prevent duplicating label `alertname` for notifications The issue has no impact on alerting procedure. But still needs to be fixed for clarity. https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3053 Signed-off-by: lihaowei --- .../notifier/alertmanager_request.qtpl | 6 +- .../notifier/alertmanager_request.qtpl.go | 125 +++++++++--------- app/vmalert/notifier/alertmanager_test.go | 3 - 3 files changed, 68 insertions(+), 66 deletions(-) diff --git a/app/vmalert/notifier/alertmanager_request.qtpl b/app/vmalert/notifier/alertmanager_request.qtpl index dca573ac7..74e974b1e 100644 --- a/app/vmalert/notifier/alertmanager_request.qtpl +++ b/app/vmalert/notifier/alertmanager_request.qtpl @@ -15,10 +15,10 @@ "endsAt":{%q= alert.End.Format(time.RFC3339Nano) %}, {% endif %} "labels": { - "alertname":{%q= alert.Name %} {% code lbls := alert.toPromLabels(relabelCfg) %} - {% for _, l := range lbls %} - ,{%q= l.Name %}:{%q= l.Value %} + {% code ll := len(lbls) %} + {% for idx, l := range lbls %} + {%q= l.Name %}:{%q= l.Value %}{% if idx != ll-1 %}, {% endif %} {% endfor %} }, "annotations": { diff --git a/app/vmalert/notifier/alertmanager_request.qtpl.go b/app/vmalert/notifier/alertmanager_request.qtpl.go index 8a6ce45e2..3f4562003 100644 --- a/app/vmalert/notifier/alertmanager_request.qtpl.go +++ b/app/vmalert/notifier/alertmanager_request.qtpl.go @@ -1,135 +1,140 @@ // Code generated by qtc from "alertmanager_request.qtpl". DO NOT EDIT. // See https://github.com/valyala/quicktemplate for details. -//line app/vmalert/notifier/alertmanager_request.qtpl:1 +//line alertmanager_request.qtpl:1 package notifier -//line app/vmalert/notifier/alertmanager_request.qtpl:1 +//line alertmanager_request.qtpl:1 import ( "time" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel" ) -//line app/vmalert/notifier/alertmanager_request.qtpl:8 +//line alertmanager_request.qtpl:8 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line app/vmalert/notifier/alertmanager_request.qtpl:8 +//line alertmanager_request.qtpl:8 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line app/vmalert/notifier/alertmanager_request.qtpl:8 +//line alertmanager_request.qtpl:8 func streamamRequest(qw422016 *qt422016.Writer, alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) { -//line app/vmalert/notifier/alertmanager_request.qtpl:8 + //line alertmanager_request.qtpl:8 qw422016.N().S(`[`) -//line app/vmalert/notifier/alertmanager_request.qtpl:10 + //line alertmanager_request.qtpl:10 for i, alert := range alerts { -//line app/vmalert/notifier/alertmanager_request.qtpl:10 + //line alertmanager_request.qtpl:10 qw422016.N().S(`{"startsAt":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:12 + //line alertmanager_request.qtpl:12 qw422016.N().Q(alert.Start.Format(time.RFC3339Nano)) -//line app/vmalert/notifier/alertmanager_request.qtpl:12 + //line alertmanager_request.qtpl:12 qw422016.N().S(`,"generatorURL":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:13 + //line alertmanager_request.qtpl:13 qw422016.N().Q(generatorURL(alert)) -//line app/vmalert/notifier/alertmanager_request.qtpl:13 + //line alertmanager_request.qtpl:13 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:14 + //line alertmanager_request.qtpl:14 if !alert.End.IsZero() { -//line app/vmalert/notifier/alertmanager_request.qtpl:14 + //line alertmanager_request.qtpl:14 qw422016.N().S(`"endsAt":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:15 + //line alertmanager_request.qtpl:15 qw422016.N().Q(alert.End.Format(time.RFC3339Nano)) -//line app/vmalert/notifier/alertmanager_request.qtpl:15 + //line alertmanager_request.qtpl:15 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:16 + //line alertmanager_request.qtpl:16 } -//line app/vmalert/notifier/alertmanager_request.qtpl:16 - qw422016.N().S(`"labels": {"alertname":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:18 - qw422016.N().Q(alert.Name) -//line app/vmalert/notifier/alertmanager_request.qtpl:19 + //line alertmanager_request.qtpl:16 + qw422016.N().S(`"labels": {`) + //line alertmanager_request.qtpl:18 lbls := alert.toPromLabels(relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:20 - for _, l := range lbls { -//line app/vmalert/notifier/alertmanager_request.qtpl:20 - qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 + //line alertmanager_request.qtpl:19 + ll := len(lbls) + + //line alertmanager_request.qtpl:20 + for idx, l := range lbls { + //line alertmanager_request.qtpl:21 qw422016.N().Q(l.Name) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 + //line alertmanager_request.qtpl:21 qw422016.N().S(`:`) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 + //line alertmanager_request.qtpl:21 qw422016.N().Q(l.Value) -//line app/vmalert/notifier/alertmanager_request.qtpl:22 + //line alertmanager_request.qtpl:21 + if idx != ll-1 { + //line alertmanager_request.qtpl:21 + qw422016.N().S(`,`) + //line alertmanager_request.qtpl:21 + } + //line alertmanager_request.qtpl:22 } -//line app/vmalert/notifier/alertmanager_request.qtpl:22 + //line alertmanager_request.qtpl:22 qw422016.N().S(`},"annotations": {`) -//line app/vmalert/notifier/alertmanager_request.qtpl:25 + //line alertmanager_request.qtpl:25 c := len(alert.Annotations) -//line app/vmalert/notifier/alertmanager_request.qtpl:26 + //line alertmanager_request.qtpl:26 for k, v := range alert.Annotations { -//line app/vmalert/notifier/alertmanager_request.qtpl:27 + //line alertmanager_request.qtpl:27 c = c - 1 -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 qw422016.N().Q(k) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 qw422016.N().S(`:`) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 qw422016.N().Q(v) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 if c > 0 { -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 + //line alertmanager_request.qtpl:28 } -//line app/vmalert/notifier/alertmanager_request.qtpl:29 + //line alertmanager_request.qtpl:29 } -//line app/vmalert/notifier/alertmanager_request.qtpl:29 + //line alertmanager_request.qtpl:29 qw422016.N().S(`}}`) -//line app/vmalert/notifier/alertmanager_request.qtpl:32 + //line alertmanager_request.qtpl:32 if i != len(alerts)-1 { -//line app/vmalert/notifier/alertmanager_request.qtpl:32 + //line alertmanager_request.qtpl:32 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:32 + //line alertmanager_request.qtpl:32 } -//line app/vmalert/notifier/alertmanager_request.qtpl:33 + //line alertmanager_request.qtpl:33 } -//line app/vmalert/notifier/alertmanager_request.qtpl:33 + //line alertmanager_request.qtpl:33 qw422016.N().S(`]`) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 } -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line alertmanager_request.qtpl:35 func writeamRequest(qq422016 qtio422016.Writer, alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) { -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 qw422016 := qt422016.AcquireWriter(qq422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 streamamRequest(qw422016, alerts, generatorURL, relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 qt422016.ReleaseWriter(qw422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 } -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line alertmanager_request.qtpl:35 func amRequest(alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) string { -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 qb422016 := qt422016.AcquireByteBuffer() -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 writeamRequest(qb422016, alerts, generatorURL, relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 qs422016 := string(qb422016.B) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 qt422016.ReleaseByteBuffer(qb422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 return qs422016 -//line app/vmalert/notifier/alertmanager_request.qtpl:35 + //line alertmanager_request.qtpl:35 } diff --git a/app/vmalert/notifier/alertmanager_test.go b/app/vmalert/notifier/alertmanager_test.go index 1a6fe8b05..9680edcd7 100644 --- a/app/vmalert/notifier/alertmanager_test.go +++ b/app/vmalert/notifier/alertmanager_test.go @@ -67,9 +67,6 @@ func TestAlertManager_Send(t *testing.T) { if a[0].GeneratorURL != "0/0" { t.Errorf("expected 0/0 as generatorURL got %s", a[0].GeneratorURL) } - if a[0].Labels["alertname"] != "alert0" { - t.Errorf("expected alert0 as alert name got %s", a[0].Labels["alertname"]) - } if a[0].StartsAt.IsZero() { t.Errorf("expected non-zero start time") }