feiyu563 / PrometheusAlert

Prometheus Alert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus,Zabbix,日志系统Graylog和数据可视化系统Grafana发出的预警消息,支持钉钉,微信,华为云短信,腾讯云短信,腾讯云电话,阿里云短信,阿里云电话等
https://feiyu563.gitbook.io
MIT License
2.78k stars 669 forks source link

飞书告警模板,点我屏蔽该告警跳转页面不显示Matchers字段的值 #255

Open xusir1 opened 1 year ago

xusir1 commented 1 year ago

飞书告警模板,点击“点我屏蔽告警”,打开Alertmanager Slicense页面,但是Matchers字段不显示“Alerts affected by this silence”内容,钉钉飞书告警是正常可显示的。 这是飞书告警点击屏蔽告警页面: 微信图片_20221008122506 这是钉钉告警点击屏蔽告警页面: 微信截图_1

xusir1 commented 1 year ago

请大神帮忙看看

huabingli commented 1 year ago

把中文的值去掉就行了

huabingli commented 1 year ago

{{ $urimsg:=""}}{{ range $key,$value:=$v.labels}}{{$urimsg = print $urimsg $key "=\"" $value "\"," }}{{end}}{{$data:=urlquery $urimsg }}[点我屏蔽该告警](http://192.168.80.252:9093/#/silences/new?filter=%7B{{SplitString $data 0 -3}}%7D)

ytc301 commented 1 year ago

{{ $urimsg:=""}}{{ range $key,$value:=$v.labels}}{{$urimsg = print $urimsg $key "=\"" $value "\"," }}{{end}}{{$data:=urlquery $urimsg }}[点我屏蔽该告警](http://192.168.80.252:9093/#/silences/new?filter=%7B{{SplitString $data 0 -3}}%7D)

$v.labels这个写法有问题报错

jicki commented 1 year ago

{{ $urimsg:=""}}{{ range $key,$value:=$v.labels}}{{$urimsg = print $urimsg $key "=\"" $value "\"," }}{{end}}{{$data:=urlquery $urimsg }}[点我屏蔽该告警](http://192.168.80.252:9093/#/silences/new?filter=%7B{{SplitString $data 0 -3}}%7D)

不错不错,这个可以用的 {{ $var := .externalURL}} {{ $urimsg:=""}}{{ range $key,$value:=$v.labels}}{{$urimsg = print $urimsg $key "=\"" $value "\"," }}{{end}} {{$data:=urlquery $urimsg }}[[ 点我屏蔽该告警 ]]({{$var}}/#/silences/new?filter=%7B{{SplitString $data 0 -3}}%7D)

这样会不会好一些 url 就不会固定了

jiaxinonly commented 1 year ago

我也遇到了问题,我定位出来问题在于url上标签连接的等号未进行url编码,但是默认的模板里面确实是对等号进行了url编码,或许是飞书渲染markdown的问题? 默认配置如下

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}**[Prometheus恢复信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 
故障主机IP:{{$v.labels.instance}}
**{{$v.annotations.description}}**{{else}}**[Prometheus告警信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
故障主机IP:{{$v.labels.instance}}
**{{$v.annotations.description}}**{{end}}{{ end }}
{{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg =  print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)

重点在于

$urimsg =  print $urimsg $key "%3D%22" $value "%22%2C"
jiaxinonly commented 1 year ago

可以使用如下命令进行测试,注意替换机器人token和alertmanager地址

curl -X POST \
  https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxx \
  -H 'Content-Type: application/json' \
  -d '{
  "msg_type": "interactive",
  "card": {
    "elements": [
      {
        "tag": "div",
        "text": {
          "content": "[屏蔽告警](http://xxxxxxx:9093/#/silences/new?filter=%7BIPMI%3D%2210.0.0.71%22%2Calertname%3D%22cpu温度过高%22%2Ccomment%3D%22A6000服务器%22%2Cid%3D%224%22%2Cinstance%3D%2210.0.2.30%22%2Cjob%3D%22ipmi_exporter%22%2Cname%3D%22CPU Temp%22%2Cseverity%3D%22critical%22%7D)",
          "tag": "lark_md"
        },
        "content": "",
        "elements": null
      },
      {
        "tag": "hr",
        "text": {
          "content": "",
          "tag": ""
        },
        "content": "",
        "elements": null
      },
      {
        "tag": "note",
        "text": {
          "content": "",
          "tag": ""
        },
        "content": "",
        "elements": [
          {
            "tag": "lark_md",
            "text": {
              "content": "",
              "tag": ""
            },
            "content": "PrometheusAlert告警消息",
            "elements": null
          }
        ]
      }
    ],
    "header": {
      "title": {
        "content": "PrometheusAlert告警消息",
        "tag": "plain_text"
      },
      "template": "red"
    }
  }
}'

实际上只有%3D这个等于符号的url编码在某处被解码了