自定义 Metrics 设计规范:业务指标和技术指标的层级划分
自定义 Metrics 设计规范业务指标和技术指标的层级划分一、监控面板 80 个指标但故障时不知道看哪个运维团队花了两个月建了监控系统各种指标应有尽有GC 次数、线程数、文件描述符、内存碎片率、连接池使用率……面板上有 80 多个指标。但真正故障时大家翻了几分钟面板都没找到关键信号——信息多不等于信息有用。指标体系的设计不是越多越好而是要有清晰的层级和关联。哪些指标是服务是否健康的一线信号哪些是为什么出问题的排查信号哪些是业务好不好的趋势信号没有分层80 个指标就是 80 个噪音。二、四层指标体系架构flowchart TD subgraph L1[第一层: 业务指标 5-8个] B1[日活用户数] B2[核心流程转化率] B3[业务错误率] B4[用户平均响应时间] end subgraph L2[第二层: SLI/SLO 指标 4-6个] S1[可用性: 99.9%] S2[P99延迟目标] S3[错误预算剩余] S4[吞吐量 SLA] end subgraph L3[第三层: 技术指标 10-15个] T1[QPS 错误率] T2[P50/P95/P99 延迟] T3[资源: CPU/内存/磁盘] T4[依赖: DB/缓存/MQ] end subgraph L4[第四层: 诊断指标 20-30个] D1[GC 暂停时间] D2[连接池状态] D3[Goroutine 数量] D4[慢查询数量] D5[缓存命中率] end B1 -.-|告警| ALERT{业务异常} S1 -.-|告警| ALERT_SLO{SLO 偏离} ALERT -- INVESTIGATE[排查: 从上往下看] INVESTIGATE -- L3 INVESTIGATE -- L4四层指标的金字塔原则上层指标少而精告警只用前两层、下层指标多而全排查用三四层、告警不看第四层避免告警风暴。三、Go 实现自定义 Metrics 体系package custommetrics import ( github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/promauto ) // 第一层业务指标管理层关注 var ( // 核心业务指标每日活跃 Agent 数 ActiveAgentsDaily promauto.NewGauge(prometheus.GaugeOpts{ Name: business_active_agents_daily, Help: 每日活跃的 Agent 实例数, }) // 核心业务指标任务完成率 TaskCompletionRate promauto.NewGauge(prometheus.GaugeOpts{ Name: business_task_completion_rate, Help: Agent 任务完成率 (0-1), }) // 核心业务指标用户满意度通过反馈收集 UserSatisfactionScore promauto.NewHistogram(prometheus.HistogramOpts{ Name: business_user_satisfaction_score, Help: 用户满意度评分分布, Buckets: []float64{1, 2, 3, 4, 5}, }) ) // 第二层SLI/SLO 指标运维技术管理 var ( // 服务可用性按滚动 28 天窗口计算 ServiceUptime promauto.NewGauge(prometheus.GaugeOpts{ Name: slo_service_uptime_ratio, Help: 服务可用性比例28天滚动窗口, }) // 错误预算剩余 ErrorBudgetRemaining promauto.NewGauge(prometheus.GaugeOpts{ Name: slo_error_budget_remaining_percent, Help: 错误预算剩余百分比SLO 99.9% → 允许 0.1% 错误, }) // P99 延迟是否达标 LatencySLOMet promauto.NewGaugeVec(prometheus.GaugeOpts{ Name: slo_latency_p99_met, Help: P99 延迟是否满足 SLO1达标, 0未达标, }, []string{endpoint}) ) // 第三层技术指标开发/运维日常关注 var ( // RED 指标Rate RequestRate promauto.NewCounterVec(prometheus.CounterOpts{ Name: tech_http_requests_total, Help: HTTP 请求总数, }, []string{method, path, status}) // RED 指标Errors RequestErrors promauto.NewCounterVec(prometheus.CounterOpts{ Name: tech_http_errors_total, Help: HTTP 请求错误数, }, []string{method, path, error_type}) // RED 指标Duration RequestDuration promauto.NewHistogramVec(prometheus.HistogramOpts{ Name: tech_http_duration_seconds, Help: HTTP 请求延迟, Buckets: []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}, }, []string{method, path}) // 大模型 API 调用指标 LLMCallTotal promauto.NewCounterVec(prometheus.CounterOpts{ Name: tech_llm_calls_total, Help: 大模型 API 调用总数, }, []string{model, status}) LLMTokenUsage promauto.NewCounterVec(prometheus.CounterOpts{ Name: tech_llm_token_usage_total, Help: 大模型 Token 消耗总数, }, []string{model, type}) // type: input, output ) // 第四层诊断指标深度排查用 var ( // GC 统计 GCPauseDuration promauto.NewHistogram(prometheus.HistogramOpts{ Name: diag_gc_pause_duration_seconds, Help: GC 暂停时间分布, Buckets: []float64{.0001, .0005, .001, .005, .01, .05, .1}, }) // Goroutine 数量 GoroutineCount promauto.NewGauge(prometheus.GaugeOpts{ Name: diag_goroutine_count, Help: 当前 Goroutine 数量, }) // 数据库连接池 DBConnPoolUsage promauto.NewGaugeVec(prometheus.GaugeOpts{ Name: diag_db_conn_pool_usage, Help: 数据库连接池使用率, }, []string{db_name, type}) // type: active, idle, total // Agent 特定指标 AgentTaskQueueDepth promauto.NewGauge(prometheus.GaugeOpts{ Name: diag_agent_task_queue_depth, Help: Agent 任务队列深度, }) AgentToolCallLatency promauto.NewHistogramVec(prometheus.HistogramOpts{ Name: diag_agent_tool_call_seconds, Help: Agent 工具调用延迟, Buckets: []float64{.1, .5, 1, 2, 5, 10, 30}, }, []string{tool_name}) ) // 指标命名规范 // 命名规范{层级}_{领域}_{指标名}_{单位} // // 层级前缀 // business_ → 业务指标管理层 // slo_ → SLO 指标运维 // tech_ → 技术指标开发 // diag_ → 诊断指标排查用 // // 示例 // business_task_completion_rate → 业务: 任务完成率 // slo_error_budget_remaining_percent → SLO: 错误预算剩余 // tech_http_duration_seconds → 技术: HTTP 延迟 // diag_db_conn_pool_usage → 诊断: 数据库连接池 // PromQL 告警规则示例 // 第一层告警业务异常仅告警最核心指标 // business_task_completion_rate 0.8 → P1 告警 // // 第二层告警SLO 偏离 // slo_error_budget_remaining_percent 50 → P1 告警预算消耗过半 // slo_error_budget_remaining_percent 10 → P0 告警预算即将耗尽 // // 第三层技术异常 // rate(tech_http_errors_total[5m]) / rate(tech_http_requests_total[5m]) 0.01 // → P1 告警 // // 第四层不设告警仅在排查时查看 // 仪表板设计原则 // Dashboard 分层 // 1. Executive Dashboard管理层 // 5-8 个面板日活、完成率、满意度、月度成本 // // 2. Operation Dashboard值班运维 // 10-15 个面板可用性、P99延迟、错误率、错误预算 // // 3. Technical Dashboard开发 // 20-30 个面板QPS、延迟分布、错误详情、资源使用 // // 4. Deep Dive排查 // 按服务/依赖组织的详细面板四、指标设计的边界与反模式不要把所有指标都设告警。第四层的诊断指标永远不应该触发告警——告警只应该从第一层业务异常和第二层SLO 偏离发出。如果一个 GC 暂停 10ms 就告警值班工程师会被告警风暴淹没。指标不是越多越好。每新增一个指标都要问这个指标的异常会触发什么行动如果答案是不知道或者看着好玩那就不需要。指标命名要遵循团队约定。http_requests_totalvsrequestCountvstotalHttpRequests——没有统一命名规范写 PromQL 时会反复查字典。建议团队制定命名规范{层级}_{领域}_{指标名}_{单位}。指标的基数Cardinality是 Prometheus 的隐形杀手。在标签中使用用户 ID、订单号等高基数字段会在短时间内产生数万条时间序列压垮 Prometheus。每个标签值组合都是一条独立的时间序列。五、总结指标体系设计不是技术活而是管理活。四层金字塔结构业务指标 5-8 个看趋势 → SLI/SLO 4-6 个看健康 → 技术指标 10-15 个看运行 → 诊断指标 20-30 个看细节。告警只需前两层排查才用到后两层。每季度做一次指标清理哪些指标六个月来没有任何人看过删掉。

