运维别卷系列 - 云原生监控平台 之 05.prometheus alertManager 实践

文章目录

    • @[toc]
    • Alertmanager 简介
    • Alertmanager 实现的核心概念
      • Grouping
      • Inhibition
      • Silences
      • Client behavior
      • High Availability
    • Alertmanager 配置文件
      • global
      • templates
      • route
      • inhibit_rules
      • receivers
    • Alertmanager 部署
      • 创建 cm
      • 创建 svc
      • 创建 sts
      • Prometheus 配置告警
        • Prometheus 配置文件增加 Alertmanager 配置
        • Prometheus 增加告警规则

Alertmanager 简介

ALERTMANAGER

Alertmanager 处理客户端应用程序(如 Prometheus 服务器)发送的警报。它负责重复数据删除、分组并将它们路由到正确的接收器集成,例如电子邮件、PagerDuty 或 OpsGenie。它还负责静音和抑制警报。

Alertmanager 实现的核心概念

Grouping

  • Grouping categorizes alerts of similar nature into a single notification. This is especially useful during larger outages when many systems fail at once and hundreds to thousands of alerts may be firing simultaneously.
  • 分组将类似性质的警报分类到单个通知中。这在较大规模的中断期间特别有用,因为许多系统同时发生故障,并且可能同时触发数百到数千个警报。

Inhibition

  • Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing.
  • 抑制是一个概念,用于在已触发某些其他警报时抑制某些警报的通知。

Silences

  • Silences are a straightforward way to simply mute alerts for a given time. A silence is configured based on matchers, just like the routing tree. Incoming alerts are checked whether they match all the equality or regular expression matchers of an active silence. If they do, no notifications will be sent out for that alert.
  • 静默是一种在给定时间内简单地将警报静默的简单方法。静默是基于匹配器配置的,就像路由树一样。检查传入警报是否与活动静默的所有相等或正则表达式匹配器匹配。如果他们这样做,则不会针对该警报发送任何通知。

Client behavior

  • The Alertmanager has special requirements for behavior of its client. Those are only relevant for advanced use cases where Prometheus is not used to send alerts.
  • Alertmanager 对其客户端的行为有特殊要求。这些仅与不使用 Prometheus 发送警报的高级用例相关。

High Availability

  • Alertmanager supports configuration to create a cluster for high availability. This can be configured using the --cluster-* flags.

  • Alertmanager 支持配置以创建集群以实现高可用性。这可以使用 --cluster-* 标志进行配置。

  • It’s important not to load balance traffic between Prometheus and its Alertmanagers, but instead, point Prometheus to a list of all Alertmanagers.

  • 重要的是不要在 Prometheus 及其 Alertmanager 之间对流量进行负载均衡,而是将 Prometheus 指向所有 Alertmanager 的列表。

Alertmanager 配置文件

CONFIGURATION

和 Prometheus 一样,Alertmanager 也支持 post 请求来 reload 配置文件,也是 /-/reload

  • github 上的配置文件示例

global

全局配置

global:
  # 定义邮件服务器
  smtp_smarthost: 'localhost:25'
  # 发送邮件的邮件地址
  smtp_from: 'alertmanager@example.org'
  # 发件人名字(具体以邮件服务器为准)
  smtp_auth_username: 'alertmanager'
  # 基于 SMTP 身份验证的,不是平常使用的明文密码,需要从邮箱里面申请
  smtp_auth_password: 'password'
  # SMTP 是否是 tls
  smtp_require_tls: false

templates

邮件报警的内容模板

templates:
  - '/etc/alertmanager/template/*.tmpl'

route

与路由相关的设置允许根据时间配置警报的路由、聚合、限制和静音方式。

