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

什么是千分尺?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能

鼠标拖拽多选功能*{box-sizing:border-box;}ul{width:500px;height:auto;margin:0;padding:20px;font-size: 0;/*需设置定位*/position:relative;}li{width:70px;height:70px;margin:10px;padding:0;display:inline-block;vertical-align: top;font-size: 13px;border:1px soli…

python epoll多路复用技术_python IO 多路复用 epoll简单模型

IO多路复用就是我们说的select poll epoll通过一种机制使一个进程能同时等待多个文件描述符&#xff0c;而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态&#xff0c;epoll()函数就可以返回。所以&#xff0c;IO多路复用&#xff0c;本质上不会有并发的功能&#…

python3多线程协程_python3-----多进程、多线程、多协程

目前计算机程序一般会遇到两类I/O&#xff1a;硬盘I/O和网络I/O。我就针对网络I/O的场景分析下python3下进程、线程、协程效率的对比。进程采用multiprocessing.Pool进程池&#xff0c;线程是自己封装的进程池&#xff0c;协程采用gevent的库。用python3自带的urlllib.request和…

Apache CXF 3.0:CDI 1.1支持替代Spring

几周前刚刚发布了Apache CXF 3.0 &#xff0c;该项目又迈出了满足JAX-RS 2.0规范要求的又一个重要步骤&#xff1a;与CDI 1.1集成。 在此博客文章中&#xff0c;我们将看几个有关Apache CXF 3.0和Apache CXF 3.0如何协同工作的示例。 从3.0版开始&#xff0c; Apache CXF包含一…

java varbinary_SQL 中存放 varbinary型数据

使用带有 BULK 选项的 OPENROWSET以下 Transact-SQL 增强功能支持 OPENROWSET(BULK...)函数&#xff1a;与 SELECT 一起使用的 FROM 子句可以调用 OPENROWSET(BULK...)而非表名&#xff0c;同时可以实现完整的 SELECT 功能。带有 BULK 选项的 OPENROWSET 在 FROM 子句中需要有一…

python矩阵左除_matlab学习笔记

Matlab学习笔记运算&#xff1a;1. 算术运算(在矩阵意义下进行):要求矩阵同型,对应元素相加减&#xff0c;如果用标量和矩阵相加减&#xff0c;不同型就凉凉提示错误&#xff0c;那就将矩阵每个元素和数字相加减-&#xff1a;同上*&#xff1a;A*B要求左行右列&#xff0c;…

只读副本和Spring Data第1部分:配置数据库

这是有关我们为利用只读副本来提高应用程序性能而寻求的一系列博客文章。 对于这个项目&#xff0c;我们的目标是建立我们的spring数据应用程序&#xff0c;并使用read仓库进行写操作&#xff0c;并基于read副本进行读操作。 为了模拟这种环境&#xff0c;我们将通过Docker使…

java结构体系_java io结构体系

Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点:1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系2. 原始处理器(适配器)与链接流处理器(装饰器)其结构图如下:Reader-Writer体系1. 基类…

python turtle应用实例_turtle库应用实例2-六芒星的绘制

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬描述使用turtle库绘制一个六角形&#xff0c;效果如下&#xff1a;‪…

java按钮改变窗口大小_布局似乎有问题,JButton在调整窗口大小时显示出意外的行为。...

很好的例子的问题可能与平台有关&#xff0c;但我可以提供一些观察&#xff1a;您没有添加或删除组件&#xff0c;所以您不需要revalidate().由于背景色是按钮的绑定属性&#xff0c;因此不需要后续调用repaint().你&#xff0c;你们做需要repaint()在你的习惯里DrawingArea&am…

JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式

Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Selenium WebDrive…

python 配置文件中密码不能是明文_配置文件中明文密码改为密文密码的方法

我们用java链接数据库&#xff0c;不管是web项目还是小程序&#xff0c;都需要把数据库密码写在配置文件中(当然你要写死在程序里也没有办法)&#xff0c;或者数据库中&#xff0c;通常源代码漏洞扫描都会告诉你不能有明文密码&#xff0c;那么有什么办法可以变为密文呢&#x…

java.lang 源码剖析_java.lang.Void类源码解析

在一次源码查看ThreadGroup的时候&#xff0c;看到一段代码&#xff0c;为以下&#xff1a;/** throws NullPointerException if the parent argument is {code null}* throws SecurityException if the current thread cannot create a* thread in the specified thread group…

vant按需引入没样式_vue vant-ui样式出不来的问题

第一步&#xff1a;安装vantnpm i vant -S // 或 yarn add vant第二步&#xff1a;配置按需引入// 在 babel.config.js 中配置 module.exports {plugins: [[import, {libraryName: vant,libraryDirectory: es,style: true}, vant]] };第三步&#xff1a;配置vue.config.js&…

javaserver_如何在JavaServer Pages中使用Salesforce REST API

javaserver摘要&#xff1a;本教程提供了一个JSP示例以及如何将其与Salesforce REST API集成。 我们将逐步完成创建外部客户端以使用Force.com &#xff08;同时使用HTTP&#xff08;S&#xff09;和JSON&#xff09;管理数据的分步过程。 在此示例中&#xff0c;我将Mac OS X…

jmeter线程数并发数区别_如何确定Kafka的分区数、key和consumer线程数、以及不消费问题解决...

在Kafak中国社区的qq群中&#xff0c;这个问题被提及的比例是相当高的&#xff0c;这也是Kafka用户最常碰到的问题之一。本文结合Kafka源码试图对该问题相关的因素进行探讨。希望对大家有所帮助。怎么确定分区数&#xff1f;“我应该选择几个分区&#xff1f;”——如果你在Kaf…

简述java规范要注意哪些问题_JAVA学习:JAVA基础面试题(经典)

第一阶段题库基础知识部分&#xff1a;1. JDK是什么&#xff1f;JRE是什么&#xff1f;a) 答&#xff1a;JDK&#xff1a;java开发工具包。JRE&#xff1a;java运行时环境。2. 什么是java的平台无关性&#xff1f;a) 答&#xff1a;Java源文件被编译成字节码的形式&#xff0c;…

我可以/应该在事务上下文中使用并行流吗?

介绍 长话短说&#xff0c;您不应在并行流中使用事务。 这是因为并行流中的每个线程都有其自己的名称&#xff0c;因此它确实参与了事务。 Streams API旨在在某些准则下正常工作。 实际上&#xff0c;为了受益于并行性&#xff0c;不允许每个操作更改共享对象的状态&#xff0…

插入排序java_「Java」各类排序算法

排序大的分类可以分为两种&#xff1a;内排序和外排序。在排序过程中&#xff0c;全部记录存放在内存&#xff0c;则称为内排序&#xff0c;如果排序过程中需要使用外存&#xff0c;则称为外排序。下面讲的排序都是属于内排序。内排序有可以分为以下几类&#xff1a;(1) 插入排…

java object... arguments_Java面试之基础题---对象Object

参数传递&#xff1a;Java支持两种数据类型&#xff1a;基本数据类型和引用数据类型。原始数据类型是一个简单的数据结构&#xff0c;它只有一个与之相关的值。引用数据类型是一个复杂的数据结构&#xff0c;它表示一个对象。原始数据类型的变量将该值直接存储在其存储器地址处…