相关新闻

MATLAB中高效处理NetCDF数据的工具组合:mexnc底层接口+snctools实用函数

MATLAB中高效处理NetCDF数据的工具组合:mexnc底层接口+snctools实用函数

本文还有配套的精品资源,点击获取 简介:提供一套开箱即用的MATLAB NetCDF数据操作方案,核心包含mexnc(C语言编写的高性能底层接口)和snctools(封装完善的MATLAB函数集)。支持读取变量&#x…

2026/7/15 22:10:22阅读更多 →
【JAVA毕设源码分享】基于springboot+Vue.js的在线智慧社区服务平台(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot+Vue.js的在线智慧社区服务平台(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/15 22:10:22阅读更多 →
礼物说同款微信小程序源码|原生开发可直接运行|含首页/分类/购物车/订单全流程页面与动效截图

礼物说同款微信小程序源码|原生开发可直接运行|含首页/分类/购物车/订单全流程页面与动效截图

本文还有配套的精品资源,点击获取 简介:一套开箱即用的微信原生小程序源码,复刻礼物说风格,完整实现电商核心链路:首页瀑布流推荐、多级商品分类、图文详情页、加入购物车、下单结算、订单状态跟踪等。代码基于标准…

2026/7/15 22:10:22阅读更多 →
利用MATLAB深度学习工具箱实现CNN图像分类:从数据准备到模型评估全流程解析

利用MATLAB深度学习工具箱实现CNN图像分类:从数据准备到模型评估全流程解析

1. 数据准备:构建高质量图像数据集在开始CNN模型训练前,数据准备是最关键的环节。我遇到过不少项目因为数据问题导致模型效果不佳,后来发现80%的时间都应该花在数据准备上。MATLAB的imageDatastore函数是处理图像数据的利器,它能自…

2026/7/15 23:10:33阅读更多 →
从sleep与wait的锁释放差异,深入剖析Java线程状态转换

从sleep与wait的锁释放差异,深入剖析Java线程状态转换

1. sleep与wait的核心差异解析多线程编程中,sleep()和wait()是最容易混淆的两个方法。刚入行时我也经常搞混,直到有次线上服务出现线程阻塞,用jstack分析dump文件时才真正理解它们的区别。先说结论:sleep是抱着锁睡觉,…

2026/7/15 23:10:33阅读更多 →
ArcGIS水文分析实战:从DEM到流域划分的完整流程解析

ArcGIS水文分析实战:从DEM到流域划分的完整流程解析

1. 水文分析基础与DEM准备第一次接触ArcGIS水文分析时,我被DEM数据中隐藏的水系网络惊呆了——原来数字高程模型就像大地的"指纹",通过特定工具能提取出完整的河流脉络。水文分析的核心原理很简单:水往低处流。但实际操作中&#x…

2026/7/15 23:10:33阅读更多 →
高速电路设计中的串扰机制与抑制技术

高速电路设计中的串扰机制与抑制技术

1. 串扰的本质与耦合机制在高速电路设计中,工程师们最常遇到的"幽灵信号"问题莫过于串扰。这种看似神秘的现象,本质上源于导体之间不可避免的电磁耦合。当我在设计第一个GHz级数字电路板时,曾花费整整两周时间追踪一个间歇性出现的…

2026/7/15 23:10:33阅读更多 →
2026零基础新手如何快速整理课堂笔记怎么选 避坑包教包会可直接上手

2026零基础新手如何快速整理课堂笔记怎么选 避坑包教包会可直接上手

"2026零基础新手快速整理课堂笔记,核心是先理清整理逻辑再选工具,不用上来就学复杂操作、买昂贵会员,不管你是要用来课后复习、论文调研还是知识自测,都有可直接上手的方法,下文讲清选择标准、避坑要点&#xff0…

2026/7/15 23:10:33阅读更多 →
基于MATLAB与机器人工具箱的六自由度机械臂笛卡尔空间轨迹规划实战

基于MATLAB与机器人工具箱的六自由度机械臂笛卡尔空间轨迹规划实战

1. 从零搭建UR5e机械臂模型第一次接触机械臂建模时,我被DH参数表绕得头晕眼花,直到发现MATLAB机器人工具箱的Link函数就像乐高积木说明书。以UR5e为例,我们先把六个关节的"身份证信息"整理好:% 标准DH参数定义UR5e机械臂…

2026/7/15 23:05:32阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →