什么是千分尺?
千分尺是一个简单的外观,用于以供应商中立的方式收集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