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模块中创建很多告警规则来满足实际业务开发中的各种场景需求。