当前位置: 首页 > news >正文

Micrometer | 基础 - [直方图 百分位]

目录
  • §1 概念
    • §1.1 百分位直方图
    • §1.2 客户端百分位
  • §2 声明
  • §3 直方图的开启

§1 概念

TimerDistributionSummary 具有收集数据并监控其在百分位上的分布的能力,查看百分位数主要有两种方法:

  • 百分位直方图
  • 客户端百分位

§1.1 百分位直方图

Micrometer 把值累积到底层的直方图中,然后按预设的一系列桶上报这些数据到监控系统
直方图的百分位,由监控系统的查询语句负责计算
目前,仅如下 3 个监控系统提供了基于直方图求取百分位近似值的能力

  • Prometheus 通过 histogram_quantile
  • Atlas 通过 :percentile
  • Wavefront 通过 hs()

如果你倾向于这种方式,可以选择 Prometheus、Atlas、Wavefront 作为监控系统
这样,你可以通过累加<不同维度的桶里的值>的方式,跨维度的聚合直方图,并从中得到可聚合的百分位数

§1.2 客户端百分位

Micrometer 为每个 Meter ID(Meter名+所有 tag 可以唯一确定一个 Meger)计算百分位近似值,并把它们上报给监控系统
相比于百分位直方图,这种方式不够灵活,因为它不能按 tag 聚合。
相对的,虽然基于这些数据的监控系统不能在 server 侧基于直方图进行百分位聚合,但是可以为百分位分布提供一定程度的洞察能力

§2 声明

下例演示带有直方图的 Timer

Timer.builder("my.timer").publishPercentiles(0.5, 0.95) // median and 95th percentile .publishPercentileHistogram() .serviceLevelObjectives(Duration.ofMillis(100)) .minimumExpectedValue(Duration.ofMillis(1)) .maximumExpectedValue(Duration.ofSeconds(10))
  • publishPercentiles
    用于发布在你的应用里计算的百分位值,这些值不能夸维度聚合
    即上文的 客户端百分位

  • publishPercentileHistogram
    用于发布合适的直方图,此直方图可以用于夸维度的计算百分位近似值
    即上文的 百分位直方图

    • Prometheus 通过 histogram_quantile

    • Atlas 通过 percentile

    • Wavefront 通过 hs()

      对于 Prometheus/Atlas 而言,最终的直方图的桶是预设的,这个预设基于一个由 Netflix 凭经验决定的 generator 决定
      在绝大多数实际使用 Timer / DistributionSummary 的场景这个预设产生的错误边界都是可以接受的

      默认情况下,这个 generator 预设 276 个桶,但 Micrometer 只全量接受由 minimumExpectedValue/maximumExpectedValue 设置夹出来的范围
      默认情况下,Micrometer 会将 Timer 在1毫秒到1分钟的范围内,对每个计时器维度产生 73 个直方图桶

      如果监控系统不支持可聚集百分位数近似值,不会有直方图发布到这样的系统,这个配置也不会生效

  • serviceLevelObjectives
    用于发布基于你配置的 SLO 的累计直方图
    如果监控系统支持可聚合百分位,协同使用此配置与 publishPercentileHistogram 时,可以向已发布的直方图中增加额外的桶
    但如果监控系统不支持可聚合百分位,可以使直方图仅用此配置发布

  • minimumExpectedValue/maximumExpectedValue
    控制 publishPercentileHistogram 运送的桶的数量,并控制底层HdrHistogram结构的准确性和内存占用
    控制桶的数量不是直接设置桶数,而是设置了上下限,二者会从预设的一众桶中截出实际投入使用的部分
    对底层直方图结构的准确性、内存占用同理

如果一个监控系统支持通过直方图计算百分位近似值,即支持 publishPercentileHistogram
它就没有必要通过客户端百分位再发布一遍,即无需 publishPercentiles
这是因为在 <监控系统支持百分位直方图的场景> 下,客户端百分位是冗余的,它不具备跨维度聚合的能力但是直方图可以
同时,Prometheus java 客户端 1.x 版本下,也不支持在同一个 metric 名下同时存在上述二者

§3 直方图的开启

