Skip to content

Commit 85be50c

Browse files
support for generating slack receivers with buttons for alerts (#256)
* support for generating slack receivers with buttons for alerts
1 parent 91bbd26 commit 85be50c

File tree

2 files changed

+62
-8
lines changed

2 files changed

+62
-8
lines changed

prometheus-ksonnet/lib/alertmanager.libsonnet

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,48 @@
1717
]
1818
else [],
1919

20+
build_slack_receiver(name, slack_channel)::
21+
{
22+
name: name,
23+
slack_configs: [{
24+
api_url: $._config.slack_url,
25+
channel: slack_channel,
26+
send_resolved: true,
27+
title: '{{ template "__alert_title" . }}',
28+
text: '{{ template "__alert_text" . }}',
29+
actions: [
30+
{
31+
type: 'button',
32+
text: 'Runbook :green_book:',
33+
url: '{{ (index .Alerts 0).Annotations.runbook_url }}',
34+
},
35+
{
36+
type: 'button',
37+
text: 'Source :information_source:',
38+
url: '{{ (index .Alerts 0).GeneratorURL }}',
39+
},
40+
{
41+
type: 'button',
42+
text: 'Silence :no_bell:',
43+
url: '{{ template "__alert_silence_link" . }}',
44+
},
45+
],
46+
}],
47+
},
48+
2049
alertmanager_config:: {
21-
templates: ['/etc/alertmanager/*.tmpl'],
50+
templates: [
51+
'/etc/alertmanager/*.tmpl',
52+
'/etc/alertmanager/config/templates.tmpl',
53+
],
2254
route: {
2355
group_by: ['alertname'],
2456
receiver: 'slack',
2557
},
2658

27-
receivers: [{
28-
name: 'slack',
29-
slack_configs: [{
30-
api_url: $._config.slack_url,
31-
channel: $._config.slack_channel,
32-
}],
33-
}],
59+
receivers: [
60+
$.build_slack_receiver('slack', $._config.slack_channel),
61+
],
3462
},
3563

3664
local configMap = $.core.v1.configMap,
@@ -40,6 +68,7 @@
4068
configMap.new('alertmanager-config') +
4169
configMap.withData({
4270
'alertmanager.yml': $.util.manifestYaml($.alertmanager_config),
71+
'templates.tmpl': (importstr 'files/alertmanager_config.tmpl'),
4372
})
4473
else {},
4574

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{{ define "__alert_title" -}}
2+
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.cluster }}: {{ .GroupLabels.alertname }} ({{ .GroupLabels.namespace }})
3+
{{- end }}
4+
5+
{{ define "__alert_text" -}}
6+
{{ .CommonAnnotations.summary }}
7+
{{ if .Alerts.Firing | len }}Firing alerts:
8+
{{ range .Alerts.Firing }}- {{ .Annotations.message }}{{ .Annotations.description }}
9+
{{ end }}{{ end }}{{ if .Alerts.Resolved | len }}Resolved alerts:
10+
{{ range .Alerts.Resolved }}- {{ .Annotations.message }}{{ .Annotations.description }}
11+
{{ end }}{{ end }}
12+
{{- end }}
13+
14+
# This builds the silence URL. We exclude the alertname in the range
15+
# to avoid the issue of having trailing comma separator (%2C) at the end
16+
# of the generated URL. Inspired from https://gist.github.com/milesbxf/e2744fc90e9c41b47aa47925f8ff6512
17+
{{ define "__alert_silence_link" -}}
18+
{{ .ExternalURL }}/#/silences/new?filter=%7B
19+
{{- range .CommonLabels.SortedPairs -}}
20+
{{- if ne .Name "alertname" -}}
21+
{{- .Name }}%3D"{{- .Value -}}"%2C%20
22+
{{- end -}}
23+
{{- end -}}
24+
alertname%3D"{{ .CommonLabels.alertname }}"%7D
25+
{{- end }}

0 commit comments

Comments
 (0)