网站首页 > 精选文章 / 正文
过去很长一段时间,一直将Grafana内置告警作为告警的主力,最近有个工作任务:将企业微信作为告警通知媒介。调研后发现Grafana自身不支持直接接入企业微信告警通知,虽然有一些方法可以解决这个问题,如使用webhook或依赖第三方插件重新编译Grafana来使其支持企业微信告警通道,但总觉不太灵活方便,所以就对Alertmanager做了测试,Alertmanager原生支持企业微信作为告警通道。
安装配置Alertmanager
安装比较简单,参考官网(https://prometheus.io/docs/alerting/latest/configuration/),直接下载Alertmanager的二进制文件,后面带上配置文件选项就可以成功启动,
./alertmanager --config.file=alertmanager.yml
这里核心是Alertmanager配置文件,下面是一个示例:
global:
#旧的告警5分钟没有更新,则认为告警解决
resolve_timeout: 5m
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_corp_id: 'API_CORP_ID'
#告警消息模板文件
templates:
- '/etc/alertmanager/*.tmpl'
#告警通道根路由,没有显示指定通道的告警,将发到该告警通道
route:
#默认的告警通道
receiver: defaultTunnel
#新的告警组被创建后,需要等待1分钟,这段时间内进入通道的告警将被合并发送
group_wait: 1m
#控制告警组的发送频率,一条告警消息发送后,等待3分钟,发送第二组告警
group_interval: 3m
#如果一条告警已经发送成功,后续相同的告警间隔6分钟发送
repeat_interval: 6m
#以“alertname”label为维度划分告警组
group_by: [alertname]
routes:
#匹配告警
- matchers:
- developer="dev1"
#指定告警通道
receiver: dev1Tunnel
- matchers:
- developer="dev2"
receiver: dev2Tunnel
receivers:
- name: defaultTunnel
wechat_configs:
- to_tag: 1
#告警恢复,发送消息
send_resolved: true
message: '{{ template "wechat.message" . }}'
agent_id: 1000001
message_type: markdown
api_secret: API_SECRET
- name: dev1Tunnel
wechat_configs:
- to_tag: 2
send_resolved: true
message: '{{ template "wechat.message" . }}'
agent_id: 1000002
message_type: markdown
api_secret: API_SECRET
配置文件中有五个键:‘wechat_api_url’、‘wechat_api_corp_id’、‘to_tag’、‘agent_id’、‘api_secret’,通过企业微信后台可以得到,具体配置,可以查询官方网站。
上面的配置文件具有按告警内容区别接受者的能力,我们通过“developer”这个label来区分,这个label可以人为在Prometheus配置文件中添加,后面介绍。
模板文件wechat.tmpl:
{{ define "wechat.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
# 报警项: {{ $alert.Labels.alertname }}
{{- end }}
> `===告警详情===`
> 告警级别: {{ $alert.Labels.severity }}
> 告警详情: <font color="comment">{{ index $alert.Annotations "description" }}{{ $alert.Annotations.message }}</font>
> 故障时间: <font color="warning">{{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</font>
> 故障实例: <font color="info">{{ $alert.Labels.instance }}</font>
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
# 恢复项: {{ $alert.Labels.alertname }}
{{- end }}
> `===恢复详情===`
> 告警级别: {{ $alert.Labels.severity }}
> 告警详情: <font color="comment">{{ index $alert.Annotations "description" }}{{ $alert.Annotations.message }}</font>
> 故障时间: <font color="warning">{{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</font>
> 恢复时间: <font color="warning">{{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</font>
> 故障实例: <font color="info">{{ $alert.Labels.instance }}</font>
{{- end }}
{{- end }}
{{- end }}
其中语句“<font color="warning">{{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</font>”将UTC时间转换成北京时间。
Prometheus配置
Prometheus和Alertmanager是一对黄金搭档,上面的工作完成后,需要修改Prometheus的配置文件,有两个部分:配置Prometheus告警的发送目的地,定义告警规则。
.......
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.2:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- /etc/prometheus/alerts.rules
......
告警规则文件alerts.rules,因为真实环境使用blackbox监控Web API的访问情况,这里针对“probe_sucess”指标配置一个告警规则:
groups:
#告警名称,alertmanager中使用这个键作为分组依据
- name: Web监控
rules:
- alert: Web API不能访问
expr: probe_success == 0
#告警事件需要持续1分钟,才能触发告警
for: 1m
#自定义label
labels:
severity: critical
developer: dev1
#告警解释信息
annotations:
summary: "{{$labels.instance}}:链接不能访问"
description: "{{$labels.instance}}:链接超过1分钟无法访问"
......
自定义标签:“developer: dev1”,作为alertmanager路由告警信息的依据。这样就可以根据告警类型来指定接收者。
总结
使用Prometheus和Alertmanager可以搭建满足大部分场景的监控告警栈,而且可以实现根据告警内容指定告警接收者。这里告警接收者需要在企业微信告警后台提前配置好,根据部门或者业务线配置分组,可以选择组ID或标签ID来指定告警接收者。
Tags:alertmanager配置详解
猜你喜欢
- 2024-11-30 Prometheus+Node_exporter+Grafana+Alertmanager 监控部署(上)
- 2024-11-30 Prometheus监控利器介绍
- 2024-11-30 基于Prometheus的企业监控报警平台
- 2024-11-30 基于 Prometheus 的监控神器,简单灵活
- 2024-11-30 超干货!开源监控系统 Prometheus 最佳实践
- 2024-11-30 Prometheus和AlertManager的告警机制
- 2024-11-30 Prometheus监控系统
- 2024-11-30 想吃透监控系统,就这一篇够不够?
- 2024-11-30 微服务平台建设方案
- 2024-11-30 掌握Web应用的监控与告警