Prometheus Alertmanager Slack通知换行符渲染异常问题求助
问题根因
- 你当前的路由配置按
alertname分组,所有同一告警类型的实例故障会被合并为同一条通知发送,所以不会按每个实例单独生成消息。 - Go模板中直接写
\n会被解析为普通字符串,不会被识别为换行符,同时Slack默认未开启Markdown解析时也不会渲染转义换行。
解决方案
方案1:单条告警单独发送(完全匹配你期望的效果)
调整路由分组规则,给每个告警生成独立通知,不需要在模板中循环遍历告警:
- 修改路由
group_by配置,加入可唯一标识单条告警的标签:
route: group_by: ['alertname', 'namespace', 'pod', 'container'] group_wait: 30s group_interval: 3m repeat_interval: 4h receiver: slack-channel
- 简化Slack通知模板,直接取公共注解内容,同时开启Markdown解析:
notifications: receivers: - name: slack-channel slack_configs: - channel: kube-alerts mrkdwn: true # 开启Slack Markdown渲染 title: "{{ .CommonAnnotations.summary }}" text: "{{ .CommonAnnotations.description }}"
方案2:多告警合并为单条消息正常换行
如果需要把同类型告警合并到同一条Slack消息里,调整模板的换行写法即可:
slack_configs: - channel: kube-alerts mrkdwn: true title: "{{ range .Alerts }}{{ .Annotations.summary }}{{ println }}{{ end }}" text: "{{ range .Alerts }}{{ .Annotations.description }}{{ println }}{{ end }}"
用{{"\n"}}代替直接写\n也可以实现相同的换行效果。
额外注意
告警规则中的description注解不要写成分行缩进的格式,否则最终通知里会出现多余的空白字符,建议统一改成单行字符串。
内容的提问来源于stack exchange,提问作者Pannu
相关产品推荐
相关产品推荐

