Prometheus监控平台Alertmanager配置告警

1. 前言

接上一篇Prometheus+Grafana监控部署,环境已经安装完成,本篇进行学习使用Alertmanager告警配置。

2. 告警概述

官方文档

Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器。

Prometheus的警报分为两个部分。Prometheus服务器中的警报规则将警报发送到Alertmanager。该Alertmanager 然后管理这些警报,包括沉默,抑制,聚集和通过的方法,如电子邮件发出通知,对呼叫通知系统,以及即时通讯平台。

设置警报和通知的主要步骤:

1) 设置并配置Alertmanager;

2) 配置Prometheus对Alertmanager访问;

3) 在普罗米修斯创建警报规则;

分组:分组将类似性质的警报分类为单个通知。当许多系统同时发生故障并且可能同时触发数百到数千个警报时,此功能特别有用。警报的分组,分组通知的时间以及这些通知的接收者由配置文件中的路由树配置

沉默:一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配RE,如果匹配,将不会为此警报发送通知。可通过Alertmanager的Web界面中配置沉默。

抑制:抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。抑制机制可以通过Alertmanager的配置文件来配置。

Alert的三种状态:

1) pending:警报被激活,但是低于配置的持续时间。这里的持续时间即rule里的FOR字段设置的时间。改状态下不发送报警。

2) firing:警报已被激活,而且超出设置的持续时间。该状态下发送报警。

3) inactive:既不是pending也不是firing的时候状态变为inactive

prometheus触发一条告警的过程:

prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

3. Alertmanager安装部署

3.1 下载

官网下载   github下载,也可在线下载,这里我下载到了home目录下

# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

3.2 解压/usr/local目录下,并重命名

# tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/

# cd /usr/local/

# mv alertmanager-0.21.0.linux-amd64/ alertmanager

# cd alertmanager/

查看版本

# alternatives --version  

3.3 修改alertmanager配置文件

# vim alertmanager.yml

global:
  # resolve_timeout:解析超时时间
  resolve_timeout: 5m
  # smtp_smarthost: 使用email打开服务配置
  smtp_smarthost: 'smtp.126.com:465'
  # smtp_from:指定通知报警的邮箱
  smtp_from: 'laowang@126.com'
  # smtp_auth_username:邮箱用户名
  smtp_auth_username: 'laowang@126.com'
  # smtp_auth_password:授权密码
  smtp_auth_password: '123456'
  # smtp_require_tls:是否启用tls
  smtp_require_tls: false

# route标记:告警如何发送分配
route:
  # group_by:采用哪个标签作为分组的依据
  group_by: ['alertname']
  # group_wait:分组等待的时间
  group_wait: 10s
  # group_interval:上下两组发送告警的间隔时间
  group_interval: 10s
  # repeat_interval:重复发送告警时间。默认1h
  repeat_interval: 1m
  # receiver 定义谁来通知报警
  receiver: 'mail'

# receiver标记:告警接受者 
receivers:
# name:报警来源自定义名称
- name: 'mail'
  # email_configs:通过邮箱发送报警
  email_configs:
    # to:指定接收端email
    - to: 'laowang@126.com'

# inhibit_rules标记:降低告警收敛,减少报警,发送关键报警
#inhibit_rules:
#  - source_match:
#      severity: 'critical'
#    target_match:
#      severity: 'warning'
#    equal: ['alertname', 'dev', 'instance']

 

主要配置的作用:

global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。

route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。

receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。

inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

smtp_smarthost: 这里为 QQ 邮箱 SMTP 服务地址,官方地址 smtp.qq.com 端口为 465 或 587,同时设置开启 POP3/SMTP 服务。

smtp_auth_password: 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。

3.4 检查alertmanager配置文件

# ./amtool check-config alertmanager.yml

3.5 启动alertmanager

前台启动,默认监听端口9093

# ./alertmanager --config.file=alertmanager.yml

后台启动

# nohup ./alertmanager --config.file=alertmanager.yml &

3.6 加入开机启动

cat > /etc/systemd/system/alertmanager.service << "EOF"
[Unit]
Description=alertmanager
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
 
[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

# systemctl daemon-reload

# systemctl enable alertmanager

# systemctl start alertmanager

# systemctl status alertmanager

3.7 浏览器访问 

http://172.20.32.218:9093

4. Prometheus配置

4.1 进入prometheus安装目录,编辑prometheus.yml

# vim prometheus.yml 

告警配置连接

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

开启告警配置

rule_files:
  # 告警规则配置文件位置
  - "rules/*.yml"

监控Alertmanager

  - job_name: 'alertmanager'
    static_configs:
      - targets: ['172.20.32.218:9093']

检查并重新加载配置文件

# ./promtool check config prometheus.yml

4.2 创建告警目录&添加报警规则 

在prometheus.yml的同级目录下,创建rules目录,在该rules目录下创建node_alerts.yml文件,内容如下:

# mkdir rules && cd rules/

# touch node_alerts.yml

# groups:组告警
groups:
# name:组名。报警规则组名称
- name: general.rules
  # rules:定义角色
  rules:
  # alert:告警名称。 任何实例5分钟内无法访问发出告警
  - alert: NodeFilesystemUsage
    # expr:表达式。 获取磁盘使用率 大于百分之80 触发
    expr: 100 - (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80
    # for:持续时间。 表示持续一分钟获取不到信息,则触发报警。0表示不使用持续时间
    for: 1m
    # labels:定义当前告警规则级别
    labels:
      # severity: 指定告警级别。
      severity: warning
    # annotations: 注释 告警通知
    annotations:
      # 调用标签具体指附加通知信息
      summary: "Instance {{ $labels.instance  }} :{{ $labels.mountpoint }} 分区使用率过高" # 自定义摘要
      description: "{{ $labels.instance  }} : {{ $labels.job  }} :{{ $labels.mountpoint  }} 这个分区使用大于百分之80% (当前值:{{ $value }})" # 自定义具体描述

注意:为了方便测试,我这里把调整磁盘使用率阀值测试报警调整到1,然后重新加载配置。

4.3 重启Prometheus

# systemctl restart prometheus

浏览器查看监控信息:http://172.20.32.218:9090/targets

4.4 查看告警规则配置

4.5 查看告警

注意:可以配置多个监控需要配置配置文件配置多个 -alert

警报有三种状态:

Inactive 警报未激活;

Pending:警报已满足测试表达式条件,但未达到for指定的持续时间;

Firing:警报满足测试表达式条件,且持续时间达到了for指定的持续时间;

4.6 查看邮件

使用126邮箱发送告警邮件给QQ邮箱,但是最后不明白为什么没触发告警邮件,126邮箱也开启了smtp,由于时间原因,留在以后待解决。

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页