我是Coda Hale Metrics的新手。我创建了一个示例spring应用程序,它有一个简单的RESTful web服务方法。
我使用了Coda Hale Metrics framework提供的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) 当前计数器显示自服务器启动以来发出的请求总数。是否有任何方法可以获取特定报告期内发出的请求数(例如:-前30秒计数=计数1,后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
*/
}
我感谢你在这方面的指导。
谢谢
度量库的当前名称是Dropwizard metrics(仅提及它,因为您可能使用的是旧版本)。
至于3)如果我是你,我会查看这个项目以向Cassandra报告,以及这个项目以向Elasticsearch报告。您可以在此处找到如上所述的第三方模块列表。
我不知道有哪个项目将数据报告给关系数据库。
向Elasticsearch报告可能非常有吸引力,因为您可以设置Kibana以立即可视化您的数据(可能在Graphite/Grafana中难以实现)
1) 是否有办法获得特定报告期内提出的请求数量?
不是直接从计数器。但是,计时器或计时器输出一个“m1_rate”,它应该是过去一分钟内的呼叫计数。
通常,我会定期收集计数器的值,并针对我的指标数据库编写查询来执行这种分析。
2)当然不是。这不是定时器的用途。想想看:你可能在一个报告窗口内对定时器进行了数百万次调用。保留所有这些数据既会增加内存中定时器的大小,也会增加计算其报告值的复杂性。
如果您确实需要每个请求的时间,那么这是一项用于日志记录或审核的工作。您还可以记录请求的一些独特的识别特征,以帮助您沿着各个轴汇总性能。
请注意,您可以通过计时器报告的各种速率和仪表来收集您正在寻找的一些信息,例如,如果您知道1000个请求发生在最后一分钟(因为m1_rate是16.6赫兹或每分钟1000个请求),并且您知道第50个百分位数时间是10毫秒,第99个百分位数是100毫秒,您可以假设至少有500个请求在10毫秒或更短时间内完成,10个或更多请求在100毫秒或更长时间内完成。
3) 当然可以。DW Reporters是可插拔和疯狂的基础,你可以在一天内编写一个(假设你找不到一个可接受的开放产品)。
但是IMO,持久化指标的最佳位置是特定于指标的数据库。DropWizard包中内置了两个记者来帮助解决这个问题:一个Ganglia记者和一个Graphite记者。
使用其中一种工具的优点是,它们是为有效存储、检索和应用时间序列数据上的函数而构建的。考虑一下:你有一个计数器,你想把它随时间的变化率绘制出来。使用Graphite,只需将调用包装为使用导数()绘制值,然后bam,就可以得到速率。我不知道如何在SQL中执行该操作,可以理解,SQL更关心的是集合而不是序列。
问题内容: 我试图找出一种方法来保持我的变量与页面刷新/跨控制器。我的工作流程是 用户通过Facebook登录并获得访问令牌 用户访问令牌将与每个请求一起使用 我尝试了两种方法, 1-将令牌分配给 不工作 2-使用 但是问题是,如果刷新页面,该页面将变为空白。我是新手,无法找到刷新页面后保留数据的方法 任何帮助将非常感激 问题答案: 您可以使用。真的很容易使用。
在NSLayoutConstraint之前的时间里,这是可能的,因为保留了NSWindow的大小和状态—正在寻找一种优雅的方法来实现这一点 有没有办法在应用程序退出时保存,并在启动时再次恢复它们?
我正在尝试使用codahale metrics向一个普通的Java应用程序添加指标。我想使用@Timed注释,但是我不清楚它使用哪个MetricRegistry,或者如何告诉它使用哪个MetricRegistry。该应用程序是一个普通的Java 8应用程序,用Maven 3构建,没有Spring,没有Hibernate。 我无法在dropwizard文档中找到有关如何实现@Timed的任何文档:h
Table of Contents Request variables[页面请求变量](译注:就是get,post,server,session等变量) {$smarty.now} {$smarty.const} {$smarty.capture} {$smarty.config} {$smarty.section}, {$smarty.foreach} {$smarty.template} Th
我有一个ECS服务向CloudWatch报告通过Codahale指标收集的指标。一些指标是计数,例如向外部服务发出的请求计数。每个服务实例都维护并向CloudWatch报告自己的计数。据我所知,这意味着CloudWatch中计数的值是每个服务的个人计数,无法查看(例如总数)。如果每个实例发出300个请求,那么报告的值将是300个,但无法将其相加为900个。 修复它的最佳方法是什么?将带有 ecs
问题内容: 是否可以通过java的辅助函数保留信息,而无需使用静态变量。 例如, 也就是说,我想更新变量v而不丢失每个递归情况的信息,而不必访问函数外部的变量。 问题答案: 忘记所有告诉您声明属性或在每次递归调用中更新可变对象的答案。在真正的功能性递归样式中,您可以通过将信息作为参数和/或返回类型传递来“保留”信息。 让我用一个简单的示例进行说明,假设您要递归地计算中的元素之和。在这里, 状态 (