1. Metrics是什么?
它是一个工具集,不是一个框架。它在kafka,spark,hadoop,flink和cassandra等流行框架中都得到了广泛的应用。
官网:https://metrics.dropwizard.io
2. Metrics之Meter
meter用于统计基于时间的时间率(event rate over time),主要包含:
(1)监控开始至当前总共接收的时间数量
(2)估算的平均事件率
(3)估算的1min内的事件率
(4)估算的5min内的事件率
(5)估算的15min内的事件率
2.1 代码示例
(1)pom依赖
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.2.6</version>
</dependency>
(2)代码
public class MeterMetricsDemo {
//metrics注册中心
private static final MetricRegistry metrics = new MetricRegistry();
//创建meter类型的监控,并注册到注册中心,name会作为统计结果的标题,它用于统计请求事件率
/**
* -- Meters ----------------------------------------------------------------------
* reqRate
*/
private static final Meter reqRate = metrics.meter("reqRate");
//用于统计请求体的大小
/**
* -- Meters ----------------------------------------------------------------------
* reqSize
*/
private static final Meter reqSize = metrics.meter("reqSize");
public static void main(String[] args) {
startReport();
while (true) {
sleepRandomSeconds();
response(new byte[ThreadLocalRandom.current().nextInt(10_000_000)]);
}
}
private static void response(byte[] request){
System.out.println("==========接收到请求");
reqRate.mark();
reqSize.mark(request.length);
}
private static void startReport() {
ConsoleReporter reporter =
//给metrics设置报告模式
ConsoleReporter.forRegistry(metrics)
//设置事件率的统计事件,例如events/second,events/millisecond, events/hour...
.convertRatesTo(TimeUnit.SECONDS)
//Timer类型的metrics才会用到,meter不起作用
//.convertDurationsTo(TimeUnit.HOURS)
.build();
//设置每隔多长时间间隔打印一次报告,例如每隔3s打印一次报告
reporter.start(3, TimeUnit.SECONDS);
}
private static void sleepRandomSeconds() {
int random = ThreadLocalRandom.current().nextInt(3);
try {
TimeUnit.SECONDS.sleep(random);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(3)日志输出
==========接收到请求
==========接收到请求
==========接收到请求
22-3-31 22:09:46 ===============================================================
-- Meters ---
-------------------------------------------------------------------
reqRate
count = 4
mean rate = 1.15 events/second
1-minute rate = 0.00 events/second
5-minute rate = 0.00 events/second
15-minute rate = 0.00 events/second
reqSize
count = 20404333
mean rate = 5858540.55 events/second
1-minute rate = 0.00 events/second
5-minute rate = 0.00 events/second
15-minute rate = 0.00 events/second
==========接收到请求
22-3-31 22:09:49 ===============================================================
-- Meters ----------------------------------------------------------------------
reqRate
count = 5
mean rate = 0.77 events/second
1-minute rate = 1.00 events/second
5-minute rate = 1.00 events/second
15-minute rate = 1.00 events/second
reqSize
count = 23931535
mean rate = 368