Dropwizard-Metric学习
2018-12-25 本文已影响0人
望山不是山
Metrics 指标
1.Meter TPS计算器
meter是用来测量随时间推移的事件速率(例如:TPS、QPS)。这个指标能反应系统当前的处理能力,帮助我们判断资源是否已经不足。Meters本身是一个自增计数器。除了平均速率,meter还追踪了1、5和15分钟的移动平均值。
应用运行的过程中,在console中反馈的信息:
-- Meters ----------------------------------------------------------------------
request
count = 21055
mean rate = 133.35 events/second
1-minute rate = 121.66 events/second
5-minute rate = 36.99 events/second
15-minute rate = 13.33 events/second
Gauges 度量
除了Metrics提供的几个度量类型,我们可以通过Gauges完成自定义的度量类型。比方说很简单的,我们想看我们缓存里面的数据大小,就可以自己定义一个Gauges。
public class QueueManager {
private final Queue queue;
public QueueManager(MetricRegistry metrics, String name) {
this.queue = new Queue();
metrics.register(MetricRegistry.name(QueueManager.class, name, "size"),
new Gauge<Integer>() {
@Override
public Integer getValue() {
return queue.size();
}
});
}
}
这样Metrics就会一直监控Queue的大小。
Counter 计数器
Counter的本质就是一个AtomicLong实例,可以增加或者减少值,可以用它来统计队列中Job的总数。
private final Counter pendingJobs = metrics.counter(name(QueueManager.class, "pending-jobs"));
public void addJob(Job job) {
pendingJobs.inc();
queue.offer(job);
}
public Job takeJob() {
pendingJobs.dec();
return queue.take();
}
Histogram 直方图数据
直方图是一种非常常见的统计图表,Metrics通过这个Histogram这个度量类型提供了一些方便实时绘制直方图的数据。直方图度量流中的数据大小,例如
private final Histogram responseSizes = metrics.histogram(name(RequestHandler.class, "response-sizes"));
public void handleRequest(Request request, Response response) {
// etc
responseSizes.update(response.getContent().length);
}
直方图会度量reponses中的字节大小
-- Histograms ------------------------------------------------------------------
response-sizes
count = 21051
min = 0
max = 9
mean = 4.55
stddev = 2.88
median = 4.00
75% <= 7.00
95% <= 9.00
98% <= 9.00
99% <= 9.00
99.9% <= 9.00
Timer 计时器
Timer是一个Meter和Histogram的组合。这个度量单位可以比较方便地统计请求的速率和处理时间。对于接口中调用的延迟等信息的统计就比较方便了。如果发现一个方法的RPS(请求速率)很低,而且平均的处理时间很长,那么这个方法八成出问题了。
获取一个Timer
@Bean
public Timer responses(MetricRegistry metrics) {
return metrics.timer("executeTime");
}
在需要统计信息的位置使用这样的代码:
final Timer.Context context = responses.time();
try {
// handle request
} finally {
context.stop();
}
console中就会实时返回这个Timer的信息:
-- Timers ----------------------------------------------------------------------
executeTime
count = 21061
mean rate = 133.39 calls/second
1-minute rate = 122.22 calls/second
5-minute rate = 37.11 calls/second
15-minute rate = 13.37 calls/second
min = 0.00 milliseconds
max = 0.01 milliseconds
mean = 0.00 milliseconds
stddev = 0.00 milliseconds
median = 0.00 milliseconds
75% <= 0.00 milliseconds
95% <= 0.00 milliseconds
98% <= 0.00 milliseconds
99% <= 0.00 milliseconds
99.9% <= 0.01 milliseconds