监控 Promethus的监控告警Alertmanager、Grafana

news2024/10/7 3:23:36

Promethus的监控告警Alertmanager

Alertmanager 介绍

  • Prometheus的一个组件,用于定义和发送告警通知,内置多种第三方告警通知方式,同时还提供了对Webhook通知的支持
  • 基于警报规则对规则产生的警报进行分组、抑制和路由,并把告警发送给合适的接收端,例如邮件、钉钉或Webhook
  • 在Prometheus中一条告警规则组成
    • 告警名称:用户需要为告警规则命名
    • 告警规则:主要由PromQL进行定义,表示当表达式(PromQL)查询结果持续多长时 间(During)后出发告警
  • 关键特点
    • 分组:将详细的告警信息合并成一个通知,某些情况下,如由于系统宕机导致大量的告警被同时触发
    • 抑制:当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制,避免告警轰炸
    • 静默:根据标签对告警进行静默处理,如果接收到的告警符合静默的配置, Alertmanager则不会发送告警通知

Alertmanager安装

注意:记住这里的地址,后面告警需要配置这个地址

#下载
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-arm64.tar.gz
#解压
tar -zxvf alertmanager-0.27.0.linux-arm64.tar.gz
#重名名
mv alertmanager-0.27.0.linux-amd64  alertmanager

# 进入目录
cd alertmanager

#启动
./alertmanager --config.file=alertmanager.yml

#守护进程方式启动
nohup ./alertmanager --config.file=alertmanager.yml &
  • 访问 http://ip:port , ,比如 http://47.115.61.73:9093/#/alerts

在这里插入图片描述

使用流程
  • 步骤

    • Prometheus的rules.yaml编写告警规则
      • 配置Prometheus,定义在哪些情况下被告警
    • 配置Alertmanager
      • 添加Email、钉钉或者短信接收程序,为告警通知指定目标和通知媒介
    • 建立告警路由
      • 定义告警的路由方式,以便区分和分类告警级别,并为不同的告警目标设定不同的火灾通知方法。
  • 关键配置解读

    • Prometheus的rule.yaml配置文件
groups: # 告警规则组
- name: server-alarm
  rules: #规则,可以配置多个alert告警
  
  - alert: # 告警名称
    expr:  # 告警表达式,基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    for:  # 评估等待时间,可选,用于表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生告警 的状态为pending。
    labels: #自定义标签,允许用户指定要附加到告警上的一组附加标签。
      severity:  # 告警严重程度
    annotations: #用于指定一组附加信息,比如用于描述告警详细信息的文字等
      summary: # 告警摘要
      description: # 告警详细描述

  - alert: "内存告警"
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高内存 使用率!"
      description: "{{$labels.instance}}: 内存使用率在 80% 以上 (当前使用值为:{{ $value }})"

  - alert: "CPU告警"
    expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高CPU 使用率!"
      description: "{{$labels.instance}}: CPU使用率在 80% 以上 (当前使用值为:{{ $value }})"  
  • severity有以下几种常用值

    • critical(严重),用于描述影响系统主要功能甚至导致系统崩溃的情况。
    • warning(警告),用于描述存在异常但不会导致系统崩溃或停止服务的情况。
    • info(信息),用于描述与业务正常运行相对应的正常状态信息。
    • debug(调试),用于描述可以用于排除故障的调试信息。
  • Alertmanageralertmanager.yml配置文件

    • 主要包含两个部分:路由(route) + 接收器(receivers)
      • 告警信息会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器
global:
  smtp_smarthost: 'smtp.126.com:25' # SMTP服务器地址和端口
  smtp_from: 'xxxxx@126.com' # 显示在邮件“发件人”字段中的地址
  smtp_auth_username: 'xxxx@126.com' # STMP认证时使用的用户名
  smtp_auth_password: 'xxxxxx' # SMTP认证时使用的密码,不是密码
  smtp_require_tls: false # SMTP服务器是否需要TLS加密

route:
  receiver: 'email' # 发送告警通知的收件人,和下面的接受者名称匹配
  group_wait: 10s # 在发送前等待各个警报的时间
  group_interval: 30s # 相同警报名称的警报发送间隔
  repeat_interval: 10m # 重复发送警报的时间间隔
  group_by: ['alertname'] # 根据警报名分组告警接收者

# 告警接收者
receivers:
- name: 'email' # 接收者名称
  email_configs:
  - to: 'xxxxxx@qq.com' # 接收告警邮件的收件人

Alertmanager监控告警和邮件通知

需求
  • 应用程序监控,如果应用程序挂了,触发邮件发送开发人员
Prometheus板块配置
  • 配置Prometheus的rule告警规则
