wechat告警消息格式化
alertmanager发送到wechat的消息原始格式不易读,使用templates文件也无法实现wechat消息的格式化。 请问如何实现wechat text消息的内容和格式定制?谢谢!
- 修改
alertmanger.yml,指定覆盖的模版文件地址,例如:
templates:
- 'demo.tmpl'
- 在 demo.teml 里面添加自定义的内容,例如
{{ define "wechat.default.message" }}
// 添加你自己想要的内容
{{- end }}
http://www.songjiayang.com/posts/alertmanager-mo-ban-zhong-shi-jian-format 能否分享下wechat.tmpl模板
@D-PENG 告警模版可以参考
{{ define "wechat.default.message" }}
{{ range .Alerts }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{ end }}
{{ end }}
@D-PENG 如果有定制化的开发需求,需要接触下 go 语言,如果只是一些自定义配置,例如告警消息,可以参考下 go 的 template 模版引擎
请问,触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }},中的时间是写死的,如果要取实时的值,需要取哪个lable的值?
您好,用这个模板显示的时间都是UTC时间,能转成本地时间吗
贴下今天刚亲测OK的。。。。
{{ define "wechat.default.message" }} {{ if gt (len .Alerts.Firing) 0 -}} Alerts Firing: {{ range .Alerts }} 告警级别:{{ .Labels.severity }} 告警类型:{{ .Labels.alertname }} 故障主机: {{ .Labels.instance }} 告警主题: {{ .Annotations.summary }} 告警详情: {{ .Annotations.description }} 触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} {{- end }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ range .Alerts }} 告警级别:{{ .Labels.severity }} 告警类型:{{ .Labels.alertname }} 故障主机: {{ .Labels.instance }} 告警主题: {{ .Annotations.summary }} 触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} 恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }} {{- end }} {{- end }} 告警链接: {{ template "__alertmanagerURL" . }} {{- end }}
StartsAt.Format 可以调用time 包 Local 方法转换成 我们想要的时间:比如 StartsAt.Local 即可
你这个警告模板不会,恢复的信息和警告的信息不能分开。
你这个警告模板不会,恢复的信息和警告的信息不能分开。
测试一下便分晓
@ningbingjian1 可以把时间+8小时转化为北京时间,然后打印输出
@ningbingjian1 可以把时间+8小时转化为北京时间,然后打印输出
怎样在模板里面加+8 小时呢。 模板是这样的 :故障时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
@shiyiwenv 比较笨一点就是直接把时间加8小时,例如:
{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
@shiyiwenv 比较笨一点就是直接把时间加8小时,例如:
{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
按照上面的方式试了一下,go模板语法会报错的。 :( unexpected "(" in operand"
@shiyiwenv 比较笨一点就是直接把时间加8小时,例如:
{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}按照上面的方式试了一下,go模板语法会报错的。 :( unexpected "(" in operand"
你用的 Alertmanager 版本是多少,我直接测试的 golang 代码是可以使用的,比如 https://play.golang.org/p/kORApsIIMzj
@shiyiwenv 比较笨一点就是直接把时间加8小时,例如:
{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}按照上面的方式试了一下,go模板语法会报错的。 :( unexpected "(" in operand"
你用的 Alertmanager 版本是多少,我直接测试的 golang 代码是可以使用的,比如 https://play.golang.org/p/kORApsIIMzj
我的alertmanager 是 0.14.0 . 可能gotemplate 不能这样写吗? 我不太熟悉gotemplate 。
@imluyuan 模板可以用,但是很容易多条告警是通过一条消息发送出来的。
告警恢复:
告警主题: 在 kube-etcd 集群中出现节点故障
告警类型: TargetDown
命名空间: kube-system
故障主机: 192.168.112.216:2379
告警级别: warning
触发时间: 2019-04-12 07:17:02
恢复时间: 2019-04-12 07:19:02
告警主题: 在 kube-etcd 集群中出现节点故障
告警类型: TargetDown
命名空间: kube-system
故障主机: 192.168.112.217:2379
告警级别: warning
触发时间: 2019-04-12 07:22:02
恢复时间: 2019-04-12 07:35:02
告警链接:
http://dev.alertmanager.com/#/alerts?receiver=wechat
这种情况该怎么去解决呢?
你这个警告模板不会,恢复的信息和警告的信息不能分开。
测试一下便分晓
测试发现,如果同一类型的多个告警源, 既有firing也有resolved时,也会一同发送。参考官方模板,写成如下格式感觉更好:
{{- define "_alert_list" -}}
{{- range .Alerts.Firing -}}
--------
告警类型:{{ .Labels.alertname }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end -}}
{{- end -}}
{{- define "_resolve_list" -}}
{{- range .Alerts.Resolved -}}
************
告警类型:{{ .Labels.alertname }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end -}}
{{- end -}}
{{- define "wechat.dcos.message" -}}
{{- if and (gt (len .Alerts.Firing) 0) (gt (len .Alerts.Resolved) 0) -}}
Alerts Firing:{{.Alerts.Firing | len}}
Alerts Resolved:{{len .Alerts.Resolved}}
{{ template "_alert_list" . }}
{{ template "_resolve_list" . }}
{{- else -}}
{{- if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:{{.Alerts.Firing | len}}
{{ template "_alert_list" . }}
{{- end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:{{len .Alerts.Resolved}}
{{ template "_resolve_list" . }}
{{- end -}}
{{- end -}}
{{- end -}}
@fat8701 您好 我用的钉钉要怎么改呢
@fat8701 您好 我用的钉钉要怎么改呢
没用钉钉 https://www.jianshu.com/p/f0fae97d9349 供参考 网上相关帖子应该不少
@fat8701 也就是您上面给的模块 就只是适合WeChat的
@fat8701 也就是您上面给的模块 就只是适合WeChat的
仅用wechat测试过,邮件应该也ok,钉钉比较特殊吧,需要进行消息格式转换。自己测测吧。
@fat8701 请问,在alertmanager的receivers段如何调用该模板?
@fat8701 请问,在alertmanager的receivers段如何调用该模板?
见2楼回复
@fat8701 如果有多个模板,如何为接收器指定不同的模板名字?
@fat8701 如果有多个模板,如何为接收器指定不同的模板名字?
API request data as defined by the WeChat API. [ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ] 和模板里定义的名字对应
mark
@fat8701
hello 你的这个模板 Firing和Resolved 也会在同一封邮件发送啊
@fat8701 hello 你的这个模板 Firing和Resolved 也会在同一封邮件发送啊
这个是微信告警,不是邮件;同一类告警(Firing or Resolved)会集中在一条信息中(先列出所有Firing再列出所有Resolved),个人觉得同一类告警分开2条发没必要,当然你也可以按需修改。
@fat8701 这样啊 微信和邮件不通用啊。您这个只有微信的模板吗? 对应的邮件模板有没有? 还有一个问题就是 怎么样才能做到 一条告警一封邮件?