告警触发流程
prometheus -> 触发规则(rules) -> 超出持续时间(for) -> alertmanager -> 分组|抑制|静默 -> 媒体类型 ->邮件|钉钉|微信等
正常状态为 Inactive,当触发告警规则后进入 Pending 状态,并等待告警规则设置的 for 值,如果超过设置的 for 值状态未恢复为 Inactive 则转至 Firing,并推送至 alertmanager
Alertmanager 部署
GitHub:https://github.com/prometheus/alertmanager
首先在 GitHub alertmanager Releases 上下载对应系统版本的 alertmanager,这里以alertmanager-0.21.0.linux-amd64.tar.gz
为示例进行部署
1 2 3 4 5 6 7 8 9 10
| # 下载alertmanager wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz # 解压 tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz # 重命名文件夹方便输入与记忆 mv alertmanager-0.21.0.linux-amd64.tar.gz alertmanager # 进入安装目录 cd alertmanager # 以下为启动命令,可暂时不执行 nohup /root/alertmanager/alertmanager --web.listen-address=:9093 --config.file=/root/alertmanager/alertmanager.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
| vim alertmanager.yml
# 全局配置 global: # 该项表示告警标记转为恢复标记后保持多久发送恢复通知,默认为5分钟 resolve_timeout: 10s # smtp服务器,如果465以及25端口报错可以尝试587端口,25端口需要将tls设置为false smtp_smarthost: 'smtp.zoho.com.cn:587' # 邮件来自 smtp_from: 'i@test.com' # 邮箱账户 smtp_auth_username: 'i@test.com' # 邮箱密码或授权码 smtp_auth_password: 'passwd' # 启用TLS/SSL smtp_require_tls: true # 定义HTML邮件模板 templates: - 'template/*.tmpl' # route用来设置报警的分发策略 route: group_by: ['alertname'] # 组告警等待时间,告警产生后等待10s,如果有同组告警一起发出 group_wait: 10s # 两组告警的间隔时间 group_interval: 10s # 重复告警的间隔时间,减少相同邮件的发送频率 repeat_interval: 1h # 告警推送渠道 receiver: 'email' # 告警推送方式与渠道,route->receiver 对应 receivers->name receivers: - name: 'email' email_configs: # 接收人 - to: 'test@qq.com' # 设定邮箱的内容模板,不设置则使用默认模板 # html: '{{ template "test.html" . }}' # 接收邮件的标题 headers: { Subject: " 报警邮件"} # 告警消除是否通知 send_resolved: true - name: 'web.hook' webhook_configs: - url: 'http://127.0.0.1:5001/' # 告警抑制规则 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
|
完成以上配置后可以启动 alertmanager
1
| nohup /root/alertmanager/alertmanager --web.listen-address=:9093 --config.file=/root/alertmanager/alertmanager.yml &
|
Prometheus 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 在prometheus目录下创建rules目录,目录根据需要自定义 mkdir rules # 编辑prometheus配置文件 vim prometheus.yml
# Alertmanager配置 alerting: alertmanagers: - static_configs: - targets: - 192.168.80.104:9093
# 加载告警规则文件 rule_files: - 'rules/*.yml'
|
告警规则文件编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cd prometheus/rules # 创建规则文件node_down.yml
groups: - name: node_down rules: # 告警名称 - alert: 节点离线告警 # 告警的判定条件,参考Prometheus高级查询来设定 expr: probe_success == 0 # for表示告警持续时间,超过这个时间才会发送给alertmanager for: 10s # 标签项 labels: severity: warning annotations: # 尽可能把详细告警信息写入summary标签值,因为告警短信/邮件/钉钉发送的内容使用了summary标签中的值 summary: "Instance {{ $labels.instance }} 离线" # 这是一条告警描述 description: "这是一条告警描述信息"
|
可使用以下方式对规则文件进行语法检查
1
| ./promtool check rules rules/node_down.yml
|
测试邮件推送