學習 Metrics(一):初識 Metrics
ofollow,noindex" target="_blank">Metrics 是 Java 用於監控系統度量指標的第三方庫,被廣泛應用於知名開源專案中,例如:Apache Hadoop、Apache Spark 中。
依賴
編輯pom.xml
檔案:
<dependencies> <dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-core</artifactId> <version>${metrics.version}</version> </dependency> </dependencies>
當前 Metrics 最新版本為 4.0.0。
Registry
MetricRegistry
類即是 Metrics 的起始點,也是應用所有 metric 的集合。
MetricRegistry registry = new MetricRegistry();
在 Registry 內每一個 metric 都有一個獨一無二的名字,使用句點命名,例如com.dyingbleed.demo.Application.requests
。
String metricName = MetricRegistry.name(Application.class, "requests"); Meter meter = metrics.meter(metricName);
監控型別
Gauge
Gauge(測量)是最簡單的 metric 型別。它僅返回一個值。
registry.register("gauge", (Gauge<Integer>) () -> new Random().nextInt());
執行結果:
gauge value = 370907219
Counter
Counter(計數器)簡單的增減 64 位的整型。
Counter counter = registry.counter("counter"); counter.inc(); counter.inc(3); counter.dec(); counter.dec(5);
執行結果:
counter count = -2
Histogram
Histogram(分佈直方圖)度量流資料中值的分佈情況。包括最大值、最小值、平均值、標準差,還包括分位數 中位數、99 百分比等。
Histogram histogram = registry.histogram("histogram"); histogram.update(1); histogram.update(3); histogram.update(5); histogram.update(7);
執行結果:
histogram count = 4 min = 1 max = 7 mean = 4.00 stddev = 2.24 median = 5.00 75% <= 7.00 95% <= 7.00 98% <= 7.00 99% <= 7.00 99.9% <= 7.00
Meter
Meter(計量表)度量事件集發生的速率。
Meter meter = registry.meter("meter"); meter.mark();
執行結果:
meter count = 1 mean rate = 0.99 events/second 1-minute rate = 0.00 events/second 5-minute rate = 0.00 events/second 15-minute rate = 0.00 events/second
Timer
Timer(計時器)即度量了時間段內事件的分佈,也度量了事件發生的速率。
Timer timer = registry.timer("timer"); Timer.Context context = timer.time(); try { Thread.sleep(new Random().nextInt(1000)); } finally { context.stop(); }
執行結果:
timer count = 1 mean rate = 0.99 calls/second 1-minute rate = 0.00 calls/second 5-minute rate = 0.00 calls/second 15-minute rate = 0.00 calls/second min = 207.54 milliseconds max = 207.54 milliseconds mean = 207.54 milliseconds stddev = 0.00 milliseconds median = 207.54 milliseconds 75% <= 207.54 milliseconds 95% <= 207.54 milliseconds 98% <= 207.54 milliseconds 99% <= 207.54 milliseconds 99.9% <= 207.54 milliseconds
Report
Report(報告)是應用匯出指標的方式,Metrics 支援四類:JMX、命令列、SLF4J 和 CSV。
命令列:
ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build(); reporter.start(1, TimeUnit.SECONDS);