普罗米修斯在警报注释中使用 html 内容并在电子邮件模板中使用它
prometheus using html content in alerts annotations and using it in email template
所以我们的警报看起来像
ALERT alert_name
condition
FOR 30s
LABELS {some labels}
ANNOTATIONS {
header = "<b> data is {{ $labels.label_name }} </b>"
}
电子邮件模板看起来像。
{{ define "our_default_template" }}
{{range .Alerts}}
{{ .Annotations.header }}
{{ end }}
{{ end }}
alertmanager.yml 长得像
receivers:
- name: 'email-sender'
email_configs:
- to: "email address"
send_resolved: true
html: '{{ template "our_default_template" . }}'
templates:
- '<path to templates>/*tmpl'
我们正在收到电子邮件,但内容不正确。
我们收到的邮件:
<b> data is label_value </b>
我们想要的:
数据为label_value
所以我们想要的是html输出。
有人可以帮忙吗?
首先,我建议不要在 Prometheus 端执行 HTML,因为随着系统的发展,这可能会导致维护问题。
看起来 Go 的自动转义 HTML 就是这里发生的事情,因此您需要一种方法来告诉 Go 的模板语言这是安全的。 alertmanager 没有那个功能(Prometheus 有),所以我为此提交了 https://github.com/prometheus/alertmanager/issues/314。
修复后,您就可以{{ .Annotations.header | safeHtml }}
所以我们的警报看起来像
ALERT alert_name
condition
FOR 30s
LABELS {some labels}
ANNOTATIONS {
header = "<b> data is {{ $labels.label_name }} </b>"
}
电子邮件模板看起来像。
{{ define "our_default_template" }}
{{range .Alerts}}
{{ .Annotations.header }}
{{ end }}
{{ end }}
alertmanager.yml 长得像
receivers:
- name: 'email-sender'
email_configs:
- to: "email address"
send_resolved: true
html: '{{ template "our_default_template" . }}'
templates:
- '<path to templates>/*tmpl'
我们正在收到电子邮件,但内容不正确。
我们收到的邮件:
<b> data is label_value </b>
我们想要的:
数据为label_value
所以我们想要的是html输出。
有人可以帮忙吗?
首先,我建议不要在 Prometheus 端执行 HTML,因为随着系统的发展,这可能会导致维护问题。
看起来 Go 的自动转义 HTML 就是这里发生的事情,因此您需要一种方法来告诉 Go 的模板语言这是安全的。 alertmanager 没有那个功能(Prometheus 有),所以我为此提交了 https://github.com/prometheus/alertmanager/issues/314。
修复后,您就可以{{ .Annotations.header | safeHtml }}