Alertmanager告警


配置alertmanager

[root@master01 ~]# vim /app/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m  # 指定报警解决的超时时间
  smtp_from: '[email protected]'  # 发件人邮箱地址
  smtp_smarthost: 'smtp.qq.com:465'  # SMTP 服务器地址及端口
  smtp_auth_username: '[email protected]'  # SMTP 认证用户名
  smtp_auth_password: 'xxxxxxxxxxxxxxx'  # SMTP 认证密码
  smtp_require_tls: false  # 是否要求使用 TLS 连接
  smtp_hello: 'qq.com'  # SMTP HELO 参数

route:
  group_by: ['alertname']  # 按照 alertname 分组
  group_wait: 5s  # 分组等待时间
  group_interval: 5s  # 分组之间的间隔时间
  repeat_interval: 5m  # 重复发送报警的时间间隔
  receiver: 'email'  # 默认接收者

receivers:
  - name: 'email'  # 接收者的名称
    email_configs:
      - to: '[email protected]'  # 发送到的邮箱地址
        send_resolved: true  # 是否发送已解决的通知

inhibit_rules:
  - source_match:
      severity: 'critical'  # 源报警的严重性级别
    target_match:
      severity: 'warning'  # 目标报警的严重性级别
    equal: ['alertname', 'dev', 'instance']  # 需要匹配的字段

[root@master ~]#  vim /app/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_from: '[email protected]'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'qxiynwxxxxxxx'
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'

receivers:
  - name: 'email'
    email_configs:
      - to: '[email protected]'
        send_resolved: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

配置prometheus关联alertmanager

[root@master01 ~]# vim /app/prometheus/prometheus.yml
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
      - targets:
        - 10.0.0.200:9093
[root@master01 ~]# supervisorctl restart prometheus

配置触发器

groups:  # 定义报警组的开始
  - name: user-count  # 组的名称,用于标识这一组报警
    rules:  # 开始定义报警规则
      - alert: user-count  # 报警的名称,用于引用和识别
        expr: user_countv2 > 3  # 触发报警的表达式,当用户数量大于 3 时触发
        for: 15s  # 需要满足条件的持续时间,必须持续 15 秒才会触发报警
        labels:  # 为报警添加标签,方便分类和筛选
          severity: "1"  # 报警的严重性级别(可以是字符串或数字,通常用于排序和处理)
          team: "node"  # 负责处理该报警的团队
          level: "application"  # 报警的层级标签,指示这是应用级别的报警
          component: "login-service"  # 指定报警来源的组件,帮助识别问题的具体服务
          environment: "production"  # 指定报警的环境,如生产环境或开发环境
        annotations:  # 提供额外信息,通常用于报警通知中
          summary: "{{ $labels.exported_instance }} 上的 {{ $labels.component }} 登录用户数量超过 3!"  # 报警摘要,提供简洁的信息
          description: "在 {{ $labels.exported_instance }} 上检测到 {{ $labels.component }} 的登录用户数量超过了预设阈值 3。请检查相关服务是否有异常。"  # 报警详细描述,提供更多上下文,指导后续处理

## 配置触发器规则存放目录
[root@master01 ~]# vim /app/prometheus/prometheus.yml
# Load rules once and periodically evaluate them according to the global
'evaluation_interval'.
rule_files:
  - "/app/prometheus/alertmanager/user_count.yml"
# - "second_rules.yml"




vim /app/prometheus/alertmanager/user_count.yml

groups:
- name: user-count
  rules:
  - alert: user-count
    expr: user_countv2 > 3
    for: 15s
    labels:
      severity: "1"
      team: "node"
      # 假设添加一些层级标签  
      level: "application"
      component: "login-service"
      # 如果需要,还可以添加环境或其他标识  
      environment: "production"
    annotations:
      summary: "{{ $labels.exported_instance }} 上的 {{ $labels.component }} 登录用户数量超过 3!"
      description: "在 {{ $labels.exported_instance }} 上检测到 {{ $labels.component }} 的登录用户数量超过了预设阈值 3。请检查相关服务是否有异常。"

#### 加入supervisorctl 管理
[program:prometheus]
directory=/app/prometheus/
command=/bin/bash -c "/app/alertmanager/alertmanager  --config.file=/app/alertmanager/alertmanager.yml"
autostart=true
autorestart=true
stdout_logfile=/var/log/prome_stdout.log
stderr_logfile=/var/log/prome_stderr.log
user=root
stopsignal=TERM
startsecs=5
startretries=3
stopasgroup=true
killasgroup=true


[root@master alertmanager]# supervisorctl  update
[root@master alertmanager]# supervisorctl  restart all 

image-20240927163655185

image-20240927163846035

恢复后也发邮件

image-20240927163954230

image-20240927163939749