#创建配置文件 prometheus程序目录下
touch rules.yml
#配置规则
groups:
- name: server-alarm
  rules:
  - alert: "InstanceDown"
    expr: up == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{ $labels.instance }}"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
  • 配置Prometheus关联Alertmanager地址和rules规则启用
    在这里插入图片描述
  • 动态更新Prometheus配置

注意:Prometheus 需要开启支持热更新

curl -X POST http://localhost:9090/-/reload
Alertmanager板块配置
  • alertmanager.yml 配置文件(如果测试服务是在阿里云,需要将25端口(被禁用)改成其它的)
# 第一个版本
global:
  smtp_smarthost: 'smtp.126.com:465'
  smtp_from: 'xxxxx@126.com'
  smtp_auth_username: 'xxxxx@126.com'
  smtp_auth_password: 'xxxx'
  smtp_require_tls: false

route:
  receiver: 'dingding.webhook'
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 10m
  group_by: ['alertname', 'cluster', 'service']
  routes:
    - receiver: 'dingding.webhook'
      continue: true
    - receiver: 'default-receiver'


receivers:
  - name: 'default-receiver'
    email_configs:
      - to: 'xxxxx@qq.com'
        send_resolved: true

  - name: 'dingding.webhook'
    webhook_configs:
      - url: 'https://oapi.dingtalk.com/robot/send?access_token=xxxx'
        send_resolved: true
# 第二个版本
global:
  smtp_smarthost: 'smtp.126.com:25' # SMTP服务器地址和端口
  smtp_from: 'xxxxx@126.com' # 显示在邮件“发件人”字段中的地址
  smtp_auth_username: 'xxxx@126.com' # STMP认证时使用的用户名
  smtp_auth_password: 'xxxxxx' # SMTP认证时使用的密码,不是密码
  smtp_require_tls: false # SMTP服务器是否需要TLS加密

route:
  receiver: 'email' # 发送告警通知的收件人,和下面的接受者名称匹配
  group_wait: 10s # 在发送前等待各个警报的时间
  group_interval: 30s # 相同警报名称的警报发送间隔
  repeat_interval: 10m # 重复发送警报的时间间隔
  group_by: ['alertname'] # 根据警报名分组告警接收者

# 告警接收者
receivers:
- name: 'email' # 接收者名称
  email_configs:
  - to: 'xxxxxx@qq.com' # 接收告警邮件的收件人
应用和验证步骤
  • 应用
#启动
./alertmanager --config.file=alertmanager.yml

#守护进程方式启动
nohup ./alertmanager --config.file=alertmanager.yml &
  • 验证步骤
    • 停止spring boot程序(停止其他服务都可以)
    • 查看prometheus
    • 查看alertmanager
    • 查看邮件

扩展Alertmanager监控告警和钉钉通知

prometheus-webhook-dingtalk 简介
  • prometheus-webhook-dingtalk是一个开源项目
  • 用于将Prometheus的告警信息通过Webhook的方式发送到钉钉(DingTalk)群聊中
  • 实现告警通知的即时送达与团队协作
  • 该项目作为一个轻量级但功能强大的工具,使得运维人员和开发团队能够直接在常用的通讯平台上接收到监控系统的告警消息,提高响应速度和协作效率
安装 prometheus-webhook-dingtalk
配置config.yml
## Request timeout
# timeout: 5s

## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true

## Customizable templates path
#templates:
#  - contrib/templates/legacy/template.tmpl

## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
#default_message:
#  title: '{{ template "legacy.title" . }}'
#  text: '{{ template "legacy.content" . }}'

## Targets, previously was known as "profiles"
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxx
  • access_token: 从钉钉获取的机器人Webhook地址的access_token
安装
docker run -d --name prometheus-webhook-dingtalk \
-p 8060:8060 \
-v /usr/local/software/config/prometheus-webhook-dingtalk/config.yml:/etc/prometheus-webhook-dingtalk/config.yml \
timonwong/prometheus-webhook-dingtalk
  • /usr/local/software/config/prometheus-webhook-dingtalk/config.yml 修改为配置 config.yml 的路径挂载到容器
修改alertmanageralertmanager.yml配置
global:
  resolve_timeout: 5m
route:
  group_by:  ['alertname']
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 1m
  receiver: 'dingding.webhook'
receivers:
  - name: 'dingding.webhook'
    webhook_configs:
      - url: 'http://47.115.61.73:8060/dingtalk/webhook1/send'
        send_resolved: true

  • 修改47.115.61.73到实际部署prometheus-webhook-dingtalk服务的地址
  • 重新启动alertmanager
  • 按照应用和验证步骤进行验证
  • 教程效果如下
    在这里插入图片描述

Grafana+钉钉群告警机器人

