SpringCloud实战十九:Pometheus 集成 Alertmanager 服务告警(邮件通知)

前面四篇博客,分别介绍了 Prometheus、Grafana、SpringBoot埋点、Prometheus集成Consul,本次将介绍 Prometheus怎么实现自动告警,Alertmanager组件,对监控信息实现告警处理,已发送邮件、企业微信等方式通知接收人
1.前三篇博客分别介绍了 Prometheus 、Grafana、与 SpringBoot 集成

下载 AlertManager 组件,下载地址:https://prometheus.io/download/

Prometheus-server负责存取服务监控信息,通过 PromQL 聚合监控信息,通过告警规则,让 Alertmanager 组件处理告警信息,可以已邮件、企业微信、web_hook等方式处理告警信息

2.开始集成
  • 1.在prometheus组件下,新建 orderservice_alert_rules.yml 设置告警规则,通过PromQL查询匹配 ------ 服务是否下线,10分钟内服务内部的错误率是否大于20%,内容如下:
groups:
- name: orderservice-alert-rule
  rules:
  - alert: HttpOrderServiceDown
    expr: sum(up{job="orderservice-prometheus"}) == 0
    for: 1m
    labels:
      severity: critical
  - alert: ErrorRateHigh
    expr: sum(rate(requests_error_total{job="orderservice-prometheus", status="500"}[10m])) / sum(rate(requests_total{job="orderservice-prometheus"}[10m])) > 0.2
    for: 1m
    labels:
      severity: major
    annotations:
      summary: "High Error Rate detected"
      description: "Error Rate is above 2% (current value is: {{ $value }}"
  • 2.在 prometheus.yml文件下,引用 orderservice_alert_rules.yml 告警规则配置,并开启 alertmanagers
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # alertmanage default start port 9093
      - localhost:9093  
rule_files:
  - "orderservice_alert_rules.yml"
  • 3.在 Alertmanager文件夹的 alertmanager.yml 配置中,添加发送邮件配置
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.com:25'
  smtp_from: 'email address'
  smtp_auth_username: 'email address'
  smtp_auth_password: 'password'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 1m
  repeat_interval: 1m
  receiver: 'mail-receiver'
receivers:
- name: 'mail-receiver'
  email_configs:
  - to: 'email address'
  • 4.基于前篇博客的web项目上,添加全局异常拦截器,捕获异常后,发送 metrics 信息
/**
 * 全局统一异常处理
 * 捕获异常,产生异常时,统一返回错误信息
 */
@ControllerAdvice
public class CustomExceptionHandler {

    @Autowired
    MeterRegistry registry;
    private Counter counter;
    @PostConstruct
    private void init(){
        counter = registry.counter("requests_error_total","status","500");
    }

    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public String handle(Exception e) {
        counter.increment();//记录系统出错总数
        return "error , message : " + e.getMessage();
    }
}
  • 5.在 OrderController 中,添加 error 接口,访问该接口时主动触发异常,让全局异常器拦截,并生产 metrics 信息
@RequestMapping("/error")
public String error(){
    if(true){
        throw new RuntimeException("主动报错");
    }
    return "controller error";
}
  • 6.启动 Consul、Prometheus、Alertmanage、2个服务(网关、order-service)
    在这里插入图片描述
    在这里插入图片描述
  • 7.测试,验证
    我们设置了两个告警规则是:1.服务是否下线,2.10分钟内服务内部的错误率是否大于20%
    先测试第二个,先访问正常的接口:order/hello、order/zhuyu,再访问主动抛异常的接口:order/error,然后在 prometheus UI http://localhost:9090/alerts 界面上观察alerts的状态,随着访问 order/error 次数的增加,错误率的升高,order/error,http://localhost:9090/alerts中,ErrorRateHigh的颜色发生了变化,且数字变为 1 active,表示激活了该告警规则,点击可以查看详细信息,我这边的 value 是1,表示错误率已经达到 100%,大于了之前设置的 0.2,因此会触发告警组件,Alertmanager组件接收到告警信息后,会通过配置的处理方式进行处理,现在是已邮件的形式,因此我的邮箱会接收到告警信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    访问 alertmanager 组件的UI界面,也能看到接收了一条告警信息
    在这里插入图片描述
    如果你也是用qq邮箱,请开通 smtp 服务,不知道怎么开通的可以百度下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值