zoukankan      html  css  js  c++  java
  • prometheus告警插件-alertmanager

    prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。

    prometheus触发一条告警的过程:

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

    配置alertmanager

    • 安装alertmanager。https://github.com/prometheus/alertmanager/releases/download/v0.16.2/alertmanager-0.16.2.linux-amd64.tar.gz
    • 配置告警信息   vim alertmanager.yml
      global:
        resolve_timeout: 5m
        smtp_smarthost: 'smtp.163.com:25'
        smtp_from: 'xxx@163.com'
        smtp_auth_username: 'xxx@163.com'
        smtp_auth_password: 'xxxxxx'
        smtp_require_tls: false
      
      route:   # route用来设置报警的分发策略
        group_by: ['alertname']  # 采用哪个标签来作为分组依据
        group_wait: 10s   # 组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
        group_interval: 10s  # 两组告警的间隔时间
        repeat_interval: 20m  # 重复告警的间隔时间,减少相同邮件的发送频率
        receiver: 'default-receiver'  # 设置默认接收人
        routes:   # 可以指定哪些组接手哪些消息
        - receiver: 'default-receiver'  
          continue: true
          group_wait: 10s
        - receiver: 'fping-receiver'  
          group_wait: 10s
          match_re:  #根据标签分组,匹配标签dest=szjf的为fping-receiver组
            dest: szjf
      
      receivers:
      - name: 'default-receiver'
        email_configs:
        - to: 'xxxxxxxx@qq.com'
      - name: "fping-receiver"
        webhook_configs:
        - url: 'http://127.0.0.1:9095/dingtalk'
          send_resolved: true

    注意:之前报警了但是邮件一直没有发送出去,# telnet smtp.163.com 25发现也不通,发现是腾讯云做了限制,需要点击25端口解封。 

    启动alertmanage

       # ./amtool check-config alertmanager.yml   # 检查配置
      Checking 'alertmanager.yml' SUCCESS
      Found:
      - global config
      - route
      - 0 inhibit rules
      - 1 receivers
      - 0 templates

       #  ./alertmanager --config.file='alertmanager.yml'   # 启动

     web ui查看 : http://alertmanager_ip:9093

    配置prometheus与alertmanager通信 

    # vim prometheus.yml

    alerting:
      alertmanagers:  # 配置alertmanager
      - static_configs:
        - targets:
          - 127.0.0.1:9093  #alertmanager服务器ip端口
    rule_files:      # 告警规则文件
      - 'rules/*.yml'

     配置报警规则rules

    # vim rules/node.yml

    groups:
    - name: test
      rules:
      - alert: 内存使用率过高
        expr: 100-(node_memory_Buffers_bytes+node_memory_Cached_bytes+node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100 > 30 
        for: 1m  # 告警持续时间,超过这个时间才会发送给alertmanager
        labels:
          severity: warning
        annotations:
          summary: "Instance {{ $labels.instance }} 内存使用率过高"
          description: "{{ $labels.instance }} of job {{$labels.job}}内存使用率超过80%,当前使用率[{{ $value }}]."
    
      - alert: cpu使用率过高
        expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)*100 > 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "Instance {{ $labels.instance }} cpu使用率过高"
          description: "{{ $labels.instance }} of job {{$labels.job}}cpu使用率超过80%,当前使用率[{{ $value }}]."
    # 尽可能把详细告警信息写入summary标签值,因为告警短信/邮件/钉钉发送的内容使用了summary标签中的值。

    检查告警规则,重启prometheus

    # ./promtool check rules rules/node.yml 
      Checking rules/node.yml
      SUCCESS: 2 rules found

      amtool 管理工具可以查看:

    # ./amtool alert --alertmanager.url=http://localhost:9093
    Alertname            Starts At                Summary                              
    内存使用率过高    2019-04-09 13:14:45 CST   Instance 192.168.1.12:9100 内存使用率过高  

     在prometheus界面的alert可以看到告警状态。

    • 绿色表示正常。
    • 红色状态为 PENDING表示alerts 还没有发送至 Alertmanager,因为rules里面配置了for: 1m。
    • 1分钟后状态由 PENDING 变为 FIRING,此时,prometheus才将告警发给alertmanager,在 Alertmanager 中可以看到有一个 alert。 

    收到邮件:

     

    告警收敛(分组,抑制,静默)

    • 分组(group): 将类似性质的警报合并为单个通知。
      group_by: ['alertname']  # 以标签作为分组依据
      group_wait: 10s    # 分组报警等待时间
      group_interval: 10s   # 发送组告警间隔时间
      repeat_interval: 1h  # 重复告警发送间隔时间
    •    抑制(inhibition): 当警报发出后,停止重复发送由此警报引发的其他警报。可以消除冗余告警
    inhibit_rules:
      - source_match:  # 当此告警发生,其他的告警被抑制
          severity: 'critical'   
        target_match:   # 被抑制的对象
          severity: 'warning'  
        equal: ['id', 'instance']
    • 静默(silences): 是一种简单的特定时间静音的机制。例如:服务器要升级维护可以先设置这个时间段告警静默。

               静默在alertmanager的web界面silence里面配置,create silence。

     

    配置完成后可以看到

    在这期间就收不到报警邮件了。

  • 相关阅读:
    android 2.3 bug android 4.x bug
    设计高性能CSS3动画的几个要素
    开启硬件加速 解决页面闪白 保证动画流畅
    取消input在ios下,输入的时候英文首字母的默认大写 android 上去掉语音输入按钮
    JS中的类型检测
    CSS的一点知识
    HTML Canvas
    HTML DOM Table 对象
    只是有所了解的语言
    骑士巡游问题
  • 原文地址:https://www.cnblogs.com/xiaobaozi-95/p/10740511.html
Copyright © 2011-2022 走看看