route:
  # 依据 label 做分组,例如:cluster=A 和 alertname=LatencyHigh 的多个警报将被批处理到一个组中。
  # 这有效地完全禁用了聚合,按原样传递所有警报。这不太可能是您想要的,除非您的警报量非常低,或者您的上游通知系统执行自己的分组。
  group_by: ['alertname', 'cluster', 'service']

  # 当传入警报创建新的警报组时,请至少等待 "group_wait" 以发送初始通知。
  # 这种方式可以确保您获得同一组的多个警报,这些警报在第一次通知中将另一个警报批处理在一起后不久就开始触发。
  group_wait: 30s

  # 发送第一个通知时,请等待 "group_interval" 以发送一批已开始为该组启动的新警报。
  group_interval: 5m

  # 如果警报已成功发送,请等待 "repeat_interval" 重新发送警报。
  repeat_interval: 3h

  # 默认的接收器
  receiver: team-X-mails

  # 以上所有属性都由所有子路由继承,并且可以在每条路由上进行覆盖。

  # 子路由
  routes:
    # 此路由对警报标签执行正则表达式匹配,以捕获与服务列表相关的警报。
    - matchers:
        - service=~"foo1|foo2|baz"
      receiver: team-X-mails
      # 该服务有一个关键警报的子路由,任何不匹配的警报,即不等于 critical 的,回退到父节点并发送到 "team-X-mails"
      routes:
        - matchers:
            - severity="critical"
          receiver: team-X-pager
    - matchers:
        - service="files"
      receiver: team-Y-mails

      routes:
        - matchers:
            - severity="critical"
          receiver: team-Y-pager

    # 此路由处理来自数据库服务的所有警报。如果没有团队来处理,则默认由 DB 团队处理。
    - matchers:
        - service="database"
      receiver: team-DB-pager
      # 按受影响的数据库对警报进行分组。
      group_by: [alertname, cluster, database]
      routes:
        - matchers:
            - owner="team-X"
          receiver: team-X-pager
          continue: true
        - matchers:
            - owner="team-Y"
          receiver: team-Y-pager

inhibit_rules

当存在与另一组匹配器匹配的警报(源)时,禁止规则会将匹配一组匹配器的警报(目标)静音。目标警报和源警报必须具有 equal 列表中标签名称的相同标签值。

# 抑制规则允许在另一个警报正在触发的情况下使一组警报静音。
# 如果同一警报已经是关键警报,我们将使用此功能来静音任何警告级别的通知。
inhibit_rules:
  - source_matchers: [severity="critical"]
    target_matchers: [severity="warning"]
    # 如果源警报和目标警报中都缺少 "equal" 中列出的所有标签名称,则将应用禁止规则!
    equal: [alertname, cluster, service]

receivers

一个或多个通知集成的命名配置。

receivers:
  - name: 'team-X-mails'
    email_configs:
      - to: 'team-X+alerts@example.org'

  - name: 'team-X-pager'
    email_configs:
      - to: 'team-X+alerts-critical@example.org'
    pagerduty_configs:
      - service_key: <team-X-key>

  - name: 'team-Y-mails'
    email_configs:
      - to: 'team-Y+alerts@example.org'

  - name: 'team-Y-pager'
    pagerduty_configs:
      - service_key: <team-Y-key>

  - name: 'team-DB-pager'
    pagerduty_configs:
      - service_key: <team-DB-key>

Alertmanager 部署

同样,这里是采用 k8s 的方式来部署的,部署的版本是 v0.27.0

创建 cm

smtp 相关的,大家修改成自己的配置就可以了

---
apiVersion: v1
data:
  alertmanager.yml: |
    global:
      resolve_timeout: 5m
      smtp_smarthost: 'localhost:25'
      smtp_from: 'alertmanager@example.org'
      smtp_auth_username: 'alertmanager'
      smtp_auth_password: 'alertmanager'
      smtp_require_tls: false
    templates:
      - '/app/config/email.tmpl'
    receivers:
    - name: default-receiver
      email_configs:
      - to: "imcxsen@163.com"
        html: '{{ template "email.to.html" . }}'
        headers: { Subject: " {{ .CommonAnnotations.summary }}" }
        send_resolved: true
    route:
      group_interval: 15m
      group_wait: 30s
      receiver: default-receiver
      repeat_interval: 15m
      routes:
        - match:
            severity: warning
          receiver: default-receiver
          continue: true
        - match:
            severity: error
          receiver: default-receiver
          continue: true
  email.tmpl: |-
    {{ define "email.to.html" }}
    {{ range .Alerts }}
    ========= {{ .StartsAt.Format "2006-01-02T15:04:05" }} ==========<br>
    告警程序: prometheus_alert <br>
    告警类型: {{ .Labels.alertname }} <br>
    故障主机: {{ .Labels.instance }} <br>
    告警主题: {{ .Annotations.summary }} <br>
    告警详情: {{ .Annotations.description }} <br>
    {{ end }}
    {{ end }}
kind: ConfigMap
metadata:
  labels:
  name: alertmanager-cm
  namespace: monitor

创建 svc

---
apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    app: alertmanager
  name: alertmanager-svc
  namespace: monitor
spec:
  ports:
  - name: http
    protocol: TCP
    port: 9093
  selector:
    app: alertmanager
  type: ClusterIP

