告警触发流程

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为示例进行部署

# 下载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配置

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

nohup /root/alertmanager/alertmanager --web.listen-address=:9093 --config.file=/root/alertmanager/alertmanager.yml &

Prometheus配置

# 在prometheus目录下创建rules目录,目录根据需要自定义
mkdir rules
# 编辑prometheus配置文件
vim prometheus.yml

# Alertmanager配置
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.80.104:9093

# 加载告警规则文件
rule_files:
  - 'rules/*.yml'

告警规则文件编写

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: "这是一条告警描述信息"

可使用以下方式对规则文件进行语法检查

./promtool check rules rules/node_down.yml

测试邮件推送

告警未触发状态

监控指标

Alertmanager此时未收到告警

此时我们手动断开一个监控点,告警产生


告警邮件产生

告警恢复邮件,需要配置 send_resolved: true

最后修改:2020 年 09 月 21 日 05 : 09 PM
如果觉得我的文章对你有用,请随意赞赏