本章主要对如何使用开源组件和Alertmanager组件集成警报通知。Kubernetes的警报集成后续会直接在配置文件讲解,原理大同小异,此处仅对相关警报通知做集成。
警报通知接收器
前面一直是在Web UI 查看警报信息,现在开始使用接收器与Alertmanager集成,发送警报信息到 Email
、企业微信
、钉钉机器人
,对于警报要求比较高的同学,可以根据下面提到的开源组件 【PrometheusAlert全家桶】
配置飞书、短信、语音电话等警报。
前面已经讲过,Alertmanager默认支持配置Email,也是最普通的方式,在Alertmanager组件中内置了SMTP协议。直接可以把前面的Alertmanager.yml中的SMTP部分截取出来,然后进行调整与配置
global:
resolve_timeout: 5m
# smtp配置
smtp_from: "1234567890@qq.com" # 发送邮件主题
smtp_smarthost: 'smtp.qq.com:465' # 邮箱服务器的SMTP主机配置
smtp_auth_username: "1234567890@qq.com" # 登录用户名
smtp_auth_password: "auth_pass" # 此处的auth password是邮箱的第三方登录授权密码,而非用户密码,尽量用QQ来测试。
smtp_require_tls: false # 有些邮箱需要开启此配置,这里使用的是163邮箱,仅做测试,不需要开启此功能。
route:
receiver: ops
group_wait: 30s # 在组内等待所配置的时间,如果同组内,30秒内出现相同报警,在一个组内出现。
group_interval: 5m # 如果组内内容不变化,合并为一条警报信息,5m后发送。
repeat_interval: 24h # 发送报警间隔,如果指定时间内没有修复,则重新发送报警。
group_by: [alertname] # 报警分组
routes:
- match:
team: operations
group_by: [env,dc]
receiver: 'ops'
- receiver: ops # 路由和标签,根据match来指定发送目标,如果 rule的lable 包含 alertname, 使用 ops 来发送
group_wait: 10s
match:
team: operations
# 接收器指定发送人以及发送渠道
receivers:
# ops分组的定义
- name: ops
email_configs:
- to: '9935226@qq.com,xxxxx@qq.com' # 如果想发送多个人就以 ','做分割,写多个邮件人即可。
send_resolved: true
headers:
from: "警报中心"
subject: "[operations] 报警邮件"
to: "小煜狼皇"
配置完成后,直接重启Alertmanager组件,使配置生效,然后使用前面内存阈值触发一次警报来看下发送结果。
收到的警报信息:
当警报接触以后收到的恢复信息。
企业微信
首先你要具有企业微信管理员的权限,如果没有可以自己注册一个,进行测试,我这里有自行注册的企业微信
第一步登录进入以后,在应用管理中新建应用。
第二步,创建应用,信息填写如下,上传应用logo随意。
创建成功以后如下图。
这时候需要把 AgentId
和 Secret
记录下来,对于你的这种Secret信息,最好管理好,我的用过就会删除,所以不用担心安全隐患。
ID | key |
---|---|
AgentId |
1000004 |
Secret |
F-fzpgsabmfiFt7_4QRQwWEl8eyx7evO12sRYe_Q5vA |
第三步,现在我们来用新建的企业微信应用在Alertmanager配置,可以配置全局,也可以对单独需要发送的接收器,因为警报需要分级,所以需要单独处理,在这里使用的的单独的配置,需要知道 企业ID ,以及 部门ID 。
企业ID 通过
部门ID 通过通讯录获取
# 企业微信配置
wechat_configs:
- corp_id: 'wwxxxxx' # 企业ID是唯一标识
api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信api接口,统一定义
send_resolved: true # 设置发送警报恢复信息
to_party: '2' # 部门id,比如我的叫警报组,因此显示的是2,如果你DB组,就可能会是3,WEB组就是4,依次类推,另外需要接收警报的相关人员必须在这个部门里。
agent_id: '1000004' # 新建应用的agent_id
api_secret: 'F-fzpgsabmfiFt7_4QRQwWEl8eyx7evO12sRYe_Q5vA' # 新建应用的Secret
这时候我们重启Alertmanager,然后使用之前的方式来触发模拟警报,看看发送是不是已经没有问题了,这时我们的企业微信中、Email都可以收到警报了,这里的警报已经被我用模块处理过了。可读性会更高。
cat wechat.tmpl
## wechat模板
{
{
define "wechat.default.message" }}
{
{
if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
{
{
range .Alerts }}
警报级别:{
{
.Labels.status }}
警报类型:{
{
.Labels.alertname }}
故障主机: {
{
.Labels.instance }}
警报主题: