通用自定义模版专用:欢迎共享大家的自定义模版,方便其他人也可以直接使用
feiyu563 opened this issue · 80 comments
[prometheus自定义模版,支持恢复通知模版]
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
## [Prometheus恢复信息]({{$v.generatorURL}})
#### [{{$v.labels.alertname}}]({{$var}})
###### 告警级别:{{$v.labels.level}}
###### 开始时间:{{$v.startsAt}}
###### 结束时间:{{$v.endsAt}}
###### 故障主机IP:{{$v.labels.instance}}
##### {{$v.annotations.description}}
![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)
{{else}}
## [Prometheus告警信息]({{$v.generatorURL}})
#### [{{$v.labels.alertname}}]({{$var}})
###### 告警级别:{{$v.labels.level}}
###### 开始时间:{{$v.startsAt}}
###### 结束时间:{{$v.endsAt}}
###### 故障主机IP:{{$v.labels.instance}}
##### {{$v.annotations.description}}
![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)
{{end}}
{{ end }}
[自定义模版中只取指定长度的告警消息写法]
{{ $v.annotations.description | printf "%.20s" }}
上面数字就表示需要取的文本长度,超出的会被截断
微信机器人自定义告警模板:
- 告警红色
- 恢复绿色
- 告警级别我用的
severity
,可以修改为level
。请自己定义labels - 使用
hostname
,请自己定义labels - 我将故障主机IP改为实例地址,因为有些探针运行在本地,但告警对象不是它,所以修改为实例地址
description
是自定义的告警详细信息
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
#### [Prometheus恢复信息]({{$v.generatorURL}})
> <font color="info">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
> <font color="info">告警级别</font>:{{$v.labels.severity}}
> <font color="info">开始时间</font>:{{$v.startsAt}}
> <font color="info">结束时间</font>:{{$v.endsAt}}
> <font color="info">实例地址</font>:{{$v.labels.instance}}
> <font color="info">主机名称</font>:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{else}}
#### [Prometheus告警信息]({{$v.generatorURL}})
> <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
> <font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
> <font color="#FF0000">开始时间</font>:{{$v.startsAt}}
> <font color="#FF0000">结束时间</font>:{{$v.endsAt}}
> <font color="#FF0000">实例地址</font>:{{$v.labels.instance}}
> <font color="#FF0000">主机名称</font>:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
效果图:
备注:
此模板稍微修改也可以适用于钉钉。
请问自定义的消息模板能否通过什么方式注入到服务中,想把自定义的模板加入到自动部署的流程中
请问下,我在配置prometheus 邮件告警,使用自定义模板,是碰到这个错误,“2020/12/01 18:22:20.357 [E] [value.go:460] [1606818140356848598] 接口参数缺失!”,我在alertmanager配置的是“ - url: 'http://ip:port/prometheusalert' ”,是哪里配置不对导致参数缺失?我找不到原因所在。
feiyu563,你好;腾讯云的短信接口中需要输入多个参数,请问下在模板中需要怎么配置这些参数呢?
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}Prometheus恢复信息
告警名称:{{$v.labels.alertname}}
告警级别:{{$v.labels.severity}}
开始时间:{{$v.startsAt}}
结束时间:{{$v.endsAt}}
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}{{$v.annotations.description}}
{{else}}Prometheus告警信息
告警名称:{{$v.labels.alertname}}
告警级别:{{$v.labels.severity}}
开始时间:{{$v.startsAt}}
结束时间:{{$v.endsAt}}
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}{{$v.annotations.description}}
{{end}}
{{ end }}
大佬牛b,比默认模板好看多了。默认模版告警恢复傻傻不分清楚
prometheus 报警自定义模版
{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}**<font color="info"> [恢复信息] From Prome</font>**
**{{$v.labels.alertname}}**
开始时间:{{GetCSTtime $v.startsAt}}
结束时间:{{GetCSTtime $v.endsAt}}
主机IP:{{$v.labels.kubernetes_node}}
{{else}}**<font color="#FF0000"> [告警信息] From Prome</font>**
** {{$v.labels.alertname}}**
告警级别:{{$v.labels.level}}
开始时间:{{GetCSTtime $v.startsAt}}
主机IP:{{$v.labels.kubernetes_node}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
graylog3 报警自定义模版
<font color="warning">[告警信息] From Graylog</font>
>**{{.event_definition_description}}**
{{ range $k,$v:=.backlog }}
>告警索引:{{$v.index}}
开始时间:{{GetCSTtime $v.timestamp}}
告警主机:{{$v.fields.gl2_remote_ip}}
**{{$v.message}}**
{{end}}
显示所有prometheus告警label的自定义模版:
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
## [Prometheus恢复信息]({{$v.generatorURL}})
#### [{{$v.labels.alertname}}]({{$var}})
{{ range $key,$value:=$v.labels }}
###### {{$key}}:{{$value}}
{{end}}
###### 开始时间:{{$v.startsAt}}
###### 结束时间:{{$v.endsAt}}
##### {{$v.annotations.description}}
![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)
{{else}}
## [Prometheus告警信息]({{$v.generatorURL}})
#### [{{$v.labels.alertname}}]({{$var}})
{{ range $key,$value:=$v.labels }}
###### {{$key}}:{{$value}}
{{end}}
###### 开始时间:{{$v.startsAt}}
###### 结束时间:{{$v.endsAt}}
##### {{$v.annotations.description}}
![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)
{{end}}
{{ end }}
效果如下图:
钉钉告警模板
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
#### [Prometheus恢复信息]({{$v.generatorURL}})
##### <font color="#02b340">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
##### <font color="#02b340">告警级别</font>:{{$v.labels.severity}}
##### <font color="#02b340">触发时间</font>:{{GetCSTtime $v.startsAt}}
##### <font color="#02b340">结束时间</font>:{{GetCSTtime $v.endsAt}}
##### <font color="#02b340">主机名称</font>:{{$v.labels.nodename}} {{$v.labels.hostname}}
**{{$v.annotations.summary}}**
[点击打开grafana]($v.annotations.grafana)
{{else}}
#### [Prometheus告警信息]({{$v.generatorURL}})
##### <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
##### <font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
##### <font color="#FF0000">触发时间</font>:{{GetCSTtime $v.startsAt}}
##### <font color="#FF0000">主机名称</font>:{{$v.labels.nodename}} {{$v.labels.hostname}}
**{{$v.annotations.summary}}**
[点击打开grafana]($v.annotations.grafana)
{{end}}
{{ end }}
- 其中
hostname
需要自行定义或者各种xxx_exporter原生参数支持.
效果图如下
好看
我用这个模板,钉钉告警,在有触发告警时,会携带历史的恢复告警信息,导致一条告警消息,其中三四条恢复内容,一条告警消息。请问各位大佬有发现这个问题嘛。
我用这个模板,钉钉告警,在有触发告警时,会携带历史的恢复告警信息,导致一条告警消息,其中三四条恢复内容,一条告警消息。请问各位大佬有发现这个问题嘛。
这是因为消息合并了
json里面字符串取部分拼接怎么做啊
数据:
'event': {
'id': '01FF4FDZJQJTG1JAN450JXF9BT',
'origin_context': 'urn:graylog:message:es:graylog_178:4ed1ca06-1120-11ec-8c7e-a2ca6eaea137',
}
想拿出来 graylog_178 4ed1ca06-1120-11ec-8c7e-a2ca6eaea137
[自定义模版中只取指定长度的告警消息写法]
{{ $v.annotations.description | printf "%.20s" }}
上面数字就表示需要取的文本长度,超出的会被截断
[自定义模版中只取指定长度的告警消息写法]
{{ $v.annotations.description | printf "%.20s" }}
上面数字就表示需要取的文本长度,超出的会被截断
您好,请问,针对ip:port这种针对匹配到的符号:进行截取的话,应该怎样写
{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
### [Prometheus恢复通知]({{$v.generatorURL}})
<font color="info">告警类型</font>:{{$v.labels.alertname}}
<font color="info">告警级别</font>:{{$v.labels.severity}}
<font color="info">故障时间</font>:{{GetCSTtime $v.startsAt}}
<font color="info">恢复时间</font>:{{GetCSTtime $v.endsAt}}
<font color="info">告警IP</font>:{{$v.labels.instance}}
<font color="info">告警主机</font>:{{$v.labels.hostname}}
#### =======<font color="info">告警详情</font>=======
**<font color="info">告警主题</font>:{{$v.annotations.summary}}**
**<font color="info">告警内容</font>:{{$v.annotations.description}}**
{{else}}
### [Prometheus告警通知]({{$v.generatorURL}})
<font color="#FF0000">告警类型</font>:{{$v.labels.alertname}}
<font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
<font color="#FF0000">故障时间</font>:{{GetCSTtime $v.startsAt}}
<font color="#FF0000">告警IP</font>:{{$v.labels.instance}}
<font color="#FF0000">告警主机</font>:{{$v.labels.hostname}}
#### =======<font color="#FF0000">告警详情</font>=======
**<font color="#FF0000">告警主题</font>:{{$v.annotations.summary}}**
**<font color="#FF0000">告警内容</font>:{{$v.annotations.description}}**
**<font color="#FF0000">告警值</font>:{{$v.annotations.value}}**
{{end}}
{{ end }}
飞书 V2 报警模板,之所以将 {{$v.status}} 放进去,是因为飞书报警可以根据报警状态实现不同的 title color
// 飞书相关的代码
var color string
if strings.Count(text, "resolved") > 0 && strings.Count(text, "firing") > 0 {
color = "orange"
} else if strings.Count(text, "resolved") > 0 {
color = "green"
} else {
color = "red"
}
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
**[Prometheus 恢复通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{else}}
**[Prometheus 报警通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}} > {{$v.labels.severity}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
飞书V2报警模板,结束将{{$v.status}}去,是因为飞书可以报警根据报警状态实现不同的标题颜色
//飞书相关的代码 变种 颜色 字符串 ,如果 字符串。计数(文本,“已解决”)> 0 && 字符串。Count ( text , "firing" ) > 0 { color = "orange" } else if strings。计数(文本,“已解决”)> 0 { color = “green” = “红色” }{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} **[Prometheus 恢复通知]({{$v.generatorURL}})** 告警名称:{{$v.labels.alertname}} 告警状态:{{$v.status}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}} 结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 实例地址:{{$v.labels.instance}} 主机名称:{{$v.labels.hostname}} **{{$v.annotations.description}}** {{else}} **[Prometheus 报警通知]({{$v.generatorURL}})** 告警名称:{{$v.labels.alertname}} 告警状态:{{$v.status}} > {{$v.labels.severity}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}} 结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 实例地址:{{$v.labels.instance}} 主机名称:{{$v.labels.hostname}} **{{$v.annotations.description}}** {{end}} {{ end }}
有效果图吗
这段飞书的配置段,写到哪儿?
【钉钉模板】
{{ $var := .externalURL}}{{ $status := .status}}{{ range $k,$v:=.alerts }} {{if eq $status "resolved"}}
## [告警恢复-通知]({{$var}})
#### 监控指标: {{$v.labels.alertname}}
{{ if eq $v.labels.severity "warning" }}
#### 告警级别: **<font color="#E6A23C">{{$v.labels.severity}}</font>**
{{ else if eq $v.labels.severity "critical" }}
#### 告警级别: **<font color="#F56C6C">{{$v.labels.severity}}</font>**
{{ end }}
#### 当前状态: **<font color="#67C23A" size=4>已恢复</font>**
#### 故障主机: {{$v.labels.instance}}
* ###### 告警阈值: {{$v.labels.threshold}}
* ###### 开始时间: {{GetCSTtime $v.startsAt}}
* ###### 恢复时间: {{GetCSTtime $v.endsAt}}
#### 告警恢复: <font color="#67C23A">已恢复,{{$v.annotations.description}}</font>
{{ else }}
## [监控告警-通知]({{$var}})
#### 监控指标: {{$v.labels.alertname}}
{{ if eq $v.labels.severity "warning" }}
#### 告警级别: **<font color="#E6A23C" size=4>{{$v.labels.severity}}</font>**
#### 当前状态: **<font color="#E6A23C">需要处理</font>**
{{ else if eq $v.labels.severity "critical" }}
#### 告警级别: **<font color="#F56C6C" size=4>{{$v.labels.severity}}</font>**
#### 当前状态: **<font color="#F56C6C">需要处理</font>**
{{ end }}
#### 故障主机: {{$v.labels.instance}}
* ###### 告警阈值: {{$v.labels.threshold}}
* ###### 持续时间: {{$v.labels.for_time}}
* ###### 触发时间: {{GetCSTtime $v.startsAt}}
{{ if eq $v.labels.severity "warning" }}
#### 告警触发: <font color="#E6A23C">{{$v.annotations.description}}</font>
{{ else if eq $v.labels.severity "critical" }}
#### 告警触发: <font color="#F56C6C">{{$v.annotations.description}}</font>
{{ end }}
{{ end }}
{{ end }}
【样例】
[prometheus自定义模版,支持恢复通知模版]
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} ## [Prometheus恢复信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) ###### 告警级别:{{$v.labels.level}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ###### 故障主机IP:{{$v.labels.instance}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{else}} ## [Prometheus告警信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) ###### 告警级别:{{$v.labels.level}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ###### 故障主机IP:{{$v.labels.instance}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{end}} {{ end }}
你好,这个是直接复制到template.tmpl模板中吗,但是我的告警还是原模板的,自定义的没有生效,config文件中需要修改什么吗
飞书告警模板
{{ range $k,$v:=.alerts }}{{ if eq $v.status "resolved" }}✅{{ $v.labels.alertname }}
告警级别:{{ $v.labels.severity }}
开始时间:{{ GetCSTtime $v.startsAt }}
结束时间:{{ GetCSTtime $v.endsAt }}
故障主机IP:{{ $v.labels.instance }}
告警内容:
{{ $v.annotations.description }}{{ else }}{{ if eq $v.labels.severity "warning" }}🟡{{$v.labels.alertname}}
告警级别🟡:{{ $v.labels.severity }}
{{ else if eq $v.labels.severity "critical" }}❌{{$v.labels.alertname}}
告警级别❌:{{ $v.labels.severity }}
{{ else if eq $v.labels.severity "emergency" }}❌🔥🔥{{ $v.labels.alertname }}
告警级别❌🔥🔥:{{ $v.labels.severity }}
{{ end }}开始时间:{{ GetCSTtime $v.startsAt }}
故障主机IP:{{ $v.labels.instance }}
告警内容:
{{ $v.annotations.summary }}
{{ $v.annotations.description }}{{ end }}{{ end }}
用不了没图案
用不了没图案
模板除了会判断{{ if eq $v.status "resolved" }}
,还需继续判断这里:{{ if eq $v.labels.severity "warning" }}
。
如果没有图案,可能是你的 severity标签
的值不一致。
比如,我的这里只有三个级别 {{ if eq $v.labels.severity "warning" }}
:
-
alert: "主机失联"
expr: up == 0
for: 1m
labels:
severity:emergency
annotations:
summary: "{{ $labels.instance }} 失联"
description: "超过5分钟没有响应!"labels:
severity:emergency
labels:
severity:critical
labels:
severity:warning
飞书
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{- if eq $v.status "firing"}}[{{$v.labels.alertname}}]({{$var}}) **😈{{$v.status}}**
{{- range $key,$value:=$v.annotations }}
{{if eq $key "summary" }} **☎SUMM: {{ $value}}**{{ end -}}
{{if eq $key "description" }} **✍DESC:** {{ $value}}{{ end -}}
{{if eq $key "message" }} **✉MSG:** {{ $value}}{{ end -}}
{{- end}}
**⏱Start:** {{GetCSTtime $v.startsAt}}
*[view details]({{$v.generatorURL}})*
{{- range $key,$value:=$v.labels }}
> {{- $key}}:{{$value -}}
{{end}}
{{else}}[{{$v.labels.alertname}}]({{$var}}) **😎{{$v.status}}**
{{- range $key,$value:=$v.annotations }}
{{if eq $key "summary" }} **☎SUMM:** {{ $value}}{{ end -}}
{{if eq $key "description" }} **✍DESC:** {{ $value}}{{ end -}}
{{if eq $key "message" }} **✉MSG:** {{ $value}}{{ end -}}
{{- end}}
**⏱Start:** {{GetCSTtime $v.startsAt}}
**⏲End:** {{GetCSTtime $v.endsAt}}
[view details]({{$v.generatorURL}})
{{- end }}{{end}}
prometheus-fs
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
**[Prometheus恢复信息]({{$v.generatorURL}})**
【恢复名称】[{{$v.labels.alertname}}]({{$var}})✅{{if $v.labels.level}}
【恢复级别】{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告{{else if eq $v.labels.level "2"}}一般严重{{else if eq $v.labels.level "3"}}严重{{else if eq $v.labels.level "4"}}灾难{{else}}{{$v.labels.level}}{{end}}{{end}}
【开始时间】{{GetCSTtime $v.startsAt}}
【结束时间】{{GetCSTtime $v.endsAt}}
【恢复实例】{{$v.labels.instance}}
**{{$v.annotations.description}}**
{{else}}
**[Prometheus告警信息]({{$v.generatorURL}})**
【告警名称】[{{$v.labels.alertname}}]({{$var}})🔥{{if $v.labels.level}}
【告警级别】{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告🟡{{else if eq $v.labels.level "2"}}一般严重🔥{{else if eq $v.labels.level "3"}}严重🔥🔥{{else if eq $v.labels.level "4"}}灾难🔥🔥❌{{else}}{{$v.labels.level}}{{end}}{{end}}
【开始时间】{{GetCSTtime $v.startsAt}}
【告警实例】{{$v.labels.instance}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
prometheus-dd
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
## [Prometheus恢复信息]({{$v.generatorURL}})
--------------------------------------------------------
#### 【恢复名称】[{{$v.labels.alertname}}]({{$var}}) ✅{{if $v.labels.level}}
#### 【恢复级别】{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告{{else if eq $v.labels.level "2"}}一般严重{{else if eq $v.labels.level "3"}}严重{{else if eq $v.labels.level "4"}}灾难{{else}}{{$v.labels.level}}{{end}}{{end}}
#### 【当前状态】**<font color="#67C23A" size=4>已恢复</font>**
#### 【开始时间】{{GetCSTtime $v.startsAt}}
#### 【结束时间】{{GetCSTtime $v.endsAt}}
#### 【恢复实例】{{$v.labels.instance}}
--------------------------------------------------------
**{{$v.annotations.description}}**
{{else}}
## [Prometheus告警信息]({{$v.generatorURL}})
--------------------------------------------------------
#### 【告警名称】[{{$v.labels.alertname}}]({{$var}}) 🔥{{if $v.labels.level}}
#### 【告警级别】{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告🟡{{else if eq $v.labels.level "2"}}一般严重🔥{{else if eq $v.labels.level "3"}}严重🔥🔥{{else if eq $v.labels.level "4"}}灾难🔥🔥❌{{else}}{{$v.labels.level}}{{end}}{{end}}
#### 【当前状态】**<font color="#E6A23C">需要处理</font>**
#### 【开始时间】{{GetCSTtime $v.startsAt}}
#### 【告警实例】{{$v.labels.instance}}
--------------------------------------------------------
**{{$v.annotations.description}}**
{{end}}
{{ end }}
prometheus-wx
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
## [Prometheus恢复信息]({{$v.generatorURL}})
#### <font color="#02b340">【恢复名称】</font>[{{$v.labels.alertname}}]({{$var}}) ✅{{if $v.labels.level}}
#### <font color="#02b340">【恢复级别】</font>{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告{{else if eq $v.labels.level "2"}}一般严重{{else if eq $v.labels.level "3"}}严重{{else if eq $v.labels.level "4"}}灾难{{else}}{{$v.labels.level}}{{end}}{{end}}
#### <font color="#02b340">【当前状态】</font><font color="#67C23A">已恢复</font>
#### <font color="#02b340">【开始时间】</font>{{GetCSTtime $v.startsAt}}
#### <font color="#02b340">【结束时间】</font>{{GetCSTtime $v.endsAt}}
#### <font color="#02b340">【恢复实例】</font>{{$v.labels.instance}}
**{{$v.annotations.description}}**
{{else}}
## [Prometheus告警信息]({{$v.generatorURL}})
#### <font color="#FF0000">【告警名称】</font>[{{$v.labels.alertname}}]({{$var}}) 🔥{{if $v.labels.level}}
#### <font color="#FF0000">【告警级别】</font>{{if eq $v.labels.level "0"}}提示{{else if eq $v.labels.level "1"}}警告🟡{{else if eq $v.labels.level "2"}}一般严重🔥{{else if eq $v.labels.level "3"}}严重🔥🔥{{else if eq $v.labels.level "4"}}灾难🔥🔥❌{{else}}{{$v.labels.level}}{{end}}{{end}}
#### <font color="#FF0000">【当前状态】</font><font color="#E6A23C">需要处理</font>
#### <font color="#FF0000">【开始时间】</font>{{GetCSTtime $v.startsAt}}
#### <font color="#FF0000">【告警实例】</font>{{$v.labels.instance}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
SUSE Rancher Webhook消息发送到飞书模版
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
**[Rancher容器云平台恢复告警信息]({{$v.labels.server_url}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.severity}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05 UTC"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05 UTC"}}
集群ID: {{$v.labels.cluster_name}}
故障主机IP: {{$v.labels.instance}}
PromQL: {{$v.alert.expression}}
触发告警持续时间: {{$v.labels.duration}}
当前值为:**{{$v.annotations.current_value}}**
{{else}}
**[Rancher容器云平台告警信息]({{$v.labels.server_url}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.severity}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05 UTC"}}
{{if eq $v.endsAt "0001-01-01T00:00:00Z"}}
结束时间: {{ printf "告警当前仍然存在!"}}
{{else}}
结束时间: {{TimeFormat $v.endsAt "2006-01-02 15:04:05 UTC"}}
{{end}}
集群ID: {{$v.labels.cluster_name}}
故障主机IP: {{$v.labels.instance}}
PromQL: {{$v.labels.expression}}
触发告警持续时间: {{$v.labels.duration}}
当前值为:**{{$v.annotations.current_value}}**
{{end}}
{{ end }}
修改告警消息中的结束时间
- 默认为0001-01-01 00:00:00
- 修改后打印“告警当前仍然存在!”
- 告警恢复通知打印正常恢复时间
截图
@alvin6233 你可以在我的主页直接使用模版
Click me
钉钉告警模板,参考上面大佬微信告警模板修改,仅供参考(优化告警时间显示)
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
#### [Prometheus恢复信息]({{$v.generatorURL}})
##### <font color="#02b340">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
##### <font color="#02b340">告警级别</font>:{{$v.labels.severity}}
##### <font color="#02b340">开始时间</font>:{{GetCSTtime $v.startsAt}}
##### <font color="#02b340">结束时间</font>:{{GetCSTtime $v.endsAt}}
##### <font color="#02b340">实例地址</font>:{{$v.labels.instance}}
##### <font color="#02b340">主机名称</font>:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{else}}
#### [Prometheus告警信息]({{$v.generatorURL}})
##### <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
##### <font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
##### <font color="#FF0000">开始时间</font>:{{GetCSTtime $v.startsAt}}
##### <font color="#FF0000">结束时间</font>:{{GetCSTtime $v.endsAt}}
##### <font color="#FF0000">实例地址</font>:{{$v.labels.instance}}
##### <font color="#FF0000">主机名称</font>:{{$v.labels.hostname}}
**{{$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)
时间格式不对,选择使用下面这个
恢复:
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
告警:
开始时间:{{ TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
SUSE Rancher Webhook消息发送到飞书模版
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} **[Rancher容器云平台恢复告警信息]({{$v.labels.server_url}})** *[{{$v.labels.alertname}}]({{$var}})* 告警级别:{{$v.labels.severity}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05 UTC"}} 结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05 UTC"}} 集群ID: {{$v.labels.cluster_name}} 故障主机IP: {{$v.labels.instance}} PromQL: {{$v.alert.expression}} 触发告警持续时间: {{$v.labels.duration}} 当前值为:**{{$v.annotations.current_value}}** {{else}} **[Rancher容器云平台告警信息]({{$v.labels.server_url}})** *[{{$v.labels.alertname}}]({{$var}})* 告警级别:{{$v.labels.severity}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05 UTC"}} {{if eq $v.endsAt "0001-01-01T00:00:00Z"}} 结束时间: {{ printf "告警当前仍然存在!"}} {{else}} 结束时间: {{TimeFormat $v.endsAt "2006-01-02 15:04:05 UTC"}} {{end}} 集群ID: {{$v.labels.cluster_name}} 故障主机IP: {{$v.labels.instance}} PromQL: {{$v.labels.expression}} 触发告警持续时间: {{$v.labels.duration}} 当前值为:**{{$v.annotations.current_value}}** {{end}} {{ end }}修改告警消息中的结束时间
- 默认为0001-01-01 00:00:00
- 修改后打印“告警当前仍然存在!”
- 告警恢复通知打印正常恢复时间
截图
你的持续时间字段怎么来的??
【钉钉模板】
{{ $var := .externalURL}}{{ $status := .status}}{{ range $k,$v:=.alerts }} {{if eq $status "resolved"}} ## [告警恢复-通知]({{$var}}) #### 监控指标: {{$v.labels.alertname}} {{ if eq $v.labels.severity "warning" }} #### 告警级别: **<font color="#E6A23C">{{$v.labels.severity}}</font>** {{ else if eq $v.labels.severity "critical" }} #### 告警级别: **<font color="#F56C6C">{{$v.labels.severity}}</font>** {{ end }} #### 当前状态: **<font color="#67C23A" size=4>已恢复</font>** #### 故障主机: {{$v.labels.instance}} * ###### 告警阈值: {{$v.labels.threshold}} * ###### 开始时间: {{GetCSTtime $v.startsAt}} * ###### 恢复时间: {{GetCSTtime $v.endsAt}} #### 告警恢复: <font color="#67C23A">已恢复,{{$v.annotations.description}}</font> {{ else }} ## [监控告警-通知]({{$var}}) #### 监控指标: {{$v.labels.alertname}} {{ if eq $v.labels.severity "warning" }} #### 告警级别: **<font color="#E6A23C" size=4>{{$v.labels.severity}}</font>** #### 当前状态: **<font color="#E6A23C">需要处理</font>** {{ else if eq $v.labels.severity "critical" }} #### 告警级别: **<font color="#F56C6C" size=4>{{$v.labels.severity}}</font>** #### 当前状态: **<font color="#F56C6C">需要处理</font>** {{ end }} #### 故障主机: {{$v.labels.instance}} * ###### 告警阈值: {{$v.labels.threshold}} * ###### 持续时间: {{$v.labels.for_time}} * ###### 触发时间: {{GetCSTtime $v.startsAt}} {{ if eq $v.labels.severity "warning" }} #### 告警触发: <font color="#E6A23C">{{$v.annotations.description}}</font> {{ else if eq $v.labels.severity "critical" }} #### 告警触发: <font color="#F56C6C">{{$v.annotations.description}}</font> {{ end }} {{ end }} {{ end }}
【样例】
【钉钉模板】
{{ $var := .externalURL}}{{ $status := .status}}{{ range $k,$v:=.alerts }} {{if eq $status "resolved"}} ## [告警恢复-通知]({{$var}}) #### 监控指标: {{$v.labels.alertname}} {{ if eq $v.labels.severity "warning" }} #### 告警级别: **<font color="#E6A23C">{{$v.labels.severity}}</font>** {{ else if eq $v.labels.severity "critical" }} #### 告警级别: **<font color="#F56C6C">{{$v.labels.severity}}</font>** {{ end }} #### 当前状态: **<font color="#67C23A" size=4>已恢复</font>** #### 故障主机: {{$v.labels.instance}} * ###### 告警阈值: {{$v.labels.threshold}} * ###### 开始时间: {{GetCSTtime $v.startsAt}} * ###### 恢复时间: {{GetCSTtime $v.endsAt}} #### 告警恢复: <font color="#67C23A">已恢复,{{$v.annotations.description}}</font> {{ else }} ## [监控告警-通知]({{$var}}) #### 监控指标: {{$v.labels.alertname}} {{ if eq $v.labels.severity "warning" }} #### 告警级别: **<font color="#E6A23C" size=4>{{$v.labels.severity}}</font>** #### 当前状态: **<font color="#E6A23C">需要处理</font>** {{ else if eq $v.labels.severity "critical" }} #### 告警级别: **<font color="#F56C6C" size=4>{{$v.labels.severity}}</font>** #### 当前状态: **<font color="#F56C6C">需要处理</font>** {{ end }} #### 故障主机: {{$v.labels.instance}} * ###### 告警阈值: {{$v.labels.threshold}} * ###### 持续时间: {{$v.labels.for_time}} * ###### 触发时间: {{GetCSTtime $v.startsAt}} {{ if eq $v.labels.severity "warning" }} #### 告警触发: <font color="#E6A23C">{{$v.annotations.description}}</font> {{ else if eq $v.labels.severity "critical" }} #### 告警触发: <font color="#F56C6C">{{$v.annotations.description}}</font> {{ end }} {{ end }} {{ end }}
【样例】
我想问下,为什么我告警恢复后value没有改变呢,都是最初告警的那个数值。还有你告警的持续时间那个值是怎么获取来的呢
"valueString": "[ metric='zyff-网关-日志-0001-192.158.134.2' labels={datasource=tianxun, instance=zyff-网关-日志-0001-192.158.134.2, job=网关} value=66.96831536111641 ], [ metric='zyff-网关-日志-0002-192.158.134.3' labels={datasource=tianxun, instance=zyff-网关-日志-0002-192.158.134.3, job=网关} value=60.23726019772007 ], [ metric='zyff-网关-日志-0003-192.158.134.4' labels={datasource=tianxun, instance=zyff-网关-日志-0003-192.158.134.4, job=网关} value=60.335218779220604 ], [ metric='zyff-网关-日志-0004-192.158.134.5' labels={datasource=tianxun, instance=zyff-网关-日志-0004-192.158.134.5, job=网关} value=60.209148972387304 ], [ metric='zyff-网关-日志-0005-192.158.134.6' labels={datasource=tianxun, instance=zyff-网关-日志-0005-192.158.134.6, job=网关} value=61.669998479785704 ], [ metric='zyff-网关-日志-0006-192.158.134.7' labels={datasource=tianxun, instance=zyff-网关-日志-0006-192.158.134.7, job=网关} value=60.035216073651654 ]"
怎么提取valueString里面的instance后面的值呢?
{{ $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)
在飞书借鉴了你的屏蔽告警模板,但是提示function "SplitString" not defined 我尝试定义函数但仍然认不到
t.Funcs(template.FuncMap{"SplitString": func(s string, i, j int) string {return s[i:j]}})
已解决,直接升级版本就支持了。
飞书 V2 报警模板,之所以将 {{$v.status}} 放进去,是因为飞书报警可以根据报警状态实现不同的 title color
// 飞书相关的代码 var color string if strings.Count(text, "resolved") > 0 && strings.Count(text, "firing") > 0 { color = "orange" } else if strings.Count(text, "resolved") > 0 { color = "green" } else { color = "red" }{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} **[Prometheus 恢复通知]({{$v.generatorURL}})** 告警名称:{{$v.labels.alertname}} 告警状态:{{$v.status}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}} 结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 实例地址:{{$v.labels.instance}} 主机名称:{{$v.labels.hostname}} **{{$v.annotations.description}}** {{else}} **[Prometheus 报警通知]({{$v.generatorURL}})** 告警名称:{{$v.labels.alertname}} 告警状态:{{$v.status}} > {{$v.labels.severity}} 开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}} 结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 实例地址:{{$v.labels.instance}} 主机名称:{{$v.labels.hostname}} **{{$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)
在飞书借用了你的屏幕告警模板,但提示函数“SplitString”未定义我试确定义数但仍然认不到
t.Funcs(template.FuncMap{"SplitString": func(s string, i, j int) string {return s[i:j]}})
已解决,直接升级版本就支持了。
老哥,我在飞书里面用也是和你一样的错误,怎么解决的?
所以你现在解决了吗
.externalURL 怎么把这个变量内容替换成自己公网能访问的域名加 uri 呢?
比如:http://prometheus-k8s-0:9090/graph?g0.expr=up%7Bjob%3D~%
替换后:http://www.mydomain.com/graph?g0.expr=up%7Bjob%3D~%
.externalURL 怎么把这个变量内容替换成自己公网能访问的域名加 uri 呢?
比如:http://prometheus-k8s-0:9090/graph?g0.expr=up%7Bjob%3D~%
替换后:http://www.mydomain.com/graph?g0.expr=up%7Bjob%3D~%
@aptxhb 尝试修改prometheus 的hostname 试试?
请问自定义的消息模板能否通过什么方式注入到服务中,想把自定义的模板加入到自动部署的流程中
master版本支持了,刚测了一下,可以绕过认证直接整进去
curl -X POST http://url:8080/template/import -d @prometheus-alert-template.json
飞书机器人应用
{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}**Prometheus恢复信息**
告警级别:{{$v.status}}
告警类型:{{$v.labels.alertname}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}}
告警主题:{{$v.annotations.summary}}
{{else}}**Prometheus告警信息**
告警级别:{{$v.status}} --> {{$v.labels.severity}}
告警类型:**{{$v.labels.alertname}}**
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:告警当前仍然存在!
告警主题:{{$v.annotations.summary}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}
企微告警模板:
{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}} ## Prometheus-恢复消息
> 事件: **{{$v.labels.alertname}}**
> 告警级别: {{$v.labels.level}}
> 开始时间: {{GetCSTtime $v.startsAt}}
> 结束时间: {{GetCSTtime $v.endsAt}}
> 主机: {{$v.labels.instance}}
> <font color="info">**事件详情: {{$v.annotations.description}}**</font>
{{else}} ## Prometheus-告警消息
> 事件: **{{$v.labels.alertname}}**
> 告警级别: {{$v.labels.level}}
> 开始时间: {{GetCSTtime $v.startsAt}}
> 主机: {{$v.labels.instance}}
> <font color="warning">**事件详情: {{$v.annotations.description}}**</font>
{{end}}{{end}}
效果:
[prometheus自定义模版,支持恢复通知模版]
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} ## [Prometheus恢复信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) ###### 告警级别:{{$v.labels.level}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ###### 故障主机IP:{{$v.labels.instance}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{else}} ## [Prometheus告警信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) ###### 告警级别:{{$v.labels.level}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ###### 故障主机IP:{{$v.labels.instance}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{end}} {{ end }}
Alerting - Contact points 的Optional WeCom settings 需要怎么引用填写呢
graylog 的模板大家有用到吗,怎么写if else
[杭州测试环境日志告警]
{{.event_definition_description}}
{{if {{.event_definition_title}} eq "杭州公测环境fatal日志告警"}}
{{ range $k,$v:=.backlog }}
告警索引:{{$v.index}}
开始时间:{{GetCSTtime $v.timestamp}}
告警主机ip:{{$v.fields.gl2_remote_ip}}
查看链接: [点击链接](http://1.1.1..1/ui/?dump={{$data := $v.message | fromJson}}{{if $data.params.filename}}{{$data.params.filename}}{{end}})
{{$v.message}}
{{end}}
{{else}}
{{ range $k,$v:=.backlog }}
告警索引:{{$v.index}}
开始时间:{{GetCSTtime $v.timestamp}}
告警主机ip:{{$v.fields.gl2_remote_ip}}
{{$v.message}}
{{end}}
{{ end }}
飞书告警模板:
{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}<font color="green">**告警恢复信息**</font>
事件: **{{$v.labels.alertname}}**
告警类型:{{$v.status}}
告警级别: {{$v.labels.level}}
开始时间: {{GetCSTtime $v.startsAt}}
结束时间: {{GetCSTtime $v.endsAt}}
主机: {{$v.labels.instance}}
<font color="green">**事件详情: {{$v.annotations.description}}**</font>
{{else}}**告警信息**
事件: **{{$v.labels.alertname}}**
告警类型:{{$v.status}}
告警级别: {{$v.labels.level}}
开始时间: {{GetCSTtime $v.startsAt}}
主机: {{$v.labels.instance}}
<font color="red">**事件详情: {{$v.annotations.description}}**</font>
{{end}}
{{ end }}
效果图:
![image](https://private-user-images.githubusercontent.com/104751498/262537912-287d175f-7b16-42ca-838c-32ff8162c20e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTY5NzM0OTcsIm5iZiI6MTcxNjk3MzE5NywicGF0aCI6Ii8xMDQ3NTE0OTgvMjYyNTM3OTEyLTI4N2QxNzVmLTdiMTYtNDJjYS04MzhjLTMyZmY4MTYyYzIwZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUyOVQwODU5NTdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wNjZmYmNkYWIzMzBlOTU5NjI1ZjU2MTk2MTg5MTBjZDQ3NWRkNDE4ZDljYWE3MWJhZjJmNjJjNjA1ZWJiYmEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.77Af3MBR1BYa_7BjLNBzuUqF3Q1vFfFiXgsbLmCnR2o)
![image](https://private-user-images.githubusercontent.com/104751498/262537966-ad04bf99-ed73-4b00-8b97-4b215fd7bb04.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTY5NzM0OTcsIm5iZiI6MTcxNjk3MzE5NywicGF0aCI6Ii8xMDQ3NTE0OTgvMjYyNTM3OTY2LWFkMDRiZjk5LWVkNzMtNGIwMC04Yjk3LTRiMjE1ZmQ3YmIwNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUyOVQwODU5NTdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mYWNmNTgwYjA5NTRhOWY4ZjNiN2FlYmIyOGVmYjU2Y2ZkMTBjNWMzMDZkYTJkMzlhZTg5ZTE2MWFlNmUyYzg5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.2laCljsInw_X-IHhnHSU_D5ZWmrzT9I0LPqU9T5xCgY)
{{ $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)
在飞书借鉴了你的屏蔽告警模板,但是提示function "SplitString" not defined 我尝试定义函数但仍然认不到
t.Funcs(template.FuncMap{"SplitString": func(s string, i, j int) string {return s[i:j]}})
已解决,直接升级版本就支持了。
请问怎么只在告警里面有这个点我屏蔽告警按钮,恢复通知里面就不要带上
`{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
✅✅告警恢复
🚀🚀告警名称:{{$v.labels.alertname}}
🏷️🏷️告警级别: {{$v.labels.severity}}
🙋♂️🙋♂️告警团队:{{$v.labels.Team}}
🎢🎢告警集群:{{$v.labels.Cluster}}
♨️♨️告警租户:{{$v.annotations.Tanent}}
♨️♨️告警实例:{{$v.labels.instance}}
🙋♂️🙋♂️告警维护:{{$v.labels.maintainer}}
🕓🕓开始时间:{{GetCSTtime $v.startsAt}}
🕓🕓结束时间:{{GetCSTtime $v.endsAt}}
📝📝{{$v.annotations.Description}}
{{else}}
🔥🔥告警通知
🚀🚀告警名称:{{$v.labels.alertname}}
🏷️🏷️告警级别: {{$v.labels.severity}}
🙋♂️🙋♂️告警团队:{{$v.labels.Team}}
🎢🎢告警集群:{{$v.labels.Cluster}}
♨️♨️告警租户:{{$v.annotations.Tanent}}
♨️♨️告警实例:{{$v.labels.instance}}
🙋♂️🙋♂️告警维护:{{$v.labels.maintainer}}
🕓🕓开始时间:{{GetCSTtime $v.startsAt}}
📝📝告警内容:{{$v.annotations.Description}}
{{end}}
{{ end }}`
企微告警模板:
{{ $var := .externalURL}}{{ range $k,$v:=.alerts -}}
{{ if eq $v.status "resolved" -}}
## [Prometheus恢复信息]($v.generatorURL)💨
##### 🌟<font color="#02b340">【恢复名称】✅</font>[{{$v.labels.alertname}}]({{$var}})✅{{ if $v.labels.severity }}
##### 🌟<font color="#02b340">【恢复级别】</font>
{{- if eq $v.labels.severity "info" }}info
{{- else if eq $v.labels.severity "warning" }}warning
{{- else if eq $v.labels.severity "critical" }}critical
{{- else if eq $v.labels.severity "error" }}error
{{ else }}{{ $v.labels.severity }}
{{ end -}}
{{ end }}
##### 🌟<font color="#02b340">【当前状态】</font><font color="#67C23A">已恢复</font>
##### 🌟<font color="#02b340">【开始时间】</font>{{GetCSTtime $v.startsAt}}
##### 🌟<font color="#02b340">【结束时间】</font>{{GetCSTtime $v.endsAt}}
##### 🌟<font color="#02b340">【恢复区域】</font>{{$v.labels.number}} in {{$v.labels.channel}}
**<font color="#02b340">{{$v.annotations.description}}</font>**
{{ else -}}
## [Prometheus告警信息]($v.generatorURL)💨
##### 🌟<font color="#FF0000">【告警名称】🔔</font>[{{$v.labels.alertname}}]({{$var}})🔔{{ if $v.labels.severity }}
##### 🌟<font color="#FF0000">【告警级别】</font>
{{- if eq $v.labels.severity "info"}}info
{{- else if eq $v.labels.severity "warning"}}warning 🔥
{{- else if eq $v.labels.severity "critical"}}critical 💔💔
{{- else if eq $v.labels.severity "error"}}error 🔥🔥❌
{{ else }}{{ $v.labels.severity }}
{{ end -}}
{{ end }}
##### 🌟<font color="#FF0000">【当前状态】</font><font color="#E6A23C">需要处理</font>
##### 🌟<font color="#FF0000">【开始时间】</font>{{GetCSTtime $v.startsAt}}
##### 🌟<font color="#FF0000">【故障区域】</font>{{$v.labels.number}} in {{$v.labels.channel}}
**<font color="#E6A23C">{{$v.annotations.description}}</font>**💨💨
## ✨[点我去屏蔽告警]({{$var}})✨
{{ end -}}
{{ end }}
看了那么多人的模板,都没有把K8S的告警当回事,重要的namesapce,pod这些都不告警出来,真是无语;
俺也分享一下俺的飞书告警模板吧
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
测试环境Prometheus 恢复通知
🟡【告警名称】{{$v.labels.alertname}}
🚨【告警级别】{{ $v.labels.severity}}
✅【告警状态】{{$v.status}}
🧭【开始时间】{{GetCSTtime $v.startsAt}}
🧭【结束时间】{{GetCSTtime $v.endsAt}}
🏷️【命名空间】 {{$v.labels.namespace}}
📡 【实例名称】 {{$v.labels.host}}{{$v.labels.pod}}{{$v.labels.job}}{{$v.labels.deployment}}{{$v.labels.statefulset}}
📝【告警详情】 {{ $v.annotations.message }}{{ $v.annotations.description}};{{$v.annotations.summary}}
{{else}}
测试环境Prometheus 告警通知
🟡【告警名称】{{$v.labels.alertname}}
🚨【告警级别】{{ $v.labels.severity}}
🔥【告警状态】{{$v.status}}
🧭【开始时间】{{GetCSTtime $v.startsAt}}
🏷️【命名空间】 {{$v.labels.namespace}}
📡 【实例名称】 {{$v.labels.host}}{{$v.labels.pod}}{{$v.labels.job}}{{$v.labels.deployment}}{{$v.labels.statefulset}}
📝【告警详情】 {{ $v.annotations.message }}{{ $v.annotations.description}};{{$v.annotations.summary}}
{{end}}
{{ end }}
这是来自QQ邮箱的假期自动回复邮件。 您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
一个大嘴巴子
How to write a template for Microsoft Teams?
显示所有prometheus告警label的自定义模版:
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} ## [Prometheus恢复信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) {{ range $key,$value:=$v.labels }} ###### {{$key}}:{{$value}} {{end}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{else}} ## [Prometheus告警信息]({{$v.generatorURL}}) #### [{{$v.labels.alertname}}]({{$var}}) {{ range $key,$value:=$v.labels }} ###### {{$key}}:{{$value}} {{end}} ###### 开始时间:{{$v.startsAt}} ###### 结束时间:{{$v.endsAt}} ##### {{$v.annotations.description}} ![Prometheus](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png) {{end}} {{ end }}
效果如下图:
微信机器人自定义告警模板:
- 告警红色
- 恢复绿色
- 告警级别我用的
severity
,可以修改为level
。请自己定义labels- 使用
hostname
,请自己定义labels- 我将故障主机IP改为实例地址,因为有些探针运行在本地,但告警对象不是它,所以修改为实例地址
description
是自定义的告警详细信息{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} #### [Prometheus恢复信息]({{$v.generatorURL}}) > <font color="info">告警名称</font>:[{{$v.labels.alertname}}]({{$var}}) > <font color="info">告警级别</font>:{{$v.labels.severity}} > <font color="info">开始时间</font>:{{$v.startsAt}} > <font color="info">结束时间</font>:{{$v.endsAt}} > <font color="info">实例地址</font>:{{$v.labels.instance}} > <font color="info">主机名称</font>:{{$v.labels.hostname}} **{{$v.annotations.description}}** {{else}} #### [Prometheus告警信息]({{$v.generatorURL}}) > <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}}) > <font color="#FF0000">告警级别</font>:{{$v.labels.severity}} > <font color="#FF0000">开始时间</font>:{{$v.startsAt}} > <font color="#FF0000">结束时间</font>:{{$v.endsAt}} > <font color="#FF0000">实例地址</font>:{{$v.labels.instance}} > <font color="#FF0000">主机名称</font>:{{$v.labels.hostname}} **{{$v.annotations.description}}** {{end}} {{ end }}
效果图:
备注:
此模板稍微修改也可以适用于钉钉。
为什么我的模板总是无法获取到 {{ $v.labels.severity}} 告警级别这个值
钉钉告警模板:
{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}
#### Prometheus-恢复消息
- 事件: **{{$v.labels.alertname}}**
- 告警级别: {{$v.labels.level}}
- 开始时间: {{GetCSTtime $v.startsAt}}
- 结束时间: {{GetCSTtime $v.endsAt}}
- 主机: {{$v.labels.instance}}
- <font color="info">**事件详情**: {{$v.annotations.description}}</font>
{{else}}
#### Prometheus-告警消息
- 事件: **{{$v.labels.alertname}}**
- 告警级别: {{$v.labels.level}}
- 开始时间: {{GetCSTtime $v.startsAt}}
- 主机: {{$v.labels.instance}}
- <font color="warning">**事件详情: {{$v.annotations.description}}**</font>
{{end}}{{end}}
效果示例:
有没有办法计算持续时间?
有没有办法计算持续时间?
这是来自QQ邮箱的假期自动回复邮件。 您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
麻烦把你这个自动回复去掉一下
有没有详细配置教程啊
看了那么多人的模板,都没有把K8S的告警当回事,重要的namesapce,pod这些都不告警出来,真是无语; 俺也分享一下俺的飞书告警模板吧
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }} {{if eq $v.status "resolved"}} 测试环境Prometheus 恢复通知 🟡【告警名称】{{$v.labels.alertname}} 🚨【告警级别】{{ $v.labels.severity}} ✅【告警状态】{{$v.status}} 🧭【开始时间】{{GetCSTtime $v.startsAt}} 🧭【结束时间】{{GetCSTtime $v.endsAt}} 🏷️【命名空间】 {{$v.labels.namespace}} 📡 【实例名称】 {{$v.labels.host}}{{$v.labels.pod}}{{$v.labels.job}}{{$v.labels.deployment}}{{$v.labels.statefulset}} 📝【告警详情】 {{ $v.annotations.message }}{{ $v.annotations.description}};{{$v.annotations.summary}} {{else}} 测试环境Prometheus 告警通知 🟡【告警名称】{{$v.labels.alertname}} 🚨【告警级别】{{ $v.labels.severity}} 🔥【告警状态】{{$v.status}} 🧭【开始时间】{{GetCSTtime $v.startsAt}} 🏷️【命名空间】 {{$v.labels.namespace}} 📡 【实例名称】 {{$v.labels.host}}{{$v.labels.pod}}{{$v.labels.job}}{{$v.labels.deployment}}{{$v.labels.statefulset}} 📝【告警详情】 {{ $v.annotations.message }}{{ $v.annotations.description}};{{$v.annotations.summary}} {{end}} {{ end }}
接口参数异常