在 prometheus alertmanager 通知中提及 slack 用户

Posted

技术标签:

【中文标题】在 prometheus alertmanager 通知中提及 slack 用户【英文标题】:mention slack users in prometheus alertmanager notification 【发布时间】:2021-11-25 04:37:28 【问题描述】:

所以我有一个通用标签opsteam,一旦 alertmanager 被解雇,它应该会让 DM 陷入松弛状态。但是在 slack 中,我得到的用户名是纯文本,没有突出显示,这些用户也没有收到任何消息。

nodeSelector: 
  prometheus: "true"
enabled: true
retention: "30d"
extraFlags:
  - web.enable-lifecycle
  - web.enable-admin-api
strategy:
  type: RollingUpdate
global:
  scrape_interval: 30s
  external_labels:
    env: prod
    client: client
    cluster: project-prod-eks
    opsteam: "@U0325FRAD @U01GN7KJHU"

如果我将opsteam: "@U0325FRAD @U01GN7KJHU" 更改为opsteam: "@john @jim",它也没有任何效果。

这是我的自定义 slack 通知

 notifications.tmpl: |          
   define "__alert_silence_link" -
       .ExternalURL /#/silences/new?filter=%7B
      - range .CommonLabels.SortedPairs -
          - if ne .Name "alertname" -
              - .Name %3D"- .Value -"%2C%20
          - end -
      - end -
      alertname%3D"- .CommonLabels.alertname -"%7D
  - end 
  
   define "__alert_severity" -
      - if eq .CommonLabels.severity "critical" -
      *Severity:* `Critical`  if eq .Status "firing" :fire:- else -:ok:- end -
      - else if eq .CommonLabels.severity "warning" -
      *Severity:* `Warning`
      - else if eq .CommonLabels.severity "info" -
      *Severity:* `Info`
      - else -
      *Severity:* :question:  .CommonLabels.severity 
      - end 
  - end 
  
   define "__alert_client_details" -
      *Env:*      .CommonLabels.env 
      *Client:*   .CommonLabels.client 
      *Cluster:*  .CommonLabels.cluster 
  - end 
  
   define "slack.title" -
      [ .Status | toUpper -
       if eq .Status "firing" : .Alerts.Firing | len - end -
      ]  .CommonLabels.cluster  -  .CommonLabels.alertname 
  - end 
  
   define "slack.text" -
      .CommonLabels.opsteam   <<-----------------WANT THEM TO BE User Mentions!!!!!
      template "__alert_severity" . 
      template "__alert_client_details" . 
     - if (index .Alerts 0).Annotations.summary 
     - "\n" -
     *Summary:*  (index .Alerts 0).Annotations.summary 
     - end 
     
      range .Alerts       
       - if .Annotations.description                    
        .Annotations.description - "\n" -
       - end 
       - if .Annotations.message 
        .Annotations.message - "\n" -
       - end 
     - end 
  
  - end 
  
   define "slack.color" -
       if eq .Status "firing" -
           if eq .CommonLabels.severity "warning" -
              warning
          - else if eq .CommonLabels.severity "critical" -
              danger
          - else -
              #439FE0
          - end -
       else -
      good
      - end 
  - end 
   

是的,我的消息只是松弛的文本。

【问题讨论】:

【参考方案1】:

在 Slack 中嵌入用户名有一种给定的格式。https://api.slack.com/reference/surfaces/formatting#mentioning-users

【讨论】:

以上是关于在 prometheus alertmanager 通知中提及 slack 用户的主要内容,如果未能解决你的问题,请参考以下文章

prometheus配置alertmanager完整过程

小姐姐带你入门Alertmanager与Prometheus告警规则

prometheus 与 alertmanager 结合 发送邮件报警

linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)

linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)

Prometheus监控神器-Alertmanager篇