Yammer Metrics,一种监视应用程序的新方法

当您运行诸如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 {

           Counter

           private final Counter numberOfSendCharacters = Metrics.newCounter(MetricsApplication.class, 'Total-Number-Of-Characters');

           Meter

           private final Meter sendMessages = Metrics.newMeter(MetricsApplication.class, 'Sent-Messages', 'Send', TimeUnit.SECONDS);

           Timer

           private final Timer responseTime = Metrics.newTimer(MetricsApplication.class, 'Response-Time');

           private LinkedList<String> historyOfQueries = new LinkedList<String>();

           {

            Gauge

            Metrics.newGauge(MetricsApplication.class, 'lastQuery', new Gauge<String>() {

             @Override

             public 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 text

            HtmlInput queryInput = currentPage.getElementByName('q');

            queryInput.setValueAttribute(message);

            Submit the form by pressing the submit button

            HtmlSubmitInput 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值