Prometheus云原生监控:运维与开发实战
上QQ阅读APP看书,第一时间看更新

3.6.1 通过Alertmanager生成邮件告警

Prometheus是一个按功能划分的平台,指标的收集、存储、告警是分开的,告警功能由Alertmanager独立组件提供。

Alertmanager同样可以在Prometheus官网https://prometheus.io/download/下载,如图3-31所示。

图3-31 Alertmanager官网

Alertmanager的默认端口是9093,对本章介绍的案例中的几个组件端口进行梳理后得到表3-2。

表3-2 Spring Boot集成Prometheus案例中的组件端口

在Alertmanager的安装目录下创建一个新文件alertmanager.yml,在这个文件中添加如下配置,该配置将会通过电子邮件发送收到的告警(以126邮箱为例)。


global:
  resolve_timeout: 5m

  smtp_smarthost: 'smtp.126.com:25'
  smtp_from: 'XXX@126.com'
  smtp_auth_username: 'XXX@126.com'
  smtp_auth_password: 'XXX'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'mail-receiver'
receivers:
- name: 'mail-receiver'
  email_configs:
  - to: 'XXX@126.com'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

接下来通过如下命令启动Alertmanager组件:


./alertmanager --config.file=alertmanager.yml

接下来在Prometheus的安装目录下创建一个新文件alert_rules.yml,该文件的内容如下所示,其表示一旦Spring Boot应用进程停止,1分钟以后就可以收到邮件告警。


groups:
- name: demo-alert-rule
  rules:
  - alert: DemoJobDown
    expr: sum(up{job="springboot-demo"}) == 0
    for: 1m
    labels:
      severity: critical

在Prometheus安装目录下的prometheus.yml文件中新增alerting模块(前面启动的9093端口)和rule_files模块(前面新增的alert_rules.yml告警规则)。以下是prometheus.yml配置文件各个部分的含义和功能。


# global模块是全局配置信息,它定义的内容会被scrape_configs模块中的每个Job单独覆盖
global:
  scrape_interval:     15s # 抓取target的时间间隔,设置为15秒,默认值1分钟
  evaluation_interval: 15s # Prometheus计算一个rule配置的时间间隔,设置为15秒,默认
 # 值1分钟
  # scrape_timeout          # 抓取target的超时事件,默认值10秒

# 告警模块,Prometheus Server发送请求给Alertmanager之前也会触发一次relabel操作,aler
# 子模块下也可以配置alert_relabel_configs
alerting:
  alertmanagers:
  - static_configs:   # 静态配置Alertmanager的地址,也可以依赖服务发现动态识别
      - targets:      # 可以配置多个IP地址
          - localhost:9093

# Prometheus自定义的Rule主要分为Recording rule和Alerting rule两类
rule_files:
    - "alert_rules.yml"

scrape_configs:
    # Job名称很重要,Prometheus会将该名称作为Label追加到抓取的每条时序中
    - job_name: 'prometheus'
        # metrics_path defaults to '/metrics' # metrics_path默认值是/metrics,可以
 # 自定义,表示抓取时序的http path
    # scheme defaults to 'http'. # scheme默认是http,表示抓取时序数据使用的网络协议
       # param 抓取时序的相关参数,可以自定义
    static_configs:             # 静态方式
    - targets: ['localhost:9090']
  
- job_name: 'springboot-demo'   # 第二个微服务Spring Boot作业
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['localhost:8080']

重启Prometheus服务(重新加载prometheus.yml配置文件)以后,在Prometheus服务、Alertmanager服务都启动的状况下,关掉Spring Boot应用的进程,就可以收到一封邮件,告知用户Spring Boot应用已经不可用。

在上述Spring Boot应用的告警案例中,用户也可以在rule_files模块中创建很多告警规则来满足实际业务开发中的各种场景需求。