micrometer:重点总结

micrometer:重点总结micrometer 号称监控界的 SLF4J 以极低的开销为基于 JVM 的程序收集监控指标 1 注册表 Registry Meter 是用来收集应用的测量指标的接口 micrometer 通过 MeterRegistr 创建和保存 Meter 每个监控系统都会有 MeterRegistr 的实现 SimpleMeterR SimpleMeterR

    micrometer号称监控界的SLF4J,以极低的开销为基于JVM的程序收集监控指标。

1、注册表Registry:

    Meter是用来收集应用的测量指标的接口。micrometer通过MeterRegistry创建和保存Meter,每个监控系统都会有MeterRegistry的实现。

SimpleMeterRegistry

    SimpleMeterRegistry持有内存中每一个指标的最新值,但是不用于对外提供。在未确定

定义方式:

MeterRegistry registry = new SimpleMeterRegistry();

混合注册

    Micrometer 提供了一个CompositeMeterRegistry可添加多个注册表的程序,支持将metrics标准同时发布到多个监视系统。

CompositeMeterRegistry composite = new CompositeMeterRegistry(); Counter compositeCounter = composite.counter("counter"); compositeCounter.increment(); (1) SimpleMeterRegistry simple = new SimpleMeterRegistry(); composite.add(simple); (2) compositeCounter.increment(); (3)

    备注:

    1)CompositeMeterRegistry composite中添加的所有注册表,都具备composite的指标,例如simple中有Counter compositeCounter;

    2)当Counter compositeCounter增加的时候,CompositeMeterRegistry composite中添加的所有注册表中的compositeCounter都会相应地增加。

全局注册

    Micrometer提供了一个静态全局注册表Metrics.globalRegistry和一组静态构建器,用于基于此注册表生成计量表。globalRegistry是一个组合注册表。

class MyComponent { Counter featureCounter = Metrics.counter("feature", "region", "test"); (1) void feature() { featureCounter.increment(); } void feature2(String type) { Metrics.counter("feature.2", "type", type).increment(); (2) } } class MyApplication { void start() { // wire your monitoring system to global static state Metrics.addRegistry(new SimpleMeterRegistry()); (3) } }

    全局注册表中添加的指标会自动添加到所有注册表中。

2、指标

    micrometer的指标由指标名称和键值对组成。指标需要注册到注册表中,通过注册表来进行发布。micrometer的指标分为4类:Counter、Gauge、Timer、Summary。

    一般来说,指标的使用分成4个环节:创建、注册、使用、发布。

1、Counter

    counter是计数器,特征是只增不减。counter通常用来表示业务的请求次数之类的只增不减的指标。通常会使用counter的increment()方法或者increment(int n)方法,分别增加1和n。示例:

MeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); Counter counter = registry.counter("counter", "tag_key", "tag_value"); Flux.interval(Duration.ofMillis(10)) .doOnEach(d -> { if (rand.nextDouble() + 0.1 > 0) { counter.increment(); } }) .blockLast();

2、Gauge

    Gauge是仪表值。顾名思义,Gauge用来记录可以瞬息万变的一个数值,例如CPU利用率、内存利用率等。示例:

//example 1: List 
  
    list = registry.gauge("listGauge", Collections.emptyList(), new ArrayList<>(), List::size); List 
   
     list2 = registry.gaugeCollectionSize("listSize2", Tags.empty(), new ArrayList<>()); Map 
    
      map = registry.gaugeMapSize("mapGauge", Tags.empty(), new HashMap<>()); //example 2: AtomicInteger n = registry.gauge("numberGauge", new AtomicInteger(0)); n.set(1); n.set(2); //example 3: Gauge gauge = Gauge .builder("gauge", myObj, myObj::gaugeValue) .description("a description of what this gauge does") // optional .tags("region", "test") // optional .register(registry); 
     
    
  

3、Timer

    Timer是计时器,用来测量短时间的代码块的执行时间的分布。Timer记录代码块的执行时间后,可以对执行时间进行统计,分析记录执行的最大时间、总时间、平均时间、执行完成的总任务等。

    Timer的方法:

void record(long amount, TimeUnit unit); void record(Duration duration); double totalTime(TimeUnit unit);

    Timer的使用示例:

Timer timer = Timer .builder("my.timer") .description("a description of what this timer does") // optional .tags("region", "test") // optional .register(registry);

4、Summary

    Summary是摘要,用于跟踪事件的分布。micrometer的Summary可以通过prometheus的Summary来理解:prometheus指标。

代码示例:

//example 1: DistributionSummary summary = registry.summary("response.size"); //example 2: DistributionSummary summary = DistributionSummary .builder("response.size") .description("a description of what this summary does") // optional .baseUnit("bytes") // optional (1) .tags("region", "test") // optional .scale(100) // optional (2) .register(registry);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203134.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:30
下一篇 2026年3月19日 下午10:30


相关推荐

  • VLAN和TRUNK口配置

    VLAN和TRUNK口配置trunk 口和 VLAN

    2026年3月17日
    2
  • UpdateData使用

    UpdateData使用UpdateData 参数只有一个 默认为 TRUE UpdateData TRUE 刷新控件的值到对应的变量 外部输入值交给内部变量 即 控件的值 变量 UpdateData FALSE 拷贝变量值到控件显示 变量的最终运算结果值交给外部输出显示 即 变量值 控件显示 简单地说 如果 Updatedata TRUE

    2026年3月19日
    2
  • pycharm 2022.01 激活码永久【2022.01最新】2022.02.10

    (pycharm 2022.01 激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4KDDGND3CI-eyJsaWNlbnNlSWQi…

    2022年4月1日
    78
  • miniconda可以运行python吗_pycharm怎么配置anaconda环境

    miniconda可以运行python吗_pycharm怎么配置anaconda环境一,Pytorch环境安装打开已经装好的miniconda,用condaenvlist命令查看有哪些已经配置好的环境。如图所示,目前显示有两个环境。创建虚拟环境condacreate-n环境名字(英文)python=x.x(python版本)如:condacreate-npytorchpython=3.7用命令condaactivate虚拟环境名称,进入环境。安装pytorch环境,可以在官网查看相应的命令。这里选用的是cpu版本,命令如下:condain

    2022年8月27日
    5
  • java c++ socket 中文乱码解决「建议收藏」

    java c++ socket 中文乱码解决「建议收藏」java服务器端使用ServerSocket的accept创建Socket,跟普通java之间的通信一致。C++客户端使用makeConnect(server,port,”tcp”),send,recv等函数。 自己在这次编程中,首先遇到的是虽然连接成功了,但java无法接收C++发来的消息。可能是用错函数之类的,后边改为下边的代码接收就没事了。

    2022年7月13日
    14
  • Rational Rose建立对象图

    Rational Rose建立对象图对象图要求建立如下对象图 2 1 定义类确定对象图中有哪些类 并在浏览器窗口中 建立每个类 步骤 1 在 LogicView 中添加类 Person Company 如图 1 20 所示 图 1 20 新建类 Person 和 Company2 2 建立对象图步骤 1 右击 LogicalView 打开快捷菜单 选择 New Collaboratio

    2025年10月16日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号