前言

  • Alertmanager告警和Grafana告警功能,两个组件各有优缺点
  • Grafana更适合于小规模或简单的监控系统,而Alertmanager更适合于大规模或更复杂的告警处理场景
  • 如果需要高级告警规则和复杂的告警逻辑,请使用Alertmanager
  • 如果仅需要基本的告警功能并且已经使用Grafana进行数据可视化,则可以使用Grafana作为告警处理工具

Alertmanager、Grafana对比

  • Grafana
    • 优点
      • 简单易用,Grafana的告警规则配置界面直观易懂,可以方便地设置告警的触发条件、持续时间和通知方式等
      • 定制性强,Grafana的告警规则支持自定义查询和指标,使得监控系统的告警范围更加广泛
      • 能够对告警事件进行统计和可视化处理,在Grafana中可以方便地对告警事件进行统计,同时还可以进行实况监控和定期报告等操作
    • 缺点
      • 不支持高级告警逻辑。Grafana只能识别基于简单算术或表达式的逻辑,无法支持更复杂的逻辑
      • 设计初衷不是作为告警处理工具,Grafana更多地是作为数据可视化工具
      • 核心功能是数据分析和展示,并不是专门的告警处理工具,因此不太适合大规模或复杂的告警处理场景
      • 可扩展性不够,无法满足比较复杂、高级的告警规则设计
  • Alertmanager
    • 优点
      • 提供高级告警逻辑功能,支持许多常用的高级告警逻辑,如静默、抑制和聚合等
      • 支持多通道分发告警,支持将告警通知分发到多个通道,如电子邮件,短信等,能够满足不同场景下的需求
      • 可靠性高,提供多种保护机制,如去重、失败重试和自动恢复,确保告警能够可靠地传送给相应的接收方
      • 支持高度可扩展性,可以与各种 monitoring system 集成使告警触发进一步个性
    • 缺点
      • 复杂和难以部署,Alertmanager的配置比Grafana更复杂,需要深入了解监控系统和告警系统
      • 学习成本高,Alertmanager需要学习更多的知识和技能才能掌握
      • 不善于定义静态监控告警,对于 Dashboard 监控告警,它可能不太适合

需求

  • 使用Grafana的alert告警模块,内存告警
  • 配置自动告警机器人,如果内存超过一定范围,推送到钉钉群

实现步骤

  • 创建钉钉告警机器人,获取webhook地址

    • webhook地址:https://oapi.dingtalk.com/robot/send?access_token=xxxx
    • Postman 验证消息推送是否准确
    • 钉钉机器人相关地址:https://open.dingtalk.com/document/robots/custom-robot-access
  • Grafana新建推送通道
    在这里插入图片描述

  • 面板Panel配置告警规则

在这里插入图片描述

告警流程验证

  • 停止应用服务器
  • 查看prometheus相关监控(可以停止Alert Manager)
  • 查看Grafana相关告警
  • 查看钉钉群机器人是否推送(记得配置ip白名单)
    在这里插入图片描述

问题修复

  • 点击群告警信息没法直接进到告警页面
  • 解决方案
    • 配置默认跳转路径,使用root用户进入容器修改配置文件
docker exec -u 0 -it #{容器id/容器名称} /bin/bash
#使用该-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器.root(id = 0)是容器中的默认用户
- 编辑配置文件,修改为Grafana的部署地址,然后重启

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Nginx基础概念和常用操作

文章目录 1. 安装、启动、连接2. 快速尝试部署网站3. 配置文件1. nginx.conf全局配置事件模块HTTP 模块性能优化建议 2. default.confserver 块基本设置日志设置根路径设置 4. 反向代理1. 模拟3个Web2. 链接 5. 负载均衡1. 加权轮询,Weighted Round Robin2. 最少连接…

【LeetCode刷题】232.用栈实现队列

目录 题目链接 图解思路 整体结构 实现过程 入队列 出队列 实现代码 MyQueue.h MyQueue.c stack.h stack.c test.c 题目链接 232. 用栈实现队列 - 力扣(LeetCode) 图解思路 整体结构 实现过程 入队列 插入数据时,插入到ist。…

SpringBoot使用AutoConfigure实现依赖库自动导入配置

我们知道导入配置有两种,一种是Value,一种是ConfigurationProperties,将对应的类标记为Component即可导入。但是被注解标识的类创建Bean有一个前提,只对启动类所在的包路径下的所有带有Component等注解的类才会创建Bean。如果我们…

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息;

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息; 智慧工地是指运用信息化手段,通过三维设计平台对工程项目进行精确设计和施工…

Java程序之素数问题

题目: 判断101-200之间有多少个素数,并输出所有素数。 程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。素数被利用在密码学上&#…

Kubernetes排错(七)-Pod 状态一直 ContainerCreating

