惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
P
Privacy International News Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
NISL@THU
NISL@THU
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
GbyAI
GbyAI
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
N
Netflix TechBlog - Medium
S
Security Affairs
Spread Privacy
Spread Privacy
罗磊的独立博客
腾讯CDC
MyScale Blog
MyScale Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 热门话题
The Cloudflare Blog
L
LangChain Blog
博客园_首页
H
Hacker News: Front Page
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
SecWiki News
SecWiki News
A
Arctic Wolf
爱范儿
爱范儿
Google Online Security Blog
Google Online Security Blog
T
Threat Research - Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
The GitHub Blog
The GitHub Blog
Cyberwarzone
Cyberwarzone
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
T
Tailwind CSS Blog
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
MongoDB | Blog
MongoDB | Blog
D
Docker

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
【监控报警体系建设】监控标准与最佳实践
无所事事O_o · 2026-05-08 · via 博客园_首页

项目监控标准

在生产项目运行过程中,可能会遭遇各种问题。而一个问题的影响程度与其发现时间密切相关。因此,我梳理并总结了一套生产项目应具备的完整监控标准。

一、监控类型明确

  1. timer类监控‌:此类监控包含耗时和计数两种属性,涵盖tp50、tp90、tp99、max以及tps等指标。
  2. counter类监控‌:仅具备计数功能的监控类型,主要用于统计tps(每秒事务数)。
  3. gauge类监控‌:定时记录数值的监控类型,适用于需要周期性捕捉数据波动的场景。

二、必备监控项

(一)项目出入口监控

  1. 对外接口监控‌:项目对外提供的http接口、dubbo接口,应配置timer类监控,以精确捕捉接口响应时间及吞吐量。
  2. 消息消费监控‌:
    • 若消费线程内处理消息,则加timer类监控,以衡量处理耗时。
    • 若不在消费线程内处理,则加counter类监控,仅统计消息消费次数。
  3. 外部调用监控‌:项目调用的其他项目接口,包括http接口、dubbo接口、redis操作、数据库访问、发送mq等,均需加timer类监控,确保外部调用性能可控。
  4. websocket接口监控‌:订阅的websocket接口,接收消息量应加counter类监控,以监控消息接收频率。

(二)项目内存缓存监控

  1. 无限内存队列‌:队列大小应使用gauge类监控,实时反映队列内存占用情况。
  2. 无限大小缓存‌:如guava缓存等,同样适用gauge类监控,确保缓存使用情况清晰可见。

(三)业务监控

  1. 定时任务监控‌:不可中断的定时任务,或有一定间隔时间的任务,应增加执行时间、执行次数及间隔时间的监控,采用timer类监控。
  2. 重要接口成功率‌:重要接口的成功率应使用counter类监控,确保接口稳定性。

三、可选监控项

  1. 缓存命中率‌:使用缓存时,可分别加命中和不命中的counter监控,以评估缓存效率。
  2. 处理流程分支命中率‌:处理流程的分支可分别加命中次数监控,采用counter类监控,优化流程设计。
  3. 消息消费延迟监控‌:消费mq时,可加消息的消费延迟和处理延迟监控,采用timer类监控,确保消息处理及时性。
  4. 内置系统监控‌:包括jvm、系统、数据库连接池等内置监控,可根据项目需求选择性配置。

四、不推荐监控项

  1. 数值差别过大的监控‌:将数值差别过大的监控项放在一起,会导致数值小的数据异常时,在图表上难以体现,影响监控效果。
  2. 监控数据过多‌:监控数据过多时,图表上会密密麻麻地布满线条,难以分辨个别数据的变化趋势。
  3. 不必要的细分监控‌:对于不需要细分的监控项,只做一个监控即可。例如,下单接口的耗时监控,无需区分细节参数,避免监控冗余。

2.grafana监控配置标准(以下内容受版本影响较大,仅供参考)

timer类型

如果监控类型是timer,则需要配置avg,tp50,tp90,tp99,tps,在同一个图中,左边y轴为耗时,右边y轴为次数
假设监控的key是GET__api_v1_order则配置如下

// 监控方法耗时的平均值
avg(irate(POST__api_v1_order_seconds_sum[30s])/irate(POST__api_v1_order_seconds_count[30s]))
// tp50,tp90,tp99
max by (quantile)(POST__api_v1_order_seconds)
// 最大值
max(GET__api_v1_order_seconds_max)
// 调用速率,tps
sum(irate(GET__api_v1_order_seconds_count[30s]))

