在应用程序中,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析。在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如一个系统后台服务,我们可能需要了解一些实时监控的数据例如
1、每秒钟的请求数是多少(TPS)?
2、平均每个请求处理的时间?
3、请求处理的最长耗时?
4.请求处理的响应的直方图?
5、请求处理正确响应率?
6、等待处理的请求队列长度?
7、查看整个系统的的CPU使用率、内存占用、jvm运行情况;以及系统运行出错率等等一系列的实时数据采集时,最简单的方法就是在系统的入口、出口和关键位置设置埋点,然后将采集到的信息发送到实时监控平台或者存入到缓存和DB中做进一步的分析和展示。
Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成各项数据的监控。
详见官方文档:https://metrics.dropwizard.io/3.1.0/manual/core/
一.Metrice 工具类库的介绍
Metrics提供5种基本的度量类型:Meters Gauges Counters Histograms 和 Timers
1.设置maven依赖
<dependencies> <dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-core</artifactId> <version>3.2.6</version> </dependency> <dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-healthchecks</artifactId> <version>3.2.6</version> </dependency> </dependencies>
2.Meters 的介绍与使用
//Meter(测量)是一种只能自增的计数器,通常用来度量一系列事件发生的概率。它提供了平均速率,以及指数平滑平均速率,以及采样后的1分钟,5分钟,15分钟的样例。 public class MetricsExample { //创建注册表 private final static MetricRegistry registry = new MetricRegistry(); //创建tps测量表 private final static Meter requestMeter = registry.meter("tps"); //创建异常测量表 private final static Meter errorMeter = registry.meter("err_request"); public static void main(String[] args) { //数据生成报告(按每分钟来统计) ConsoleReporter report = ConsoleReporter.forRegistry(registry) .convertRatesTo(TimeUnit.MINUTES) .convertDurationsTo(TimeUnit.MINUTES) .build(); report.start(10, TimeUnit.SECONDS); //每10秒将数据打印到控制台上 for(;;){ //模拟一直调用请求 getAsk(); //发送请求 randomSleep(); //间隔的发送请求 } } //处理请求方法 public static void getAsk(){ try { requestMeter.mark(); randomSleep(); int x = 10/ThreadLocalRandom.current().nextInt(6); } catch (Exception e) { System.out.println("Error"); errorMeter.mark(); } } //模拟处理请求耗时 public static void randomSleep(){ try { TimeUnit.SECONDS.sleep(ThreadLocalRandom.current().nextInt(10)); //随机休眠时间 } catch (InterruptedException e) { e.printStackTrace(); } } }
//打印结果如下
19-6-4 16:38:47 ================================================================
-- Meters ----------------------------------------------------------------------
err_request
count = 1
mean rate = 1.50 events/minute
1-minute rate = 0.75 events/minute
5-minute rate = 0.19 events/minute
15-minute rate = 0.07 events/minute
tps
count = 4
mean rate = 5.99 events/minute
1-minute rate = 8.85 events/minute
5-minute rate = 11.24 events/minute
15-minute rate = 11.74 events/minute
3.gauge的介绍与使用
3.1 gauge的使用
/** * @des gauge的使用 * @author zhao * @date 2019年6月14日上午12:08:02 * Gauge是一个最简单的计量,一般用来统计瞬时状态的数据信息 * 例:某一时刻的集合中的大小 */ public class GaugeExample { //定义度量中心