Fork me on Gitee

Prometheus配合AlertManager实现告警监控

一、AlertManager简介

AlertManager和Prometheus Server一样,均采用Golang实现。并且没有第三方依赖。

1.1 安装

# 解压
tar -zxvf alertmanager-0.20.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.20.0.linux-amd64/ /usr/local/alertmanager-0.20
# 创建软链接
ln -s /usr/local/alertmanager-0.20/ /usr/local/alertmanager

1.2 注册到系统服务

vi /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=alertmanager System
Documentation=alertmanager System
[Service] ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

检查语法

[root@bigdata01 alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml'  SUCCESS
Found:
 - global config
 - route
 - 1 inhibit rules
 - 1 receivers
 - 0 templates

二、配置邮件告警

2.1 创建告警邮件模板

# 配置告警恢复和告警email模板
vi /usr/local/alertmanager/email.tmpl 

{{ define "email.to.html"}}
{{ if gt (len .Alerts.Firing) 0 }}{{ range .Alerts }}
@告警
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt }} <br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}{{ range .Alerts }}
@恢复:
告警主机:{{ .Labels.instance }} <br>
告警主题:{{ .Annotations.summary }} <br>
恢复时间: {{ .EndsAt }} <br>
{{ end }}
{{ end }}
{{ end }}

2.2 修改配置文件使用模板

vi /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: 'xxxx@qq.com'
  smtp_auth_username: 'xxxxx@qq.com'
  # smtp_auth_password是邮箱授权码
  smtp_auth_password: 'xxxxxx'
  smtp_require_tls: false
templates:
  - '/usr/local/alertmanager/email.tmpl'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: 'xxxxx@qq.com'
     html: '{{template "email.to.html".}}'
     send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

2.3 修改prometheus配置文件

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 192.168.64.101:9093

定义告警文件

rule_files:
   - rules/*.yml

2.4 编写告警规则

cd /usr/local/prometheus
mkdir rules
cd rules/
vi host_monitor.yml

groups:
 - name: node-up
   rules:
   - alert: node-up
     expr: up{job="host_monitor"} == 0
     for: 15s
     labels:
       severity: 1
       team: node
     annotations:
       summary: "{{$labels.instance}}Instance has been down for more than 5 minutes"

image-20220225162931402

此时,停止node_exporter服务。使得up{job="host_monitor"} == 0,触发服务。

# alert:告警规则的名称。
# expr:基于 PromQL 表达式告警触发条件,用于计算是否有时间序列满足该条件。
# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在 等待期间新产生告警的状态为 pending。

# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
# annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations 的内容在告警产生时会一同作为参数发送到 Alertmanager。
# summary 描述告警的概要信息,description 用于描述告警的详细信息。
# 同时 Alertmanager 的 UI 也会根据这两个标签值,显示告警信息。

状态说明 Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。

  1. Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
  2. Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所 以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
  3. Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警 报解除,则将状态转到 Inactive,如此循环。

当从Pending状态,转变为Firing状态,即触达到ALertManager,推送邮件信息。

image-20220228111639987

随后,启动node_exporter服务。Prometheus Alert 告警状态变为Inactive。收到恢复邮件通知。

image-20220228111814881

参考文章

  1. Prometheus之Alertmanager配置详解
  2. Alertmanager配置文件详解
  3. Prometheus操作指南
  4. [alertmanager 报警规则详解]
  5. prometheus告警模块alertmanager注意事项(QQ邮箱发送告警)
posted @ 2022-02-25 16:56  shine-rainbow  阅读(398)  评论(0编辑  收藏  举报