Prometheus中的报警组件。 1、获取数据通过Metrics接口。 2、TSDB用来存储监控数据。 3、Grafana展示监控大屏。 4、AlterManager用作监控报警的组件。

1、AlertManager的组成

2、解压 [root@VM-0-16-centos ~]# tar -xf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/

3、创建软连接 [root@VM-0-16-centos alertmanager]# ln -s /usr/local/alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager

4、添加环境变量 [root@VM-0-16-centos alertmanager]# vim /etc/profile ALTERMANAGER_HOME=/usr/local/alertmanager PATH=$PATH:$ALTERMANAGER_HOME [root@VM-0-16-centos alertmanager]# source /etc/profile

5、测试启动 [root@VM-0-16-centos local]# /usr/local/alertmanager/alertmanager —config.file=”/usr/local/alertmanager/alertmanager.yml”

6、注册alertManager服务 [root@VM-0-16-centos local]# cat alertmanager.service [Unit] Description=AlertManager

[Service] ExecStart=/usr/local/alertmanager/alertmanager —config.file=/usr/local/alertmanager/alertmanager.yml Restart=on-failure

[Install] WantedBy=multi-user.target [root@VM-0-16-centos local]# systemctl daemon-reload [root@VM-0-16-centos local]# systemctl start alertmanager.service

  1. <a name="aYqvJ"></a>
  2. ## 3、介绍AlertManager的配置文件
  3. > 配置文档:[https://prometheus.io/docs/alerting/latest/configuration/#receiver](https://prometheus.io/docs/alerting/latest/configuration/#receiver)
  4. <a name="SsAvR"></a>
  5. ### 3.1、全局配置
  6. ```bash
  7. # global:全局配置,主要配置告警方式,如邮件、webhook等。
  8. global:
  9. resolve_timeout: 5m # 超时,默认5min,意思是说报警持续多长时间才发信息
  10. smtp_smarthost: '' # 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
  11. smtp_from: ''
  12. smtp_auth_username: ''
  13. smtp_auth_password: '' # 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
  14. smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
  15. global:
  16. resolve_timeout: 3s
  17. smtp_smarthost: 'smtp.163.com:25'
  18. smtp_from: 'chqit@163.com'
  19. smtp_auth_username: 'chet@163.com'
  20. smtp_auth_password: 'YKFPK'
  21. smtp_require_tls: false

3.2、路由配置

用来设置报警的分发策略。

  1. # route:用来设置报警的分发策略。Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。
  2. # 另外,根路由需要配置一个接收器(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省
  3. # 接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中
  4. # continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级(
  5. # 匹配)route或者根route发出(按最后匹配到的规则发出邮件)。查看你的告警路由树,https://www.prometheus.io/webtools/alerting/routing-tree-editor/,
  6. # 将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree"
  7. route:
  8. group_by: ['alertname'] # 用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by: [...]
  9. group_wait: 30s # 当一个新的告警组被创建时,需要等待'group_wait'后才发送初始通知。这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
  10. group_interval: 2m # 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,则需等待'group_interval'时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。
  11. repeat_interval: 10m # 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
  12. receiver: 'email' # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
  13. routes: # 子路由
  14. - receiver: 'wechat'
  15. match: # 通过标签去匹配这次告警是否符合这个路由节点;也可以使用 match_re 进行正则匹配
  16. severity: Disaster # 标签severity为Disaster时满足条件,使用wechat警报

3.3、通知配置

  1. receivers: # 配置报警信息接收者信息。
  2. - name: 'email' # 警报接收者名称
  3. email_configs:
  4. - to: '{{ template "email.to"}}' # 接收警报的email(这里是引用模板文件中定义的变量)
  5. html: '{{ template "email.to.html" .}}' # 发送邮件的内容(调用模板文件中的)
  6. # headers: { Subject: " {{ .CommonLabels.instance }} {{ .CommonAnnotations.summary }}" } # 邮件标题,不设定使用默认的即可
  7. send_resolved: true # 故障恢复后通知
  8. receivers:
  9. - name: 'email'
  10. email_configs:
  11. - to: '{{ template "email.to" . }}'
  12. html: '{{ template "email.to.html" . }}'
  13. send_resolved: true

3.4、抑制规则配置

  1. inhibit_rules: # 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
  2. - source_match:
  3. severity: 'critical'
  4. target_match:
  5. severity: 'warning'
  6. equal: ['alertname', 'dev', 'instance']
  7. 100% --- > 警告 | 严重警告 | error
  8. CPU
  9. 60 % : 警告
  10. 80 % : 严重警告
  11. 100% : error

3.5、完整配置

  1. global:
  2. resolve_timeout: 3s
  3. smtp_smarthost: 'smtp.163.com:465'
  4. smtp_from: 'chenya@163.com'
  5. smtp_auth_username: 'chegqit@163.com'
  6. smtp_auth_password: 'YBCWWQHKFPK'
  7. smtp_require_tls: false
  8. route:
  9. group_by: ['alertname', 'dev', 'instance']
  10. group_wait: 30s
  11. group_interval: 2m
  12. repeat_interval: 3m
  13. receiver: 'email'
  14. receivers:
  15. - name: 'web.hook'
  16. webhook_configs:
  17. - url: 'http://127.0.0.1:5001/'
  18. - name: 'email'
  19. email_configs:
  20. - to: 'cheqit@163.com'
  21. html: ''
  22. send_resolved: true
  23. inhibit_rules:
  24. - source_match:
  25. severity: 'critical'
  26. target_match:
  27. severity: 'warning'
  28. equal: ['alertname', 'dev', 'instance']

4、报警模板

报警的时候,发送邮件的格式。

4.1、编写模板

  1. [root@VM-0-16-centos alertmanager]# vim /usr/local/alertmanager/templates/*.tmpl
  2. {{ define "email.from" }}chenyangqit@163.com{{ end }}
  3. {{ define "email.to" }}chenyangqit@163.com{{ end }}
  4. {{ define "email.to.html" }}
  5. {{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
  6. <h2>@告警通知</h2>
  7. 告警程序: prometheus_alert <br>
  8. 告警级别: {{ .Labels.severity }} <br>
  9. 告警类型: {{ .Labels.alertname }} <br>
  10. 故障主机: {{ .Labels.instance }} <br>
  11. 告警主题: {{ .Annotations.summary }} <br>
  12. 告警详情: {{ .Annotations.description }} <br>
  13. 触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
  14. {{ end }}{{ end -}}
  15. {{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
  16. <h2>@告警恢复</h2>
  17. 告警程序: prometheus_alert <br>
  18. 故障主机: {{ .Labels.instance }}<br>
  19. 故障主题: {{ .Annotations.summary }}<br>
  20. 告警详情: {{ .Annotations.description }}<br>
  21. 告警时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
  22. 恢复时间: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
  23. {{ end }}{{ end -}}
  24. {{- end }}

4.2、加入到配置文件之中

  1. [root@VM-0-16-centos alertmanager]# vim alertmanager.yml
  2. templates:
  3. - /usr/local/alertmanager/templates/*.tmpl

5、报警的规则

告诉alertmanager,什么时候报警。

5.1、编写报警规则

  1. groups:
  2. - name: cpu
  3. rules:
  4. - record: node:cpu_usage:ratio #别的文件使用,直接使用这个
  5. expr: ((100 - (avg by(instance,ip,hostname) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)))
  6. - name: mem
  7. rules:
  8. - record: node:memory_usage:ratio
  9. expr: (100 -(node_memory_MemTotal_bytes -node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes ) / node_memory_MemTotal_bytes * 100 )
  10. annotations:
  11. description: "The node is Down more than 1 minute!"
  12. summary: "The node is down"
  13. alert 告警规则的名称,在每一个group中,规则名称必须是唯一的。
  14. expr 基于PromQL表达式配置的规则条件,用于计算相关的时间序列指标是否满足规则。
  15. for :评估等待时间,可选参数。当相关指标触发规则后,在for定义的时间区间内该规则会处于Pending状态,在达到该时间后规则状态变成Firing,并发送告警信息到Alertmanager
  16. labels 自定义标签, 允许用户指定要添加到告警信息上的一组附加标签。
  17. annotations: 用于指定一组附加信息,如用于描述告警的信息文字等,本示例中 summary用于描述主要信息,description用于描述详细的告警内容。
  18. 监控CPU使用率的报警规则
  19. 监控内存的报警规则

5.2、完整的报警规则配置

  1. [root@VM-0-16-centos rules]# cat test.yaml
  2. groups:
  3. - name: CPU使用率
  4. rules:
  5. - expr: node_cpu_seconds_total{mode="user"} > 30
  6. record: node:cpu_seconds:total

6、将报警规则和alertmanager加入到porometheus

6.1、修改prometheus的配置文件

  1. [root@VM-0-16-centos prometheus]# vim prometheus.yml
  2. # Alertmanager configuration
  3. alerting:
  4. alertmanagers:
  5. - static_configs:
  6. - targets:
  7. - 192.168.0.16:9093

6.2、将报警规则加入prometheus

  1. [root@VM-0-16-centos prometheus]# vim prometheus.yml
  2. rule_files:
  3. - "/usr/local/alertmanager/rules/*.yaml"

6.3、检查alertmanagerg和rules的配置文件是否正确

  1. [root@VM-0-16-centos prometheus]# /usr/local/alertmanager/amtool check-config /usr/local/alertmanager/alertmanager.yml
  2. Checking '/usr/local/alertmanager/alertmanager.yml' SUCCESS
  3. Found:
  4. - global config
  5. - route
  6. - 1 inhibit rules
  7. - 1 receivers
  8. - 1 templates
  9. SUCCESS

image.png