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

news2024/12/26 22:31:49

文章目录

    • @[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 状态,说明报警已经触发,可以查看邮件

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

010.理解异步性

异步消息传递是响应式系统的一个关键特性。但到底是什么异步性&#xff0c;为什么它对响应式应用程序如此重要?我们的人生注定在许多异步任务中。你可能没有意识到&#xff0c;但你的日常活动如果它们本质上不是异步的&#xff0c;那就太烦人了。要理解什么是异步&#xff0c;…

评价决策类-层次分析法

师从江北 问题引出 归一化处理&#xff1a;指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同&#xff0c;所以要加上一个权重 如何科学的确定权重&#xff0c;就要用到层次分析法&#xff08;AHP&#xff09; 模型原理 建立递阶层次结构模…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序&#xff0c;第一段程序要求如下&#xff1a; 判读字符串里面是否含有特殊字符&#xff0c;这里说的特殊字符不包括键盘上能够输入的字符&#xff0c;如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…

数据结构——二叉树知识点详解!

引言&#xff1a;本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多&#xff0c;希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页&#xff1a;计信猫 目录 一&#xff0…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 &#xff08;1&#xff09;Express定义&#xff1a; Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&#xff0c;和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

微信小程序快速开发-基础内容(内容真的又多又干货)

目录 实现横向布局效果 实现滚动效果 实现轮播图效果 实现文本长按选中复制效果 渲染 HTML 标签 按钮组件的使用效果 图片组件的使用效果 Mustache 语法 动态绑定内容&#xff08;定义变量&#xff0c;渲染变量&#xff09; 动态绑定属性&#xff08;将属性定义为变量…

2024年中国国际厨卫家居展览会(上海KIB厨卫展)

中国国际厨卫家居博览会&#xff08;KIB&#xff09;由中国五金制品协会、中国国际贸易促进委员会轻工行业分会、北京奥维云网大数据科技股份有限公司主办。从最初的“中国国际橱柜、厨房卫浴产品与技术博览会(CIKB&#xff09;”&#xff0c;到2001年与中国国际五金展&#xf…

LSTM与GAN创新结合!模型性能起飞,准确率超98%

今天来聊一个深度学习领域非常具有创新性的研究方向&#xff1a;LSTM结合GAN。 LSTM擅长处理和记忆长期的时间依赖关系&#xff0c;而GAN可以学习复杂的数据分布并生成逼真的数据样本。通过充分结合两者的优势&#xff0c;我们可以增强模型对复杂数据的处理能力&#xff0c;提…

scanf读取标准输入

内容 scanf函数的原理 多种数据类型混合输入 常用的数据输入/输出函数 程序员可以给程序输入数据&#xff0c;程序处理后会返回一个输出。C语言通过函数库读取标准输入&#xff0c;然后通过对应函数处理将结果打印到屏幕上&#xff0c;printf函数可以将结果打印到屏幕上。下…

英语学习笔记14——What color‘s your ... ?

What color’s your … ? 你的 …… 是什么颜色的&#xff1f; 词汇 Vocabulary case n. 箱子【封闭的】 相关&#xff1a;box n. 箱子【开口的】    bookcase n. 书架 补充&#xff1a;case n. 案件&#xff0c;案例 口语&#xff1a;It’s a small case.    小意思&…

稚晖君独家撰文:具身智能即将为通用机器人补全最后一块拼图

具身智能新纪元。 *本文为稚晖君独家供稿,「甲子光年」经智元机器人授权发布。稚晖君本名彭志辉,先后任职OPPO、华为,现为智元机器人CTO、首席架构师。 在ChatGPT之后,又一个大模型概念火了——具身智能(Embodied AI)。 在学术界,图灵奖得主、上海期智研究院院长姚期…

【数据结构】堆(超详细)

文章目录 前言堆的概念及结构堆的实现堆的向下调整算法&#xff08;建小堆为例&#xff09;堆的向上调整算法&#xff08;建小堆为例&#xff09;堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码&#xff08;包括测试代码&a…

解决kali Linux2024无法获取动态IPv4地址(DHCP)解决方案

用root用户启动终端 进入根目录&#xff0c;选择配置文件 cd到根目录下/../etc/network找到interfaces文件 编辑interfaces文件 vi interfaces&#xff0c;编辑interfaces文件 输入如下命令 打开虚拟网络编辑器 选择虚拟机选项卡&#xff0c;编辑&#xff0c;打开虚拟网络编…

【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解

我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在应用层。 前面写的套接字接口都是传输层经过对 UDP 和 TCP 数据发送能力的包装&#xff0c;以文件的形式呈现给我们&#xff0c;让我们可以进行应用层编程。换而言之&#xff0c…

50.乐理基础-拍号的类型-混合拍子

混合拍子的定义&#xff1a; 1.由不同的单拍子组合起来的&#xff0c;如图1。 2.因为组合顺序有多种可能&#xff0c;所以次强拍的位置也有多种可能&#xff0c;如图3。 图1&#xff1a;四二拍是单拍子&#xff0c;四三拍也是单拍子&#xff0c;四二拍 与 四三拍就是 不同的单拍…

网络游戏同步技术六:若干问题探讨

本文探讨网络同步的几个问题。 王者荣耀使用帧同步明智吗&#xff1f; 这个很难评&#xff0c;成王败寇&#xff0c;它成功了&#xff0c;它就是明智的。但是帧同步带来的心智负担还是很重的&#xff0c;他们的分享里面也提到他们花了很大的功夫去解决不一致问题。 个人更喜欢…

Sketch总结

sketch禁用了lineGap https://www.sketch.com/docs/designing/text/ http://www.sketchcn.com/sketch-chinese-user-manual.html https://github.com/sketch-hq/sketch-document https://developer.sketch.com/file-format/ https://animaapp.github.io/sketch-web-viewer/ htt…

定时发圈操作介绍

1、登陆已有的账号&#xff0c;点击到"朋友圈"功能 2、选择要发圈的微信号&#xff0c;编辑发圈的文案内容 3、自定义想要的时间点 4、点击"立即发送" 5、可进行跟圈

校园防欺凌平台

校园霸凌事件很难被发现&#xff0c;发现者又可能迫于威胁而不敢告发&#xff0c;被霸凌者又因各种原因而选择忍耐&#xff0c;所以&#xff0c;如果能够在发生校园霸凌的时候&#xff0c;做出及时的预警&#xff0c;也许能够拯救挽回无数个家庭。本平台结合防欺凌设备&#xf…

Transformer - Self-Attention层的复杂度的计算

Transformer - Self-Attention层的复杂度的计算 flyfish 矩阵的维度 下面矩阵的维度是32即 3行&#xff0c;2列 6,10等都是矩阵里的元素 如果矩阵A的列数与矩阵B的行数相同&#xff0c;那么这两个矩阵可以相乘。即&#xff0c;若A是一个mn矩阵&#xff0c;B是一个np矩阵&am…