Prometheus Alertmanager 配置Slack通知无法@提及用户如何解决
问题根因
Slack API 默认不会自动解析消息文本中的@提及内容,需要同时调整标签格式和Alertmanager的Slack接收器配置才能正常触发提及提醒。
解决方案步骤
第一步:调整Prometheus公共标签格式
不要直接写@用户ID或@用户名,必须使用Slack官方要求的提及语法,用尖括号包裹用户ID,修改Prometheus配置的external_labels部分:
global: external_labels: env: prod client: client cluster: project-prod-eks # 替换原来的@xxx格式,用<@用户ID>格式,必须用U开头的Slack用户ID,不要用显示名john、jim这类 opsteam: "<@U0325FRAD> <@U01GN7KJHU>"
第二步:修改Alertmanager的Slack接收器配置
在你的Alertmanager配置对应的Slack receiver段,添加以下参数,开启提及解析和markdown支持:
receivers: - name: 'slack-receiver' # 替换成你自己的接收器名称 slack_configs: - api_url: '你的Slack webhook地址' channel: '#你的告警频道' # 如果要发DM就填用户ID # 新增以下三个配置 link_names: true # 开启用户提及解析 mrkdwn_in: ['text'] # 开启text字段的markdown格式解析 parse: 'full' # 启用全量解析规则 # 其他原有配置保持不变,比如title、text模板引用
第三步:验证模板配置
你当前的通知模板里{{ .CommonLabels.opsteam }}的引用逻辑无需修改,调整完以上配置后,重启Prometheus和Alertmanager生效即可。
补充注意事项
- 必须使用Slack用户的唯一ID(U开头的字符串),不要用用户自定义的显示名,显示名存在重名、改名的情况,会导致解析失败
- 如果需要@用户组,格式为
<!subteam^Sxxxxxx>,其中Sxxxxxx为用户组的ID - 如果是直接给用户发DM通知,可以直接把Slack配置的
channel字段设置为对应用户的ID,无需在消息内容里@
内容的提问来源于stack exchange,提问作者DmitrySemenov
相关产品推荐
相关产品推荐

