我是Coda Hale Metrics的新手。我创建了一个示例spring应用程序,它具有简单的RESTful Web服务方法。
我使用了Coda Hale Metrics框架提供的Meter,Timer和Counter工具来跟踪请求数量,请求比率和请求持续时间。目前,我使用Console Reporter of Metrics将这些信息输出到控制台(请参阅下面的代码)。
@Override
public void configureReporters(MetricRegistry metricRegistry) {
registerReporter(ConsoleReporter.forRegistry(metricRegistry).build())
.start(30, TimeUnit.SECONDS);
}
关于Coda Hale Metrics我几乎没有问题。
(1)目前计数器显示总数没有。服务器启动后发出的请求有没有办法得到否。在特定报告期内提出的请求(例如: - 计数第1 30秒=计数1,计数第2 30秒=计数2等等)
(2)是否可以使用计时器获取每个请求的持续时间?目前,计时器显示所有请求的最小,最大和平均费率。
(3)是否有可能将这些度量数据保存到外部数据库中(例如: - 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
*/
}
感谢您对此的指导。
感谢。
答案 0 :(得分:2)
1)有没有办法得到否。在特定报告期内提出的请求?
不是直接来自柜台。但是,仪表或定时器输出“m1_rate”,它应该是过去一分钟内的呼叫计数。
通常,我会定期收集计数器的值,并针对我的指标数据库编写查询以执行此类分析。
2)地狱没有。这不是Timer的用途。想一想:在报告窗口中,您可能会有数百万次调用Timer。保留所有这些数据会增加内存中Timer的大小以及计算其报告值的复杂性。
如果您确实需要每个请求的时间,这是一项记录或审核的工作。您还可以记录请求的一些独特识别特征,以帮助您沿各个轴汇总性能。
请注意,您可以通过针对计时器报告的各种费率和计量表来收集您正在寻找的某些正在收集请求时间的英特尔。例如,如果您知道最后一分钟发生了1000个请求(因为m1_rate是16.6 Hz或每分钟1000个请求),并且您知道第50个百分点时间是10毫秒且第99个百分点是100毫秒,则您可以假设至少500个请求在10毫秒或更短时间内完成,10个或更多请求在100毫秒或更长时间内完成。
3)当然。 DW记者是可插拔的疯狂基本的,你可以在一天内写一个(假设你找不到可接受的公开发行)。
BUt IMO,持久指标的最佳位置是指标特定的数据库。 DropWizard包中内置了两个记者,可以帮助解决这个问题:Ganglia记者和Graphite记者。
使用这些工具之一的优势在于它们是为了有效存储,检索和应用时间序列数据而构建的。考虑一下:你有一个计数器,你想要绘制一段时间内的变化率。使用Graphite,您只需将您的调用包装为使用衍生()和bam绘制值,您就可以获得该速率。我不知道我是如何在SQL中执行该操作的,这可以理解为更关注集合而不是系列。
答案 1 :(得分:0)
指标库的当前名称为<html>
<head>
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
</script>
</head>
<body>
Select Date: <input type="text" id="datepicker">
</body>
</html>
(因为您可能使用旧版本,所以只提及它。)
至于 3)如果我是你,我会查看this项目,向Cassandra和this项目报告,以便向Elasticsearch报告。您可以找到上述第三方模块列表here。
我不知道有任何项目将数据报告给关系数据库。
向Elasticsearch报告可能非常有吸引力,因为您可以设置Kibana以立即可视化您的数据(可能采用Graphite / Grafana中很难的方式)