如果是counter类型的监控则只有tps

最终效果图

  • 左边y轴是耗时,右边y轴是tps次数,点击下面指标可单独查看
    image

具体配置方法

  • 平均值和tp50,tp90和tp99配置
    image

  • 最大值和tps配置
    image

  • 将tps的值指定到右边Y轴
    image


image

image

  • 将左侧Y轴的单位指定为秒,会自动换算成毫秒或其他单位
    image

单位选择

  • 次数类的单位不用配置
  • 时间类的单位在time→second(s)
  • 字节类的单位在data→bytes
  • 百分比的单位在Msci→percent(0-1)

监控分组

将重要和关键的监控单独分组
image

3.比较有用的内置函数

函数 说明 示例
sum(key) 求和 -
min(key) 最小 -
max(key) 最大 -
avg(key) 平均 -
count(key) 统计 -
bottomk(num,key) 最小的k个 同下
topk(num,key) 样本值最大的k个元素 topk(3,key),最大的3个
topk(1,etf_receive_delay_seconds{quantile="0.99"})
这个监控项中最大的一个
quantile(num,key) 分位数
num是一个介于0到1之间的值,表示要计算的分位数。
例如,要计算中位数(第50%分位数),分位数的值为0.5。
如果要计算第90%分位数,则分位数的值为0.9。
quantile(0.9, my_time_series)
统计tp90
rate(key)
irate(key)
irate和rate都会用于计算某个指标在一定时间间隔内的变化速率。就是tps,推荐使用irate
- irate取的是在指定时间范围内的最近两个数据点来算速率;
- irate适合快速变化的计数器(counter)
- rate取的是在指定时间范围内的所有数据点,算出一组速率,然后取平均值作为结果。
- rate适合缓慢变化的计数器(counter)
sum(irate(POST__api_v1_order_seconds_count[30s]))
统计请求数的tps,并汇总求和
increase(key) 获取区间向量中的第一个和最后一个样本并返回其增长量
它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。
等同于时间范围内秒数 * rate()
increase(task_recon_insert_record_seconds_count[1m])
1分钟内的增长值
... by(tag,tag)(key) 分组统计,...可以替换为任意运算函数,比如max by,sum by,avg by sum by(uri,status)(irate(http_server_requests_seconds_count{job="etf"}[30s]))
按照uri和status两种tag分别求和统计http接口的请求tps
{name=~"jvm_classes_.*"} 通过正则表达式查询不同的key
jvm_classes_.*表示将所有jvm_classes_开头的key查询出来
-
clamp_max(your_metric, 1000) 所有大于1000的值会被替换为1000 -

4.比较有用的内置监控项:

  • 内置监控的key受依赖的监控包版本不同而有所不同,具体key可以在机器上请求监控key查看
  • 以下key不一定在所有系统中存在
监控key 说明
http_server_requests_seconds_count http接口调用次数
http_server_requests_seconds_sum http接口调用总耗时
http_server_requests_seconds_max http接口调用最大耗时
jvm_threads_states_threads jvm线程数监控,区分不同状态
jvm_memory_used_bytes jvm内存使用监控,区分不同的堆区域
jvm_gc_pause_seconds_count gc暂停次数
jvm_gc_pause_seconds_sum gc暂停总时间
jvm_gc_pause_seconds_max gc暂停最大时间
jvm_gc_live_data_size_bytes gc存活数据大小
process_files_open_files 进程打开文件数
system_load_average_1m 1分钟负载
system_cpu_usage 系统cpu使用
kafka_consumer_records_consumed_total_records_total kafka消费数量,包含机器实例和主题的tag
hikaricp_* hikaricp相关监控,包含很多监控项
tomcat_* tomcat相关监控
log4j2_* 日志相关监控
kafka_* kafka相关监控,数量很多

6.项目接入监控

项目需要提供http接口供普罗米修斯拉取监控数据,需要提供http接口给运维配置到普罗米修斯上
spring boot项目一般引入actuator包,然后配置以下配置提供http接口
image

spring boot项目如何使用actuator,grafana,普罗米修斯,请参考网上教程