运维开发网

Prometheus 之 Alertmanager实现基于标签的动态告警

运维开发网 https://www.qedev.com 2021-04-08 12:23 出处:51CTO 作者:wx592bc92b285c7
一、实现目的真实的场景中,我们往往期望可以给告警设置级别,而且可以实现不同的报警级别可以由不同的receiver接收告警消息。Alertmanager中路由负责对告警信息进行分组匹配,并向告警接收器发送通知。1、添加两个不同的告警级别的告警规则当节点服务器cpu15分钟负载低于1时,发生告警,告警级别normal当节点服务器内存使用率高于40%时,发生告警,告警级别critical当Prometh

一、实现目的

真实的场景中,我们往往期望可以给告警设置级别,而且可以实现不同的报警级别可以由不同的receiver接收告警消息。Alertmanager中路由负责对告警信息进行分组匹配,并向告警接收器发送通知。以下为本次需要实现的目的

1、添加两个不同的告警级别的告警规则

  • 当节点服务器cpu15分钟负载低于1时,发生告警,告警级别normal(打标签)
  • 当节点服务器内存使用率高于40%时,发生告警,告警级别critical(打标签)
  • 当Prometheus Targetstatus 状态为down时,发生告警,告警级别critical(打标签)

2、根据不同告警级别,发生给不同的运维人员

二、添加两个不同的告警告级(修改promethems-config.yml配置文件)

#在promethems-config.yml文件下修改alert_rules.yml文件

  alert_rules.yml: |
    groups:
    - name: node_metrics      #分组名node_metrics
      rules:
      - alert: NodeLoad            #node_metrics组下的监控告警规则
        expr: node_load15 < 1
        for: 2m
        labels:
          severity: normal     #标签应用
        annotations:
          summary: "{{$labels.instance}}: Low node load detected"
          description: "{{$labels.instance}}: node load is below 1 (current value is: {{ $value }}"
      - alert: NodeMemoryUsage     #node_metrics组下的监控告警规则
        expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 40
        for: 2m
        labels:
          severity: critical      #标签应用
        annotations:
          summary: "{{$labels.instance}}: High Memory usage detected"
          description: "{{$labels.instance}}: Memory usage is above 40% (current value is: {{ $value }}"
    - name: targets_status       #分组名targets_status
      rules:
      - alert: TargetStatus       #分组名targets_status下的TargetStatus
        expr: up == 0
        for: 1m
        labels:
          severity: critical        #标签应用
        annotations:
          summary: "{{$labels.instance}}: prometheus target down"
          description: "{{$labels.instance}}: prometheus target down,job is {{$labels.job}}"

#重新应用配置文件,并对该prometheus进行软重启加载

Prometheus  之  Alertmanager实现基于标签的动态告警

Prometheus  之  Alertmanager实现基于标签的动态告警

Prometheus  之  Alertmanager实现基于标签的动态告警

三、根据不同告警级别设置发送接受器

#即修改alertmanager-config配置文件

apiVersion: v1
data:
  config.yml: |
    global:
      # 当alertmanager持续多长时间未接收到告警后标记告警状态为 resolved
      resolve_timeout: 5m
      # 配置邮件发送信息
      smtp_smarthost: 'smtp.163.com:25'
      smtp_from: '[email protected]'
      smtp_auth_username: '[email protected]'
      smtp_auth_password: 'xxxxxxxxx'
      smtp_require_tls: false
    # 所有报警信息进入后的根路由,用来设置报警的分发策略
    route:
      # 接收到的报警信息里面有许多alertname=NodeLoadHigh 这样的标签的报警信息将会批量被聚合到一个分组里面
      group_by: ['alertname']
      # 当一个新的报警分组被创建后,需要等待至少 group_wait 时间来初始化通知,如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送
      group_wait: 30s

      # 相同的group发送告警通知的时间间隔
      group_interval: 30s
      # 如果一个报警信息已经发送成功了,等待 repeat_interval 时间来重新发送
      repeat_interval: 10m

      # 默认的receiver:如果一个报警没有被一个route匹配,则发送给默认的接收器
      receiver: default

            ####################以下为本次设置的重点环节######################

      # 上面所有的属性都由所有子路由继承,并且可以在每个子路由上进行覆盖。
      routes:
      - receiver: critical_alerts
        group_wait: 10s
        match:
          severity: critical
      - receiver: normal_alerts
        group_wait: 10s
        match_re:
          severity: normal|middle
    # 配置告警接收者的信息
    receivers:
    - name: 'default'
      email_configs:
      - to: '[email protected]'
        send_resolved: true
    - name: 'critical_alerts'    #严重告警级别发送给ibm.chic[email protected]
      email_configs:
      - to: '[email protected]'
        send_resolved: true
    - name: 'normal_alerts'    #普通告警级别发送给[email protected]
      email_configs:
      - to: '[email protected]'
        send_resolved: true  #接受告警恢复的通知
kind: ConfigMap
metadata:
  name: alertmanager
  namespace: monitor

四、告警邮件查看

Prometheus  之  Alertmanager实现基于标签的动态告警

Prometheus  之  Alertmanager实现基于标签的动态告警

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号