当您运行诸如Web应用程序之类的长期应用程序时,最好了解一些关于它们的统计信息,例如,服务的请求数,请求持续时间或活动请求数。
但是还有一些更通用的信息,例如内部集合的状态,代码的某些部分被执行了多少次,运行状况检查(例如数据库可用性)或与外部系统的任何类型的连接。
所有这些工具化都可以通过使用本机JMX或使用模块化项目(例如Metrics)来实现度量标准提供了一种强大的方法来衡量关键组件的行为,并将其报告给各种系统,例如JConsole系统控制台GangliaGraphiteCSV或通过Web服务器提供。 要安装Metrics ,我们仅需添加指标依赖项。 在此示例中,我们将使用Maven。

<dependencies><dependency><groupId>com.yammer.metrics</groupId><artifactId>metrics-core</artifactId><version>2.2.0</version></dependency>
</dependencies>

现在是时候向我们的代码中添加一些指标了。 在指标中,我们可以使用6种类型的指标:

  • 量规 :离散值的瞬时测量。
  • 计数器 :可以递增和递减的值。 可以在队列中使用,以监视挂起作业的剩余数量。
  • 仪表 :测量一段时间内事件的发生率。 您可以指定费率单位,事件范围或事件类型。
  • 直方图 :测量数据流中值的统计分布。
  • 计时器 :测量执行一段代码所需的时间及其持续时间的分布。
  • 健康检查 :顾名思义,它集中了我们服务对外部系统的健康检查。

因此,让我们编写一个非常简单的应用程序(实际上它是一个控制台应用程序),它将查询发送到Google搜索系统。 我们将测量请愿数量,发送给Google的字符数量,搜索到的最后一个单词以及一个计时器,以测量发送请求和接收响应的速度。

将应用度量的主要类称为MetricsApplication ,它负责连接到Google并发送输入的单词。

public class MetricsApplication {Counterprivate final Counter numberOfSendCharacters = Metrics.newCounter(MetricsApplication.class, 'Total-Number-Of-Characters');Meterprivate final Meter sendMessages = Metrics.newMeter(MetricsApplication.class, 'Sent-Messages', 'Send', TimeUnit.SECONDS);Timerprivate final Timer responseTime = Metrics.newTimer(MetricsApplication.class, 'Response-Time');private LinkedList<String> historyOfQueries = new LinkedList<String>();{GaugeMetrics.newGauge(MetricsApplication.class, 'lastQuery', new Gauge<String>() {@Overridepublic String value() {return historyOfQueries.getLast();}});}public void sendQuery(String message) throws FailingHttpStatusCodeException, MalformedURLException, IOException {updateMetrics(message);TimerContext timerContext = responseTime.time();sendQueryToGoogle(message);timerContext.stop();}private void sendQueryToGoogle(String message) throws FailingHttpStatusCodeException, MalformedURLException, IOException {WebClient webClient = new WebClient();HtmlPage currentPage = webClient.getPage('http:www.google.com');Get the query input textHtmlInput queryInput = currentPage.getElementByName('q');queryInput.setValueAttribute(message);Submit the form by pressing the submit buttonHtmlSubmitInput submitBtn = currentPage.getElementByName('btnG');currentPage = submitBtn.click();}private void updateMetrics(String message) {numberOfSendCharacters.inc(message.length());sendMessages.mark();historyOfQueries.addLast(message);}}

我们可以看到的第一件事是计数器实例。 此计数器将计算应用程序整个生命周期中发送给Google的字符数(同时您也不要停止它)。

下一个属性是一个计量器,用于测量一段时间内发送查询的速率。 然后,我们有了一个计时器, 它对sendQueryToGoogle方法调用及其随时间的分布进行评分。 最后是一个LinkedList,用于存储所有发送的查询。 该实例将用于返回执行的最后一个查询,并用于量规返回最后插入的元素。

注意,在每个度量中,我们都设置了一个类,该类将用作jconsole中的文件夹。 此外,提供了一个标签以用作文件夹内的名称。

让我们看一下具有先前配置的jconsole的屏幕截图,并执行三个搜索:

默认情况下,所有指标都可以通过JMX看到。 但是我们当然可以将测量结果报告给控制台http服务器GangliaGraphite

还要注意,在此示例中,我们将业务代码和指标代码混合在一起。 如果您打算使用
生产代码中的指标我建议您尽可能将指标逻辑放入AOP中。

我们已经了解了一种无需直接使用JMX即可监视我们的应用程序的简便方法。 还请记住, Metrics附带了一些内置指标,用于检测HttpClientJDBIJettyJerseyLog4jLogbackWeb应用程序

参考: Yammer Metrics,这是一种由JCG合作伙伴 Alex Soto 监控您的应用程序的新方法,位于One Jar To Rule Them All博客中。

