六 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

原文地址:https://www.cnblogs.com/zhenxing06/p/15009746.html