使用测微计收集应用程序指标

本文介绍了如何使用Micrometer这个供应商中立的指标收集库,以JMX为例,展示了如何添加依赖、创建MeterRegistry、创建Counter和Timer,以及如何在JConsole中查看收集的指标数据。
摘要由CSDN通过智能技术生成

什么是千分尺?

千分尺是一个简单的外观,用于以供应商中立的方式收集Java应用程序中的指标。 您可以考虑使用SLF4J作为指标。 Micrometer内置了对许多不同指标后端的支持,包括Atlas,Datadog,Elastic,JMX等。 在本文中,我们将看到如何在Java应用程序中使用Micrometer收集指标。

千分尺依赖性

首先,我们需要将千分尺依赖性添加到项目中。 请注意,您需要根据要使用的指标后端选择正确的依赖关系。

在这里,我们选择JMX,因此我们需要micrometer-registry-jmx工件。

 < dependency > 
     < groupId >io.micrometer</ groupId > 
     < artifactId >micrometer-registry-jmx</ artifactId > 
     < version >1.2.0</ version >  </ dependency > 

例如:如果要使用Elasticsearch而不是JMX,则需要添加micrometer-registry-elastic。

创建一个MeterRegistry

在开始收集指标之前,我们需要创建一个MeterRegistry。 MeterRegistry用于创建仪表,然后收集实际指标。

根据您要使用的指标后端,MeterRegistry是一个具有不同实现的界面。 最简单的MeterRegistry实现是SimpleMeterRegistry,它不会在任何地方导出数据。 它只是在内存中保存每个仪表的最新值。

 MeterRegistry registry = new SimpleMeterRegistry(); 

如果我们想将度量标准数据导出到JMX,则需要创建一个JmxMeterRegistry。

 MeterRegistry registry = new JmxMeterRegistry( new JmxConfig() { 
     @Override 
     public String get(String s) { 
         return null ; 
     }  }, Clock.SYSTEM); 

传递的JmxConfig实例的get()方法可用于提供其他配置值。 在简单的示例中,我们不需要此功能,因此我们只返回null。

如果要将指标导出到多个监视后端,则可以使用CompositeMeterRegistry。 CompositeMeterRegistry将数据传递给一个或多个其他注册表,使您可以将指标发布到多个指标后端。

例如:

 CompositeMeterRegistry registry = new CompositeMeterRegistry();  registry.add( new JmxMeterRegistry(..));  registry.add( new ElasticMeterRegistry(..)); 

仪表

仪表是用于收集指标的千分尺接口。 仪表的示例实现是计数器,计时器和仪表。

创建一个柜台

我们可以使用一个简单的构建器API创建一个Counter:

 Counter counter = Counter 
         .builder( "my.counter" ) 
         .description( "counts something important" ) 
         .tag( "environment" , "test" ) 
         .tag( "region" , "us-east" ) 
         .register(registry); 

这将创建一个名为my.counter的计数器,并将其添加到名为Registry的MeterRegistry中。 我们还可以向我们的计数器添加一个或多个标签和可选说明。 仪表通常创建一次,然后多次使用。

为了增加计数器的值,我们可以调用crement()方法:

 counter.increment(); // increment by one  counter.increment( 2.5 ); 

创建一个计时器

可以通过类似的方式创建计时器:

 Timer timer = Timer.builder( "my.timer" ).register(registry); 

在这里,我们跳过了可选参数,例如标记或说明。

现在,我们可以使用record()方法将计时指标添加到计时器中:

 // recording execution time of code  timer.record(() -> { 
     // do something  });  // record a precomputed value  timer.record(Duration.ofMillis( 123 )); 

在JConsole中查看结果

由于我们使用的是JmxMeterRegistry,因此可以通过JMX访问我们的指标信息。 为此,我们可以使用JConsole ,可以通过在您的<jdk> / bin目录中执行jconsole来启动它。 连接到Java应用程序过程后,您可以在MBeans选项卡中找到当前的应用程序指标:

当然,如果您使用其他MetricsRegistry,则必须使用其他工具来查看指标。 例如,如果您使用的是ElasticMeterRegistry,则可以使用Kibana。

摘要

千分尺提供了易于使用的外观,可在Java应用程序中使用该外观来收集应用程序指标。 然后可以将这些指标信息导出到许多不同的后端技术(包括Elasticsearch和JMX)。 您可以在GitHub找到示例的源代码。

翻译自: https://www.javacodegeeks.com/2019/12/collecting-application-metrics-with-micrometer.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值