5

我是 Coda Hale Metrics 的新手。我创建了一个示例 spring 应用程序,它具有一个简单的 RESTful Web 服务方法。

我使用了 Coda Hale Metrics 框架提供的 Meter、Timer 和 Counter 工具来跟踪请求数量、请求比率和请求持续时间。目前我使用 Metrics 的控制台报告器将这些信息输出到控制台(请在下面找到代码)。

@Override
    public void configureReporters(MetricRegistry metricRegistry) {

        registerReporter(ConsoleReporter.forRegistry(metricRegistry).build())
                .start(30, TimeUnit.SECONDS);
    }

我对 Coda Hale Metrics 有几个问题。

(1) 目前计数器显示总数。自服务器启动后发出的请求。有什么办法可以得到否。在特定报告期间发出的请求数(例如:- 第 1 个 30 秒的计数 = count1,第 2 个 30 秒的计数 = count2 等...)

(2) 是否可以使用Timer获取每个请求的持续时间?目前 Timer 显示所有请求的最小、最大和平均速率。

(3) 是否有可能将这些 Metrics 数据持久保存到外部数据库中(例如:- MySQL)?

下面是我的 REST 服务方法。

@RequestMapping(value = "/examplerest", method = RequestMethod.GET)
    @ResponseBody
    @Metered(name="exampleRestMetered")
    @Timed(name="exampleRestTimed")
    @Counted(name="exampleRestCounted", monotonic=true)
    public String exampleRest(
            HttpServletResponse response) {

/**
some logics here
*/
}

感谢您对此的指导。

谢谢。

4

2 回答 2

2

1)有什么办法可以得到否。在特定报告期内提出的请求?

不是直接来自柜台。但是,仪表或计时器会输出“m1_rate”,它应该是过去一分钟内的呼叫计数。

通常,我会定期收集计数器的值并针对我的指标数据库编写查询以执行此类分析。

2)地狱没有。这不是计时器的用途。想一想:您可能会在报告窗口内对 Timer 进行数百万次调用。保留所有这些数据既会增加内存中 Timer 的大小,也会增加计算其报告值的复杂性。

如果您确实需要时间来处理每个请求,那么这是一项记录或审计的工作。您还可以记录请求的一些独特识别特征,以帮助您沿各个轴汇总性能。

请注意,您可以通过为计时器报告的各种速率和计量器来组装您正在寻找的一些英特尔 w/r/t 收集请求时间。例如,如果您知道最后一分钟发生了 1000 个请求(因为 m1_rate 是 16.6 Hz 或每分钟 1000 个请求),并且您知道第 50 个百分位的时间是 10ms,而第 99 个百分位的时间是 100ms,您可以假设至少有 500 个请求在 10 毫秒或更短的时间内完成,并且 10 个或更多请求在 100 毫秒或更长时间内完成。

3)当然。DW Reporters 是可插拔的,而且非常基本,您可以在一天内编写一个(假设您找不到可接受的公开发行)。

但是在 IMO 中,保存指标的最佳位置是特定于指标的数据库。DropWizard 包中内置了两个 Reporter 来帮助解决这个问题:一个 Ganglia 报告器和一个 Graphite 报告器。

使用其中一种工具的优势在于,它们是为高效存储、检索和应用时间序列数据上的函数而构建的。考虑:你有一个计数器,你想绘制它随时间的变化率。使用 Graphite,您只需将调用包装起来,用导数()和 bam 绘制值,您就知道了。我不知道如何在 SQL 中执行该操作,这是可以理解的,它更关心 Sets 而不是 Series。

于 2016-01-13T20:36:38.973 回答
0

指标库的当前名称是Dropwizard Metrics(仅提及它,因为您可能使用的是旧版本)。

至于3)如果我是你,我会查看这个项目以向 Cassandra 报告,并查看这个项目以向 Elasticsearch 报告。您可以在此处找到上述第三方模块的列表。

我不知道有任何项目将数据报告给关系数据库。

向 Elasticsearch 报告可能非常有吸引力,因为您可以设置Kibana以立即可视化您的数据(可能以在 Graphite/Grafana 中难以实现的方式)

于 2015-09-04T12:28:13.603 回答