飞书,字节跳动旗下一站式企业协作平台,将即时沟通、智能日历、音视频会议、OKR、云文档、云盘和工作台深度整合,通过开放兼容的平台,集成第三方工具于工作台,让成员在一处即可实现高效的沟通和流畅的协作,全方位提升企业效率,为企业提供安全保障。
告警模板详解
默认情况下Alertmanager
使用了系统自带的默认通知模板,模板源码可以从Github获得。Alertmanager的通知模板基于Go的模板系统。Alertmanager也支持用户定义和使用自己的模板,一般来说有两种方式可以选择。
第一种,基于模板字符串
用户可以直接在Alertmanager的配置文件中使用模板字符串,例如:
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'
第二种方式,自定义可复用的模板文件
例如,可以创建自定义模板文件custom-template.tmpl,如下所示:
{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}
通过在Alertmanager的全局设置中定义templates配置来指定自定义模板的访问路径:
# 从中读取自定义通知模板定义的文件。
# The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'.
templates:
[ - <filepath> ... ]
设置了自定义模板的访问路径后,用户则可以直接在配置中使用该模板:
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: '{{ template "slack.myorg.text" . }}'
templates:
- '/etc/alertmanager/templates/myorg.tmpl'
1. 使用
别忘了在群组里面创建机器人呦~
▷ 若选择应用到所有告警,则发送到 Cloud Alert 的所有告警均通过该协作策略通知给所有人;
▷ 若不选择,则可以通过在 分派策略 中自定义配置哪些告警通过该协作策略通知。
docker run -d --name prom-alert-feishu -p 9094:8080 --restart=always \
-e FEISHU_TOKEN=xxxx \
javafamily/prometheus-webhook-feishu:2.3.2-SNAPSHOT
其中 FEISHU_TOKEN
环境变量为可选参数, 为飞书 webhook 最后一部分,即 https://open.feishu.cn/open-apis/bot/v2/hook/${FEISHU_TOKEN}
☑ 如果只对一个飞书群通知,可以添加该环境变量即可;
☑ 如果需要对多个飞书群通知, 需要在 Prometheus 报警 rule 的 annotations中通过指定 token
参数为不同飞书群通知;
2. API
通知的内容通过 Prometheus 的报警规则配置 annotations/template
指定,template 支持 ${xxx} 占位, XXX 取自 annotations/xxx 配置。也可以通过 annotations/content 直接指定,不做任何处理直接展示。《需注意飞书通知如果是关键字通知的话,通知内容中需要包含关键字!》
文本通知
${basePath}/alert/text
文本通知只需要指定 template 或者 content定义模板内容即可
POST 通知
${basePath}/alert/post
飞书的 POST 通知可以指定标题(titleTemplate/title), 通知内容(template/content), 按钮文本(btn), 按钮链接(link)
Card 通知
${basePath}/alert/card
飞书的 Card 通知可以指定标题(titleTemplate/title), 通知内容(template/content), 按钮文本(btn), 按钮链接(link)
3. 配置报警 Rule
相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)文章来源:https://www.toymoban.com/news/detail-518395.html
groups:
# 组名。报警规则组名称
- name: 内存预警
rules:
- alert: 内存使用率预警
# expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 98
# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
for: 1m # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
labels:
# severity: 指定告警级别。有三种等级,分别为 warning, critical 和 emergency 。严重等级依次递增。
severity: critical
# annotations: 附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
annotations:
title: "内存使用率预警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
value: "{{ $value }}"
btn: "点击查看详情 :嘻嘻:"
link: "http://127.0.0.1/grafana/d/aka/duo-job-ji-cheng-fu-wu-qi-jian-kong"
# 通过 template 指定通知内容模板
template: "**${serviceName}**(${instance}) 内存使用率已经超过阈值 **98%**, 请及时处理!\n当前值: ${value}%"
# 【可选】通过 token 指定通知到不同飞书群
token: "{{ $labels.feishuToken }}"
- name: 磁盘预警
rules:
- alert: 磁盘使用率预警
expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 90
for: 1m
labels:
severity: critical
annotations:
title: "磁盘使用率预警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
mountpoint: "{{ $labels.mountpoint }}"
value: "{{ $value }}"
btn: "点击查看详情 :玫瑰:"
link: "http://127.0.0.1/grafana/d/aka/duo-job-ji-cheng-fu-wu-qi-jian-kong"
template: "**${serviceName}**(${instance}) 服务器磁盘设备使用率超过 **90%**, 请及时处理!\n挂载点: ${mountpoint}\n当前值: ${value}%!"
token: "{{ $labels.feishuToken }}"
- name: 实例存活报警
rules:
- alert: 实例存活报警
expr: up == 0
for: 30s
labels:
severity: emergency
annotations:
title: "节点宕机报警"
serviceName: "{{ $labels.serviceName }}"
instance: "{{ $labels.instance }}"
btn: "点击查看详情 :玫瑰:"
link: "http://127.0.0.1:9090/targets"
template: "节点 **${serviceName}**(${instance}) 断联, 请及时处理!"
token: "{{ $labels.feishuToken }}"
There is no won’t do, only don’t want to do.文章来源地址https://www.toymoban.com/news/detail-518395.html
到了这里,关于基于飞书WebHook机器人的Alert Manager报警实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!