Promethus配置邮件告警

2022-06-07 09:14:59 浏览数 (1)

介绍

代码语言:javascript复制
Prometheus是一个按功能划分的凭条,指标的收集和存储与警报是分开的。警报管理功能是由Alertmanager的工具提供,该工具是监控体系中的独立组件。

在Prometheus上定义警报规则后,这些规则可以出发事件,然后传播到Alertmanager,Alertmanager会决定如何处理相应的警报。Alertmanager对警报进行去重、分组,然后路由到不同的接收器,如电子邮件、短信或SaaS服务(PagerDuty等)。我们将在Prometheus服务器上编写警报规则 [2] ,这些规则将使用我们收集的指标并在指定的阈值或标准上触发警报。我们还将看到如何为警报添加一些上下文。当指标达到阈值或标准时,会生成一个警报并将其推送到Alertmanager。与Prometheus一样,Alertmanager配置也是基于YAML的配置文件。

prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。
prometheus触发一条告警的过程:
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

一、安装promethus的监控alertmanager插件

代码语言:javascript复制
wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
tar zxvf alertmanager-0.20.0.linux-amd64.tar.gz
cd alertmanager-0.20.0.linux-amd64
mv  alertmanager-0.20.0.linux-amd64   /usr/local/prometheus/alertmanager

nohup /usr/local/prometheus/alertmanager/alertmanager --config.file="/usr/local/prometheus/alertmanager/alertmanager.yml" &

访问:http://IP:9093

二、prometheus集成alertmanager

  • 1、部署完毕alertmanager, 需要告知prometheus告警信息推送的位置, 通过如下配置即可完成
代码语言:javascript复制
[root@k8s-test-01 alertmanager]# cat /usr/local/prometheus/prometheus.yml 
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 114.67.94.33:9093
  • 2、创建报警规则
代码语言:javascript复制
[root@node00 prometheus]# vim prometheus.yml 
rule_files:
  - "rules/*rules.yml"
  # - "second_rules.yml"
[root@node00 prometheus]#  mkdir rules
[root@node00 prometheus]# cat rules/node_rules.yml 
groups:
  - name: node-alert
    rules:
    - alert: disk-full
      expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"})
      for: 1m
      labels: 
        serverity: page
      annotations: 
        summary: "{{ $labels.instance }} disk full "
        description: "{{ $labels.instance }} disk > {{ $value }}  "

解释: expr 相当于表示,表示磁盘使用率是多少的值(5%) ,for 持续时间为1分钟就会报警.(上面规则只要重启动aletemanger 就会报警)

  • 如果想要恢复的话的,可以使用 数值比较。
代码语言:javascript复制
[root@node00 prometheus]# cat rules/node_rules.yml 
groups:
  - name: node-alert
    rules:
    - alert: disk-full
      expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) > 8
      for: 1m
      labels: 
        serverity: page
      annotations: 
        summary: "{{ $labels.instance }} disk full "
        description: "{{ $labels.instance }} disk > {{ $value }}  "
  • 3、重启动promethus /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

查看规则

查看报警信息

三、测试邮件报警问题

  • 1、alertmanger 配置文件修改(邮件发送相关) 上面的消息信息已经从prometheus推送给alertmanager了, 我们已经可以在alertmanager的web管理界面看到对应的报警信息,但是我们还没有配置如何让alertmanager把这些信息推送我们的社交软件上面去。
代码语言:javascript复制
[root@k8s-test-01 alertmanager]# more /usr/local/prometheus/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  ###################################
  smtp_auth_username: "xxx@126.com"
  smtp_auth_password: "*******"
  #smtp_auth_secret: ""
  smtp_require_tls: false
  smtp_smarthost: "smtp.126.com:465"
  smtp_from: "xxx@126.com"
  ####################################
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-caozm'
  
receivers:
- name: 'email-xxx'
  email_configs:
  - send_resolved: true
    to: xxx@126.com
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

解释: 分组(group): 将类似性质的警报合并为单个通知。

代码语言:javascript复制
group_by: ['alertname']  # 以标签作为分组依据
group_wait: 10s    # 分组报警等待时间
group_interval: 10s   # 发送组告警间隔时间
repeat_interval: 1h  # 重复告警发送间隔时间

抑制(inhibition): 当警报发出后,停止重复发送由此警报引发的其他警报。可以消除冗余告警

代码语言:javascript复制

inhibit_rules:
  - source_match:  # 当此告警发生,其他的告警被抑制
      severity: 'critical'   
    target_match:   # 被抑制的对象
      severity: 'warning'  
    equal: ['id', 'instance']

重启动alertmanger 进程。

  • 2、故障邮件
  • 3 恢复邮件

0 人点赞