zoukankan      html  css  js  c++  java
  • 六 Prometheus + Altermanager Email 报警

    1.1 ) 保证系统安装了 sendmail:
          1.1.1 ) yum install sendmail -y
          1.1.2 ) echo 'test' | mail -s '主题'  XXXX@qq.com 
    
    1.2 ) 下载altermanager:
        cd /data/src
        wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
        tar zxf alertmanager-0.21.0.linux-amd64.tar.gz 
        mv alertmanager-0.21.0.linux-amd64 /data/soft/
        cd /data/soft/
        ln -sv alertmanager-0.21.0.linux-amd64 alertmanager
    
    1.3 )  编辑alertmanager.yml 文件:
        vim alertmanager.yml
        global:
          resolve_timeout: 5m                                 #当告警的状态有firing变为resolve的以后还要呆多长时间,才宣布告警解除。这个主要是解决某些监控指标在阀值边缘上波动,一会儿好一会儿不好
          
          smtp_smarthost: 'smtp.163.com:25'                   # smtp 服务器地址
          smtp_from: 'monitor@163.com'                        # 发送的邮件来自于哪个邮箱
          smtp_auth_username: 'monitor@163.com'               # 发送邮件的邮箱用户名
          smtp_auth_password: 'WJBELNWNasdfasdfasdfasd'       # 发送邮件的邮箱密码(安全码)
          smtp_require_tls: false                             # 是否使用tls加密
    
    
    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
    
    receivers:
    - name: 'default-receiver'
      email_configs:
      - to: '57674891@qq.com'
     
    #  group_by: ['alertname']  # 以标签作为分组依据
    #  group_wait: 10s    # 分组报警等待时间
    #  group_interval: 10s   # 发送组告警间隔时间
    #  repeat_interval: 1h  # 重复告警发送间隔时间
    
    inhibit_rules:                      # 这个叫做抑制项,通过匹配源告警来抑制目的告警。比如说当我们的主机挂了,可能引起主机上的服务,数据库,中间件等一些告警,假如说后续的这些告警相对来说没有意义,我们可以用抑制项这个功能,让PrometheUS只发出主机挂了的告警。
      - source_match:                   # 当此告警发生,其他的告警被抑制
          severity: 'critical'
        target_match:                   # 被抑制的对象
          severity: 'warning'
        equal: ['id', 'instance']
        
        
    1.3.2 ) 测试规则:
          ./amtool check-config alertmanager.yml 
    
    1.4 ) 启动altermanager: 
    ./alertmanager --config.file='alertmanager.yml' 
    
    

    配置Prometheus:

    cd /data/soft/prometheus
    vim prometheus.yaml
    ......
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets: 
          # - alertmanager:9093        # 默认配置(可以注释)
          - 127.0.0.1:9093             # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口
    
    rule_files:
      - "nginx.*.rule"
      - "rules/*.yml"                   # 把报警规则文件include进来.
     
    
     保存退出
    ######################################################
    
    mkdir -p 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 
    
    [root@bj-check prometheus]#    ./promtool check rules rules/node.yml 
    Checking rules/node.yml
      SUCCESS: 2 rules found
    
    
    # altermanager 测试规则:
      ./amtool alert --alertmanager.url=http://localhost:9093
    [root@bj-check prometheus]# /data/soft/alertmanager/amtool alert --alertmanager.url=http://localhost:9093
    Alertname  Starts At                Summary                                
    内存使用率过高    2021-02-09 10:55:28 UTC  Instance 192.168.26.196:9100 内存使用率过高   
    cpu使用率过高   2021-02-09 10:55:58 UTC  Instance 192.168.31.21:9100 cpu使用率过高   
    
    
    
    # 重启prometheus:
    nohup /data/soft/prometheus/prometheus --config.file=/data/soft/prometheus/prometheus.yml &
    
    

    AlterManager 启动脚本

    
    vim /usr/lib/systemd/system/alertmanager.service
    
    [Unit]
    Description=Prometheus Alertmanager.
    Documentation=https://github.com/prometheus/alertmanager
    After=network.target
    
    [Service]
    Type=simple
    User=root
    Group=root
    ExecStart=/data/soft/alertmanager/alertmanager 
              --config.file=/data/soft/alertmanager/alertmanager.yml 
              --storage.path=/data/soft/alertmanager/data 
              --data.retention=120h 
              --web.external-url "http://106.75.0.0:9093" 
              --web.listen-address ":9093"
              
    Restart=always
    RestartSec=1
    
    [Install]
    WantedBy=multi-user.target
    
    #############################################################
    /data/soft/alertmanager/alertmanager                         # alertmanager 可执行文件
    --config.file=/data/soft/alertmanager/alertmanager.yml      # alertmanager 配置文件
    --storage.path=/data/soft/alertmanager/alertmanager/data    # alertmanager 数据存储文件
    --data.retention=120h                                       # 历史数据最大保留时间,默认120小时
    --web.listen-address="0.0.0.0:9093"                         # 访问alertmanager web界面的地址.
    --web.external-url="http://0.0.0.0:9093"                     # 这个很重要,下面解释.
    
    
    ** 很重要 **
    --web.external-url=http://{IP 或者 域名}:9093     # 被外部访问的地址,IP是本机地址或者域名。 
     生成返回Alertmanager的相对和绝对连接地址,可以在后续告警通知信息中直接点击连接地址访问alertmanager Web UI其格式为http://{ip或者域名}:9093
    该选项一定要加,prometheus发送告警邮件的时候会引用这个地址,如果不加,默认是机器名.
    
    --web.external-url=http://{IP 或者 域名}:9090    # Prometheus 报警后邮件内部source连接被外部访问的地址,IP是本机地址或者域名。 
    
    
    
    
    ## 集群参数:
    --cluster.listen-address=10.41.91.91:9094    # 本机被集群监听的地址
    --cluster.peer=10.41.91.91:9094              # 本机监听其他集群的地址
    --cluster.peer=10.210.149.26:9094 
    --cluster.peer=10.210.149.27:9094'
    
    
    ## 启动AlertManager:
    systemctl daemon-reload
    systemctl enable alertmanager.service
    systemctl start alertmanager.service
    systemctl status alertmanager.service
    
    
  • 相关阅读:
    【shell】sed指定追加模式空间的次数
    【shell】sed后向引用替换文本
    【c++】一道关于继承和析构的笔试题
    【curl】cookie的分隔符
    【shell】grep使用正则表达式
    【leetcode】Remove Duplicates from Sorted Array
    【shell】awk格式对齐文本
    【shell】sed处理多行合并
    【leetcode】Permutations
    BWSAP BW Performance Tuning URLS LIST
  • 原文地址:https://www.cnblogs.com/zhenxing06/p/15009746.html
Copyright © 2011-2022 走看看