prometheus实战之三:告警规则

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog...

本篇概览

  • 本文是《prometheus实战》系列的第三篇,一起来学习prometheus的告警功能,如下图所示,整个告警功能分为规则和通知两部分,本篇是有关规则的详细介绍,至于命中规则后如何向外部发出通知是下一篇的内容
  • 本篇任务:如果指定机器的CPU使用率超过50%就告警

配置告警规则的基本流程

  • 新增告警规则的操作有以下四步
graph TD A(1. 新建规则配置文件) --> B(2. 编写规则) --> C(3. 配置prometheus,使用新规则配置文件) --> D(4. 重启prometheus,使规则生效)

配置告警规则

  • 每个告警规则有五部分组成
  1. 名称(alert)
  2. 触发条件(expr),这是个PromQL表达式,例如CPU使用率超过50%,在触发条件被满足之前,告警的状态都是Inactive
  3. 持续时间(for),例如CPU使用率超过50%的时间持续30秒,在30秒之内,此告警状态为pending,超过30秒就进入firing状态
  4. 标签(labels),给告警打上标签,在使用时可以根据标签定位到指定告警
  5. 注解(annotations),对告警的描述,这些内容可以用来详明告警时刻的详细情况
  • 接下来配置一个规则并验证其效果
  • 首先用prometheus账号SSH登录prometheus服务器
  • 新建告警规则文件,我这里完整路径是/home/prometheus/prometheus/rules/cpu.rules,内容如下,每个参数都有详细说明
yml 复制代码
# 告警规则分组,每一个组下有多个告警规则
groups:
# 组名
- name: cpuAlertGroup
  # 告警规则数组
  rules:
  # 下面是一个具体的告警规则,名为hostCPUUsageTooHigh
  - alert: hostCPUUsageTooHigh
    # 基于PromQL的具体规则,这里是CPU使用率高于50%
    expr: (1 - sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance) ) * 100 > 50
    # 持续时间,实际情况满足expr后,规则从inactive
    for: 30s
    # 给规则自身设置标签
    labels:
      biz_type: cpu_usage
    annotations:
      # 告警内容摘要,可以用表达式获取变量的值
      summary: "Instance {{ $labels.instance }} CPU usgae high"
      # 告警内容详情,可以用表达式获取变量的值
      description: "{{ $labels.instance }} CPU usage above 50% (current : {{ $value }})"
  • 然后打开prometheus的配置文件prometheus.yml,通过配置rule_files参数的值,告诉prometheus在何处加载告警规则配置文件,具体配置如下图
  • 重启prometheus服务(prometheus账号操作)
shell 复制代码
systemctl restart prometheus
  • 打开prometheus的web UI,如下图,可以看到告警规则已加载成功
  • 告警的三种状态:Incative、Pending、Firing,具体的关系,我这边画了个草图
  • 配置完成,可以验证告警效果了

触发告警

  • 由于这里配置的是CPU告警,接下来就想办法让应用服务器的CPU升高,这里继续用ffmpeg对视频文件转码,参考命令如下
shell 复制代码
~/bin/ffmpeg -i ~/videos/4kh264.mp4 -c:v libx265 -vtag hvc1 -c:a copy ./output.mp4
  • CPU使用率开始上涨,下图是还未达到阈值时的数据

  • 此刻告警依然是inactive,未被触发

  • 等到CPU利用率超过阈值的时候,应用服务器的实际情况如下图

  • 再看prometheus的web UI,表达式显示也是超过了阈值,由于未满30秒,并未触发真正的告警(Firing),而是进入临时的Pending状态,此时annonation的内容中,配置的哪些变量已经被真实的值替换,显然,这样的内容可以帮我们定位到具体的故障信息

  • CPU使用率持续30秒都大于50%的时候,此告警进入Firing状态,如果配置了告警通知,此刻已触出发了告警通知(这部分下一篇会实现)

  • 至此,常规告警规则的编写和使用的操作已全部完成,接下来将曾经遇到的问题列出,帮大家跳过小坑

问题记录

  • 告警规则的label名不能用减号,但是可以用下划线
  • 下图这样写会导致prometheus启动失败
  • 可以这样写
  • 咱们熟悉了告警规则,接下来就要进军告警通知了,毕竟prometheus产生的告警需要第一时间让相关人员感知到,下一篇的alertmanager就承担着这份重任

欢迎关注掘金:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

相关推荐
mzlogin10 分钟前
Java|FreeMarker 复用 layout
java·后端·freemarker
MrHuang96518 分钟前
【创建线程的四种方式】
后端
双向3321 分钟前
Python 多线程日志错乱:logging.Handler 的并发问题
后端
用户9924410315624 分钟前
从秒杀系统到Serverless:我在分布式架构优化路上踩过的那些坑
后端
AAA修煤气灶刘哥24 分钟前
别再懵注解!从 JDK 到 SpringBoot,这篇 “代码贴标签” 攻略超下饭
java·后端·代码规范
IT_陈寒34 分钟前
Vite 3.0 性能飞跃的5个关键优化点,让构建速度提升200%!
前端·人工智能·后端
fat house cat_1 小时前
【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
java·后端·spring
武子康2 小时前
大数据-82 Spark 集群架构与部署模式:核心组件、资源管理与调优
大数据·后端·spark
BingoGo2 小时前
PHP 并不慢 你的架构才是瓶颈 大规模性能优化实战
后端·php
陈随易2 小时前
改变世界的编程语言MoonBit:背景知识速览
前端·后端·程序员