运维别卷系列 - 云原生监控平台 之 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 是否是 tlssmtp_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-mailsroutes:- 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-pagercontinue: 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: 5msmtp_smarthost: 'localhost:25'smtp_from: 'alertmanager@example.org'smtp_auth_username: 'alertmanager'smtp_auth_password: 'alertmanager'smtp_require_tls: falsetemplates:- '/app/config/email.tmpl'receivers:- name: default-receiveremail_configs:- to: "imcxsen@163.com"html: '{{ template "email.to.html" . }}'headers: { Subject: " {{ .CommonAnnotations.summary }}" }send_resolved: trueroute:group_interval: 15mgroup_wait: 30sreceiver: default-receiverrepeat_interval: 15mroutes:- match:severity: warningreceiver: default-receivercontinue: true- match:severity: errorreceiver: default-receivercontinue: trueemail.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-cmnamespace: monitor

创建 svc

---
apiVersion: v1
kind: Service
metadata:annotations:labels:app: alertmanagername: alertmanager-svcnamespace: monitor
spec:ports:- name: httpprotocol: TCPport: 9093selector:app: alertmanagertype: ClusterIP

创建 sts

---
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: alertmanagername: alertmanagernamespace: monitor
spec:replicas: 1selector:matchLabels:app: alertmanagerserviceName: alertmanager-svctemplate:metadata:annotations:labels:app: alertmanagerspec:containers:- args:- "--config.file=/app/config/alertmanager.yml"- "--storage.path=/alertmanager/data"image: prom/alertmanager:v0.27.0livenessProbe:failureThreshold: 60initialDelaySeconds: 5periodSeconds: 10successThreshold: 1tcpSocket:port: servicetimeoutSeconds: 1name: alertmanagerports:- containerPort: 9093name: serviceprotocol: TCP- containerPort: 8002name: clusterprotocol: TCPresources:limits:cpu: 1000mmemory: 1024Mirequests:cpu: 1000mmemory: 1024MivolumeMounts:- mountPath: /app/configname: config-volumevolumes:- configMap:name: alertmanager-cmname: 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-rulerules:- alert: NodeMemoryUsageexpr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 15for: 2mannotations:summary: "{{$labels.instance}}: High Memory usage detected"description: "{{$labels.instance}}: Memory usage is above 15% (current value is: {{ $value }}"

查看 Prometheus 的告警状态

在这里插入图片描述

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式单片机笔试题

DC-DC 和 LDO两者有何区别&#xff1f; DC-DC转换器&#xff08;直流-直流转换器&#xff09;和LDO&#xff08;低压差线性稳压器&#xff09;都是用于电源管理的设备&#xff0c;但它们在原理和特性上有一些显著的区别&#xff1a; 原理&#xff1a; DC-DC转换器通过改变输…

Android ndk获取手机内部存储卡的根目录方法

如下所示&#xff1a; 代码语言&#xff1a;javascript jclass envcls env- FindClass("android/os/Environment"); //获得类引用if (envcls nullptr) return 0;//找到对应的类&#xff0c;该类是静态的返回值是FilejmethodID id env- GetStaticMethodID(envcls,…

IP代理如何帮助SEO进行优化?

IP代理在SEO优化中扮演着重要的角色&#xff0c;它通过多种方式帮助提升网站的搜索排名和可见性。以下是IP代理如何帮助SEO进行优化的详细阐述&#xff1a; 第一点&#xff0c;数据采集与分析&#xff1a;在SEO过程中&#xff0c;大量的数据是必不可少的。通过使用IP代理&…

Pytorch学习笔记——Conv2d与Tensorboard的结合使用

文章目录 一、两者介绍及结合后的优势1、Conv2d简要介绍2、TensorBoard简要介绍3、结合后的优势 二、对之前代码进行改造1、引入相关包2、加载测试数据3、创建神经网络4、将信息写入Tensorboard 三、进行训练&#xff0c;启动Tensorboard 一、两者介绍及结合后的优势 1、Conv2…

数字人解决方案——ID-Animator可保持角色一致生成视频动画

一、引 言 个性化或自定义生成在图像和视频生成领域是一个不断发展的研究方向&#xff0c;尤其是在创建与特定身份或风格一致的内容方面。您提到的挑战和解决方案为这一领域提供了有价值的见解&#xff1a; 训练成本高&#xff1a;这是一个普遍问题&#xff0c;因为个性化生成…

IT行业现状与未来趋势分析

IT行业现状与未来趋势显示出持续的活力和变革&#xff0c;以下是上大学网&#xff08;www.sdaxue.com&#xff09;关于IT行业现状与未来趋势分析&#xff0c;供大家参考。 当前现状&#xff1a; 市场需求持续增长&#xff1a;随着信息时代的深入发展&#xff0c;各行各业对信息…

AI办公自动化:用kimi批量把word转换成txt文本

在Kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\aword 读取里面docx格式的word文档&#xff0c; 提取word文档中的第一行文字作为txt文本文档的标题…

安装部署达梦数据库DM8

创建用户所在的组&#xff0c;命令如下&#xff1a; groupadd dinstall -g 2001 创建用户&#xff0c;命令如下&#xff1a; useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba 修改用户密码&#xff0c;命令如下&#xff1a; passwd dmdba 修改文件打开…

精准追踪,高效分析——Xinstall应用数据分析平台

在当前的移动互联网时代&#xff0c;App应用的数量与日俱增&#xff0c;如何从这些应用中脱颖而出&#xff0c;成为开发者和广告主们亟待解决的问题。而在这个问题中&#xff0c;数据无疑是一把关键的钥匙。今天&#xff0c;我们要介绍的就是国内专业的App全渠道统计服务商——…

TiDB学习2:TiDB Sever

目录 1. TiDB Server架构 2. sql语句的解析和编译 2.1 Parse ​编辑 2.2 compile 3. 行转化为KV对(聚簇表) ​编辑4. SQL 读写相关模块 4.1 DistSQL(复杂查询) 4.2 KV(简单查询) 5. 在线DDL相关模块 6. GC机制与相关模块 7. TiDB Server的缓存 8. 热点小表缓存 9. …

分布式搜索-elaticsearch基础 安装es

这里是在虚拟机的Linux系统里安装es的教程: 1.创建网络 在Finashell终端输入指令 docker network create es-net 2.将es.tar安装包放入tmp的目录下 输入指令加载镜像&#xff1a;docker load -i es.tar 3.再运行docker 命令 docker run -d \--name es \-e "ES_JAVA_O…

先有JVM还是先有垃圾回收器?

是先有垃圾回收器再有JVM呢&#xff0c;还是先有JVM再有垃圾回收器呢&#xff1f;或者是先有垃圾回收再有JVM呢&#xff1f;历史上还真是垃圾回收更早面世&#xff0c;垃圾回收最早起源于1960年诞生的LISP语言&#xff0c;Java只是支持垃圾回收的其中一种。下面我们就来刨析刨析…