一旦将百分位上报到监控系统,就会产生出新的时间序列,
因此如果一个核心库会作为应用的依赖(而被应用包含),那就不建议在其中直接配置百分位
推荐的方式是,在应用中通过 MeterFilter 的方式为一组 Timer/DistributionSummary 开启百分位

说白了就是:如果你准备写一个三方包,
这个包作为 sdk 也好,starter 也好,它就是为了给其他项目当依赖用的
那就别直接在这个包里把百分位配出来,因为你一旦配出来,那就直接多了条时间序列

例如:现在要在一个公共库里声明几个 Timer,它们具有相同的前缀 myservice,可以这样定义

registry.timer("myservice.http.requests").record(..);
registry.timer("myservice.db.requests").record(..);

应用系统使用此公共库后,可以通过 MeterFilter 配置上述 Timer 的直方图
比如下例:通过 MeterFilter 按前缀批量开启上述 Timer 的客户端百分位

registry.config().meterFilter(new MeterFilter() {@Overridepublic DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {if(id.getName().startsWith("myservice")) {return DistributionStatisticConfig.builder().percentiles(0.95).build().merge(config);}return config;}});
http://www.jsqmd.com/news/770858/

相关文章:

  • 2026年保定短视频代运营与GEO精准获客完全指南:制造工厂、高端服务商必读 - 精选优质企业推荐官
  • STM32F103C8T6驱动LCD1602,从8线并口切换到4线并口的完整代码对比与实战
  • 搞硬件必看:手把手拆解TSV(硅通孔)的三种制造工艺(Via First/Middle/Last),选哪种成本最低?
  • 2026年保定GEO优化与全网精准获客深度指南:制造业工厂、高端服务商必读 - 精选优质企业推荐官
  • Java开发进阶之路:掌握核心技能的关键
  • 别只看容量!给笔记本加内存前,这3个关于双通道的细节必须搞清楚
  • 佛山湘悦机械设备租赁:白云可靠的路基箱租赁公司 - LYL仔仔
  • 深入解析BepInEx插件框架:5个实战技巧构建Unity游戏扩展生态
  • 2026年贵阳全屋整装装修深度指南:一站式定制服务如何破局预算黑洞 - 年度推荐企业名录
  • 2026年拉萨废旧物资回收公司推荐:家电回收/空调回收/电缆回收/不锈钢回收/电机回收/废铜回收/废铝回收/电动车回收/设备回收一站式服务 - 品牌推荐官
  • 掌握Obsidian Tasks优先级管理:6个等级让任务管理更高效
  • 贵阳防雷工程隐患频发,2026年防雷检测机构如何规避雷击风险——5大品牌深度评测 - 年度推荐企业名录
  • 3分钟解锁网页视频下载:VideoDownloadHelper让你的收藏从未如此简单
  • 别再只用mapToInt了!Java Stream里mapToDouble和mapToLong的实战场景与性能对比
  • 2026贵阳全屋整装深度横评:一站式定制如何破局装修信任危机 - 年度推荐企业名录
  • 2026年自贡装修公司怎么选?全案整装与智能家居系统一体化交付深度对比指南 - 企业名录优选推荐
  • 快手无水印视频下载神器:KS-Downloader 终极使用指南
  • 观察 Taotoken 用量看板如何帮助团队控制 API 成本
  • 2026年保定短视频代运营与GEO精准获客全域解决方案深度横评 - 精选优质企业推荐官
  • 3分钟快速上手ChanlunX:通达信缠论分析终极指南
  • 如何快速掌握NVIDIA Profile Inspector:5个实用技巧解锁显卡隐藏性能
  • MAA明日方舟小助手:三步掌握全自动日常管理与战斗部署
  • 气浮机知名品牌有哪些?高质量厂家与型号选购攻略(2026版) - 品牌推荐大师
  • Windhawk:Windows系统个性化定制的革命性工具
  • 通过审计日志功能追溯团队内API Key的使用情况与安全管控
  • 2026年室内游泳池设备厂家评测:资质与落地能力全维度对比 - 奔跑123
  • Redis 和 Caffeine 构建的多级缓存,如何保持数据一致性?
  • Hugo博客自动化部署:配置驱动发布引擎与CI/CD集成实践
  • 2026届最火的六大AI科研助手实际效果
  • 图像采集卡实操指南:避开选型误区,适配全场景应用