我们在文章 《使用 docker-compose 搭建 prometheus 监控系统》 的基础上,增加 prometheus 的告警功能。
Prometheus 指标的收集存储与告警是分开的,告警功能由 alertmanager 提供。我们需要在 prometheus 定义告警规则,这些规则可以触发事件,然后传播到 alertmanager。接下来,alertmanager 会决定如何处理相应的警报,并确定使用电子邮件,短信等发出警报。Prometheus 和 alertmanager 的关系如下图所示。
为了在 prometheus 增加 alertmanager 的使用,我们在 docker-compose.yml
增加 alertmanager 容器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| version: '3' services: centos1: image: centos container_name: centos1 restart: always ports: - "9101:9100" volumes: - ~/code/docker/prometheus/node_exporter:/root command: /root/node_exporter
centos2: image: centos container_name: centos2 restart: always ports: - "9102:9100" volumes: - ~/code/docker/prometheus/node_exporter:/root command: /root/node_exporter
prometheus: image: prom/prometheus container_name: prometheus restart: always ports: - "9090:9090" volumes: - ~/code/docker/prometheus/prometheus:/etc/prometheus - ~/code/docker/prometheus/prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus'
grafana: image: grafana/grafana container_name: grafana restart: always ports: - "3000:3000" volumes: - ~/code/docker/prometheus/grafana_data:/var/lib/grafana
alertmanager: image: prom/alertmanager container_name: alertmanager restart: always ports: - "9093:9093" volumes: - ~/code/docker/prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml command: - '--config.file=/etc/alertmanager/alertmanager.yml'
|
在 docker-compose.yml
文件中,我们指定 alertmanager 的配置文件是 /etc/alertmanager/alertmanager.yml
,有关 alertmanager.yml
的配置,我们下面再说明。
我们先来看 prometheus 的配置 prometheus.yml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| global: scrape_interval: 5s
rule_files: - "alert.rules"
alerting: alertmanagers: - static_configs: - targets: - 'alertmanager:9093'
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['prometheus:9090'] - job_name: 'linux-exporter' metrics_path: /metrics static_configs: - targets: ['centos1:9100', 'centos2:9100']
|
alerting
用于指定 alertmanager 的信息,alertmanager 启动端口为 9093,alertmanager 容器启动信息可以在 docker-compose.yml
文件中查看到。
rule_files
用于指定告警规则,这里我们指定 alert.rules
文件来用保存告警规则。
alert.rules
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| groups: - name: example rules: - alert: InstanceDown expr: up == 0 for: 1m labels: severity: page
annotations: summary: "实例 {{ $labels.instance }} 宕机" description: "{{ $labels.instance }} 任务 {{ $labels.job }} 已宕机 1 分钟"
|
这个告警的规则是指当实例宕机超过 1 分钟时触发告警。
接下来我们来看 alertmanager 的配置文件 alertmanager.yml
的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| global: resolve_timeout: 2m smtp_smarthost: 'smtpdm.aliyun.com:465' smtp_from: 'xxx@xxx.leehao.me' smtp_auth_username: 'xxx@xxx.leehao.me' smtp_auth_password: 'xxxxxx' smtp_require_tls: false
route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 4m receiver: 'mail'
receivers: - name: 'mail' email_configs: - to: 'xxxx@163.com' headers: { Subject: "[WARN] alertmanager 报警邮件"}
|
其中,有关阿里云 SMTP 的设置需要先在阿里云邮件推送控制台提前配置好。
在阿里云邮件推送的控制台,根据文档提示,创建发信域名,创建发信地址,并设置 SMTP 授权码:
启动 docker-compose:
在另一个终端关闭 centos1 容器:
1
| docker-compose stop centos1
|
等待一段时间,打开 prometheus 的 alerts 页面(http://127.0.0.1:9090/alerts),可以看到告警提示:
再打开 alertmanager 页面(http://127.0.0.1:9093/#/alerts),可以看到 alertmanage 已正常接收到 prometheus 的告警:
登录接收告警邮件的邮箱,可以看到 alertmanager 发送的警报邮件:
参考资料