创建 sts

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: alertmanager
  name: alertmanager
  namespace: monitor
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alertmanager
  serviceName: alertmanager-svc
  template:
    metadata:
      annotations:
      labels:
        app: alertmanager
    spec:
      containers:
      - args:
        - "--config.file=/app/config/alertmanager.yml"
        - "--storage.path=/alertmanager/data"
        image: prom/alertmanager:v0.27.0
        livenessProbe:
          failureThreshold: 60
          initialDelaySeconds: 5
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: service
          timeoutSeconds: 1
        name: alertmanager
        ports:
        - containerPort: 9093
          name: service
          protocol: TCP
        - containerPort: 8002
          name: cluster
          protocol: TCP
        resources:
          limits:
            cpu: 1000m
            memory: 1024Mi
          requests:
            cpu: 1000m
            memory: 1024Mi
        volumeMounts:
        - mountPath: /app/config
          name: config-volume
      volumes:
      - configMap:
          name: alertmanager-cm
        name: config-volume

Prometheus 配置告警

Prometheus 配置文件增加 Alertmanager 配置

主要增加以下的内容,定义 Prometheus 的告警规则路径和 Alertmanager 的地址,配置完成后 curl -X POST http://ip:port/-/reload 来更新 Prometheus 的配置文件

rule_files:
- /etc/prometheus/rules/*.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets: ["alertmanager-svc.monitor.svc.cluster.local:9093"]
Prometheus 增加告警规则

这里为了方便验证,所以把内存使用率超过 15% 的来触发报警,因为我当前环境,有机器的内存使用率是超过 15%的,这个只需要把 expr 里面的 PromQL 放到 Prometheus 里面执行一下,找到一个均值就可以了,和上面一样,增加了规则文件,也需要 reload 一下 Prometheus 的配置文件

  • 下面定义了一个名字叫 NodeMemoryUsage 的报警
    • for 语句会使 Prometheus 服务等待指定的时间,然后执行查询表达式。
    • labels 语句允许指定额外的标签列表,把它们附加在告警上。我这里暂时没加
    • annotations 语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于报警信息的展示之类的。
  • 一个报警信息在生命周期内有下面 3 种状态:
    • inactive: 表示当前报警信息既不是 firing 状态也不是 pending 状态
    • pending: 表示在设置的阈值时间范围内被激活了
    • firing: 表示超过设置的阈值时间被激活了
groups:
- name: test-rule
  rules:
  - alert: NodeMemoryUsage
    expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 15
    for: 2m
    annotations:
      summary: "{{$labels.instance}}: High Memory usage detected"
      description: "{{$labels.instance}}: Memory usage is above 15% (current value is: {{ $value }}"

查看 Prometheus 的告警状态

在这里插入图片描述

处于 firing 状态,说明报警已经触发,可以查看邮件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627190.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React Native 开发心得分享

有一段时间没更新了&#xff0c;花了点时间研究了下 React Native&#xff08;后续用 RN 简称&#xff09;&#xff0c;同时也用该技术作为我的毕设项目(一个校园社交应用&#xff0c;仿小红书)&#xff0c;经过了这段时间的疯狂折腾&#xff0c;对 RN 生态有了一定的了解&…

3.TCP的三次握手和四次挥手

一、前置知识 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接&#xff08;所谓连接&#xff0c;是指客户端和服务端各自保存一份关于对方的信息&#xff0c;比如ip地址&#xff0c;端口号等&#xff09;。TCP通过三次握手建立一个…

iOS 创建pch文件

1.参考链接&#xff08;xcode8添加方法&#xff0c;之前的跟这个差不多&#xff09;&#xff1a; 参考链接 2.自我总结&#xff1a; &#xff08;1&#xff09;创建pch文件: 注意点&#xff1a;1&#xff09;注意选中所有的targets&#xff08;看图明义&#xff09; 2&…

风电功率预测 | 基于CNN卷积神经网络的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于卷积神经网络(Convolutional Neural Network, CNN)的风电功率预测可以通过以下步骤实现: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数据。 数据预处理:对…

ACM8628 2×41W立体声1×82W单通道数字功放中文寄存器表

ACM8628M是一款国产高度集成、高效率的双通道数字输入功放。供电电压范围在4.5V-26.4V,数字接口电源支持3.3V或1.8V。在8欧负载下&#xff0c;输出功率可以到241W&#xff0c;PBTL模式下单通道可以输出182W1% THDN. 器件介绍见 内置DSP多种音频处理效果ACM8628M-241W立体声…

「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 家居生活类媒体包括多种类型&#xff0c;包括门户网站家居生活消费频道&#xff0c;专业的家居消费生活门户&#xff0c;以及行业媒体&#xff0c;平面媒体&#xff0c;KOL和意见领袖。下…

高通Android 11/12/13 通过包名设置默认launcher

背景&#xff1a;最近在封装供第三应用系统SDK 接口&#xff0c;遇到一个无法通过包名设置主launcher代码坑所以记录下。 涉及类roles.xml # <!---~ see com.android.settings.applications.defaultapps.DefaultHomePreferenceController~ see com.android.settings.appl…

Git 基础使用(2) 分支管理

文章目录 分支概念分支使用查看分支分支创建分支切换分支合并合并冲突分支删除 分支管理快进模式分支策略内容保存错误处理 分支概念 &#xff08;1&#xff09;分支概念 Git分支是指在版本控制系统Git中&#xff0c;用来表示项目的不同工作流程或开发路径的一个重要概念。通过…

海豚调度器如何看工作流是在哪个worker节点执行

用海豚调度器&#xff0c;执行一个工作流时&#xff0c;有时成功&#xff0c;有时失败&#xff0c;怀疑跟worker节点环境配置不一样有关。要怎样看是在哪个worker节点执行&#xff0c;在 海豚调度器 Web UI 中&#xff0c;您可以查看任务实例&#xff0c;里面有一列显示host&a…

从零开始详解OpenCV条形码区域分割

前言 在识别二维码之前&#xff0c;首先要划分出二维码的区域&#xff0c;在本篇文章中将从零开始实现二维码分割的功能&#xff0c;并详细介绍用到的方法。 我们需要处理的图像如下&#xff1a; 完整代码 首先我们先放出完整代码&#xff0c;然后根据整个分割流程介绍用到…

windows 使用 workerman

简单示例 workerman从3.5.3版本开始已经能够同时支持linux系统和windows系统。 1、需要PHP>5.4&#xff0c;并配置好PHP的环境变量。 2、Windows版本的Workerman不依赖任何扩展。 3、安装使用以及使用限制这里。 4、由于Workerman在Windows下有诸多使用限制&#xff0c…

【万字面试题】Redis

文章目录 常见面试题布隆过滤器原理和数据结构&#xff1a;特点和应用场景&#xff1a;缺点和注意事项&#xff1a;在python中使用布隆过滤器 三种数据删除策略LRU (Least Recently Used)工作原理&#xff1a;应用场景&#xff1a; LFU (Least Frequently Used)工作原理&#x…

vs2019 c++中模板 enable_if_t 的使用

&#xff08;1&#xff09; 该模板的定义如下&#xff1a; template <bool _Test, class _Ty void> struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty> struct enable_if<true, _Ty> { // type is _Ty for _Testusing …

OSEK应用模式

1 前言 应用模式&#xff08;Application modes)用于区分不同的场景&#xff0c;以便在系统运行时&#xff0c;组织各自相互独立的OS相关的资源集合&#xff0c;是一种分而治之的思想体现。不同的应用模式是互斥的&#xff0c;即系统当前必须在一种应用模式&#xff08;且只能在…

OV SSL证书的特点

OV SSL证书&#xff0c;全称为Organization Validation SSL Certificate&#xff08;组织验证型SSL证书&#xff09;&#xff0c;是一种中级的SSL证书类型。与仅验证域名所有权的DV&#xff08;Domain Validation&#xff09;证书不同&#xff0c;OV证书在颁发前会执行更加严格…

01.认识HTML及常用标签

目录 URL&#xff08;统一资源定位系统&#xff09; HTML&#xff08;超文本标记语言&#xff09; 1&#xff09;html标签 2&#xff09;head标签 3&#xff09;title标签 4&#xff09;body标签 标签的分类 DTD文档声明 基础标签 1&#xff09;H系列标签 2&#xff09…

C++基础与深度解析 | 语句 | 分支语句 | 循环语句 | 达夫设备

文章目录 一、语句基础二、分支语句1.分支语句--if2.分支语句--switch 三、循环语句1.循环语句--while2.循环语句--do-while3.循环语句--for4.循环语句--基于范围的for循环5.break / continue语句四、语句的综合应用--达夫设备 一、语句基础 语句的常见类别&#xff1a; 表达…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

树莓派|角速度和加速度传感器

角速度传感器和加速度传感器是常见的惯性传感器&#xff0c;常用于测量物体的旋转和线性运动。 角速度传感器&#xff08;Gyroscope&#xff09;用于测量物体绕三个轴&#xff08;X、Y、Z&#xff09;的旋转速度或角速度。它可以提供关于物体在空间中的旋转方向和角度变化的信…

数据结构学习/复习14--归并排序的递归与循环实现/计数排序

一、归并排序 1.递归实现 注意事项&#xff1a;即使排序的数字个数不为2的倍数也可正常分解&#xff0c;其思想没有规定一定要左右数目对称才可合并 注意事项&#xff1a;归并的思想还适用于外排序 2.递归改循环 注意事项&#xff1a;边界处理与非2的n次方倍的处理 版本1&…