簡介
Metric是一個第三方包,用來幫助我們對應用程序的性能進行度量。曾有友商基於這個包編寫的程序還申請了專利,總之這是一個使用方便的組件。我們日常進行應用程序性能度量時,最常用的方法是打日志記錄每個交易的一些耗時數據,有了這些原始數據,自己再進行統計分析。通過使用Metrics這個包,我們可以很方便的定義一些度量值,抓取一些關鍵時點和變量的信息,還能按照自定義的周期進行總體的統計,來分析應用的性能。Metrics還能夠將這些統計信息輸出到Console、日志文件、JMX,甚至還支持以微服務的方式向外暴露數據接口,從而方便我們將這些數據接入到Grafana或自己的統計分析工具中。
快速入門
Maven配置
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>4.0.5</version>
</dependency>
本文發表時,最新版本是4.1.0
MetricRegistry
使用MetricRegistry注冊一個或多個metrics。如果需要多個報告,則需要聲明多個MetricRegistry對象。
有兩種注冊方式
MetricRegistry metricRegistry = new MetricRegistry();
Meter meter1 = new Meter();
metricRegistry.register("meter1", meter1);
Meter meter2 = metricRegistry.meter("meter2");
更為詳細的代碼示例可以參考我的Git
Gauge
Gauge能做的就是返回一個變量的瞬時值,在此基礎上還提供了RatioGauge\CachedGauge\DerivativeGauge\JmxAttributeGauge
的使用。
Meter
Meter用來度量事件並發的數量和速度。
Counter
Counter度量類型是一種特殊的Gauge度量,因為其持有的值就是一個AtomicLong,可以遞增也可以遞減。
Histgram
Histogram度量類型用於測量一個數據流各值的統計分布。其除了能夠測量最大值、最小值、平均值外,還可以測量中位數、75、90、95、98、99和99.9%等。
Histogram支持四種數據采樣方式 ExponentiallyDecayingReservior, UniformReservoir, SlidingTimeWindowReservior, SlidingWindowReservior
。
Timer
Timer度量類型包含了Meter和Histogram的統計,即比率和統計信息的綜合。
Reporter
使用Reporter可以輸出測量結果,支持ConsoleReporter, CsvReporter, Slf4Reporter, JmxReporter
等等。
更多用法
通過metrics-healthchecks
和metrics-servlets
模塊,還能支持健康檢查和微服務的數據輸出,有興趣的朋友可以繼續探索。