翻译自: https://www.javacodegeeks.com/2012/12/yammer-metrics-a-new-way-to-monitor-your-application.html

Yammer Metrics,一种监视应用程序的新方法相关推荐

  1. 无服务器-构建现代应用程序的新方法

    对无服务器/功能即服务/云功能技术感到好奇,但是还没有机会深入研究? 想知道所有的兴奋是什么? 无服务器并不意味着没有服务器. 这是构建现代应用程序的新方法. 观看此视频,以了解有关构建现代应用程序的 ...

  2. ASP.NET 2.0 本地化功能:本地化 Web 应用程序的新方法

    适用于: Microsoft ASP.NET 2.0 Microsoft Visual Studio .NET Microsoft Visual Studio 2005 本地化 摘要:随着越来越多的公 ...

  3. 网络研讨室_网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法...

    网络研讨室 在此网络研讨会上听我们对新Java版本的一些初步想法 关于Java 9的新版本,有很多宣传.将Java平台迁移到模块上,由Mark Reinhold领导的专门团队进行了近十年的艰苦工作. ...

  4. 网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法

    在此网络研讨会上听我们对新Java版本的一些初步想法 Java 9的新版本引起了很多炒作.在Mark Reinhold领导的专门团队的带领下,将Java平台迁移到模块花费了近十年的辛苦工作. 除了备受 ...

  5. vue+vite项目当中:介绍一种生成助记词新方法,兼容以太坊

    在上一篇文章 当中我介绍了使用bip39生成助记词,在vue3不同的框架vite.vue-cli当中引入配置的方法.虽然可以生成助记词但是,需要进行大量的配置,尤其是在vite+ES6+vue3项目当 ...

  6. 论文解读:ToxinPred2:一种预测蛋白质毒性的改进方法

    ToxinPred2: an improved method for predicting toxicity of proteins 期刊:Briefings in Bioinformatics 中科 ...

  7. 计算机提取干涉条纹原理,两种提取Fabry-Perot干涉条纹圆心的新方法

    摘要本文介绍两种提取Fabry-Perot干涉条纹圆心点坐标的新方法.首先对干涉图像依次进行二值化处理,对所得到的条纹强度曲线进行均平滤波和自适应滤波,根据条纹灰度值强度余弦函数分布的特点,对条纹灰度 ...

  8. 安卓9可用的性能监视器_监视应用程序生态系统的性能和可用性

    在这个三篇文章的系列的第1部分和第2部分中 ,我介绍了监视Java应用程序的技术和模式,重点是JVM和应用程序类. 在最后的最后一部分中,我将重点放在介绍用于从应用程序的依赖项(例如底层操作系统,网络 ...

  9. Yammer Metrics实现服务指标收集与监控

    1.用途 可以对应用程序的运行状态以及各种指标进行收集. 2.官网地址 https://metrics.dropwizard.io/2.2.0/manual/core/ 3.yammer metric ...

最新文章

  1. Java Web整合开发(41) -- Forum
  2. 建高性能ASP.NET站点 第五章—性能调优综述(中篇)
  3. 【Git】从Git远程存储库中删除所有.pyc编译文件;附常用gitignore配置
  4. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView...
  5. Go Web 编程--如何确保Cookie数据的安全传输
  6. html超链接同一页面,你绝对想要的HTML页面超链接的修改问题
  7. mac下直接下载xcode的地址
  8. 数字孪生智慧园区能源管理系统
  9. 线上数据库增加字段导致服务请求超时总结
  10. 从社区报告看未来20年美国AI研究战略
  11. php win8环境搭建
  12. 微信直播监控服务器,HTML5微信网页调用监控直播代码接口文档v3.02
  13. 每天五分钟机器学习:评价算法模型常用的数值评估方式——F1值
  14. 检测ip和port是否可连接
  15. MODIS标准数据产品分级
  16. 在Docker中配置AdGuard Home
  17. linux与windows内核哪个难学,国产操作系统为何都基于Linux内核?又和Windows像?
  18. nRF51822定时器设置
  19. 使用loadrunner javavuser协议开发脚本实战
  20. 解决Themida加壳程序在VMware虚拟机无法运行问题_HS_TMD

热门文章

  1. 机器人点焊枪接线_用于焊接机器人焊枪工具点及工件坐标系标定装置及方法与流程...
  2. 单件模式(单例模式)
  3. 将模板方法模式应用到kmeans聚类算法
  4. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
  5. HDU1576(欧几里得算法)
  6. 动态资源Servlet接口
  7. List集合相关应用
  8. spring 配置只读事务_只读副本和Spring Data第1部分:配置数据库
  9. jdk11 javafx_JDK 11上的JavaFX
  10. 你只是看起来很努力_我的方法在这方面看起来很大吗?