查看 Pod 事件 $ kubectl describe pod apigateway-6dc48bf8b6-l8xrw -n cn-staging 异常原因 1)no space left on device ... Events:Type Reason Age From Message---- ------ …

移远通信发布高性价比智能模组SC200P系列,赋能金融支付等行业智慧升级

近日,全球领先的物联网整体解决方案供应商移远通信宣布,为满足智慧金融、智能家居、智能穿戴、工业手持等消费和工业应用对高速率、多媒体、长生命周期等终端性能的需求,其正式推出基于紫光展锐UNISOC 7861平台的全新8核4G智能模组SC200P系列…

TypedDict 解析

TypedDict 解析 文章目录 TypedDict 解析1. 类型安全性2. 可读性3. 可维护性TypedDict 的解决方案没有 TypedDict 会发生什么?使用 TypedDict 的优势 TypedDict 应用场景1. 配置文件解析2. API 数据解析3. 数据库记录表示4. 表单数据验证5. 大型团队协作6. 静态类型…

数据可视化在智慧社区中的关键应用

数据可视化能够在智慧社区中发挥重要作用,通过直观和交互的方式将复杂的数据呈现出来,提升社区管理效率,优化居民生活体验,促进社区的可持续发展。在智慧社区中,数据可视化的应用涵盖了安全、环境、能源、交通和公共服…

AI播客下载:Eye on AI(AI深度洞察)

"Eye on A.I." 是一档双周播客节目,由长期担任《纽约时报》记者的 Craig S. Smith 主持。在每一集中,Craig 都会与在人工智能领域产生影响的人们交谈。该播客的目的是将渐进的进步置于更广阔的背景中,并考虑发展中的技术的全球影响…

【React】登录-封装Token的存取删方法--共享复用

在token.js中 // 封装存取方法const TOKENKEY token_keyfunction setToken (token) {return localStorage.setItem(TOKENKEY, token) }function getToken () {return localStorage.getItem(TOKENKEY) }function clearToken () {return localStorage.removeItem(TOKENKEY) }ex…

tensorRT C++使用pt转engine模型进行推理

目录 1. 前言2. 模型转换3. 修改Binding4. 修改后处理 1. 前言 本文不讲tensorRT的推理流程,因为这种文章很多,这里着重讲从标准yolov5的tensort推理代码(模型转pt->wts->engine)改造成TPH-yolov5(pt->onnx-…

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

XSS漏洞实验

本篇为xss漏洞实验练习,练习网址来源于网络 练习网址:XSS平台|CTF欢迎来到XSS挑战|XSS之旅|XSS测试 一、前置说明 在测试过程中,有哪些东西是我们可以利用来猜测与判断的: 网页页面的变化;审查网页元素;查…

奇瑞复活经典路虎!中国技术,英国车标,卖向全球

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 6月19日,奇瑞和捷豹路虎宣布签署战略合作意向书,将复活“Freelander神行者”品牌。 小编当课代表,做个简单总结: 英国品牌,中国技术&#xf…

数组 (java)

文章目录 一维数组静态初始化动态初始化 二维数组静态初始化动态初始化 数组参数传递可变参数关于 main 方法的形参 argsArray 工具类sort 中的 comparable 和 comparatorcomparator 比较器排序comparable 自然排序 一维数组 线性结构 静态初始化 第一种:int[] a…

基于uni-app和图鸟UI开发上门服务小程序

一、技术栈选择 uni-app:我们选择了uni-app作为开发框架,因为它基于Vue.js,允许我们编写一次代码,发布到多个平台,包括iOS、Android、Web以及各种小程序。uni-app的丰富组件库、高效的状态管理以及便捷的预览调试功能&…

无霍尔BLDC驱动

目前主要的无霍尔控制方案是基于反电势检测信 息判断换相点,本文研究反电势在 PWM - OFF 点的检 测方案确定换相点。 1. 反电动势检测方案 BLDC 的模型做等效,将线圈阻抗看成是一个 线性电阻和一个储能电感的等效,其等效电路图如图 1所示。 电机三相绕组输出端电压的电压…

【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明

💬 写在前面:所有编程语言都是通过归纳法定义的。因此,虽然编程语言本身是有限的,但用该语言编写的程序数量是没有限制的,本章将学习编程语言研究中最基本的归纳法。本章我们继续讲解归纳法,介绍归纳假设和…

issues.sonatype.org网站废弃,Maven仓库账号被废弃问题解决

问题起因: 今天自己的项目发布了一个新版本,打算通过GitHub流水线直接推送至Maven中央仓库,结果发现报错 401,说我的账号密码认证失败。我充满了疑惑我寻思难度我的号被盗掉了吗。于是我打开Nexus Repository Manager尝试登录账号…