禁止任何形式的转载,谢谢!
prometheus + alertmanager + 企业微信 报警
需求
其实本来是想要grafana实现企业微信报警的。
但是我下载的grafana7.0.0 里面没有wechat的type,网上有自己编译的,奈何我不会go语言。
alertmanager可以直接实现wechat报警
1.安装
1.1 Prometheus
- 官网下载
- 解压直接可用
1.2 Alertmanager
- 官网下载
- 解压直接可用
1.3 企业微信
- 官网注册
- 创建应用
2. 环境配置
官网教程
注意是yml结构的,严格控制缩进。
2.1 Prometheus
- prometheus.yml
去除# - localhost:9093
前的#
去除# - "first_rules.yml"
前的# 也可以改个名字
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # alertmanager的地址:端口号,默认端口号9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "testrules.yml" # 规则yml的地址
- 创建testrules.yml
官网教程
注意要utf-8 不然无法启动
groups:
- name: test_alert
rules:
- alert: alert_name # 告警名称
expr: up == 0 # 告警的触发条件,参考Prometheus高级查询来设定
for: 5s # 满足告警条件持续时间多久后,才会发送告警
annotations: # 解析项,详细解释告警信息
summary: "一条test报警" # 告警的内容
2.2 Alertmanager
- alertmanager.yml
global:
resolve_timeout: 5m # 在没有报警的情况下声明为已解决的时间
# 配置邮件发送信息
smtp_smarthost: 'smtp.xxx.cn:465' # 发送邮件的smtp地址端口号
smtp_from: '[email protected]' # 发送邮件的邮箱地址
smtp_auth_username: '[email protected]' # 发送邮件的邮箱用户名
smtp_auth_password: 'password' # 发送邮件的邮箱密码
smtp_require_tls: false
#报警模板
templates:
- 'wechat.tmpl' # 模板地址
#报警路由,树结构
route:
group_by: ['alertname'] # 分组依据
group_wait: 10s # 分组创建后的初始化等待发送时长
group_interval: 10s # 发送之前的等待时长
repeat_interval: 1m # 重复报警的间隔时长
receiver: 'wechat' # 优先接收组的名称
routes: # route的子节点
- receiver: mail
match_re:
serverity: mail #匹配到serverity时mail的使用邮件报警,这里的serverity是rules文件中的labels指定的
#报警接收,树结构
receivers:
- name: 'mail' # 子节点 - 邮件
email_configs:
- to: '[email protected]'
send_resolved: true
- name: 'wechat' # 子节点 - 微信
wechat_configs:
- corp_id: 'aaa' # corpid
to_party: '1' # 组ID
to_user: '1' # 用户ID
agent_id: '1000001' # agentid
api_secret: 'abcd' # corp secret
send_resolved: true # 告警解除后否发送通知
- 创建wechat.tmpl
注意要utf-8 不然无法启动
告警状态:{{ .Status }}
告警级别:{{ $alert.Labels.severity }}
告警类型:{{ $alert.Labels.alertname }}
告警应用:{{ $alert.Annotations.summary }}
告警主机:{{ $alert.Labels.instance }}
告警物理机:{{ $alert.Labels.node }}
告警详情:{{ $alert.Annotations.description }}
触发阀值:{{ $alert.Annotations.value }}
告警时间:{{ $alert.StartsAt.Format "2020-01-01 15:05:05" }}
恢复时间: {{ $alert.EndsAt.Format "2020-01-01 15:05:15" }}
3. 启动
3.1 Prometheus
启动后 浏览器 localhost:9090
3.2 Alertmanager
启动后 浏览器 localhost:9093
3.3 企业微信
前面两个都启动之后,如果服务符合报警需求(2.1 testrules.xml 中的rules的expr),企业微信会收到告警