系統(tǒng)開發(fā)到一定的階段贱鼻,線上的機器越來越多,就需要一些監(jiān)控了滋将,除了服務器的監(jiān)控邻悬,業(yè)務方面也需要一些監(jiān)控服務。[Metrics](http://metrics.dropwizard.io/3.1.0/getting-started/)
作為一款監(jiān)控指標
的度量類庫随闽,提供了許多工具幫助開發(fā)者來完成自定義的監(jiān)控工作父丰。
Metrics的基本工具
Metrics
提供了五個基本的度量類型:
- Gauges(度量)
- Counters(計數(shù)器)
- Histograms(直方圖數(shù)據(jù))
- Meters(TPS計算器)
- Timers(計時器)
Metrics
中MetricRegistry
是中心容器,它是程序中所有度量的容器掘宪,所有新的度量工具都要注冊到一個MetricRegistry
實例中才可以使用蛾扇,盡量在一個應用中保持讓這個MetricRegistry
實例保持單例。
Meters TPS計算器
TPS計算器
這個名稱并不準確魏滚,Meters
工具會幫助我們統(tǒng)計系統(tǒng)中某一個事件的速率镀首。比如每秒請求數(shù)(TPS),每秒查詢數(shù)(QPS)等等栏赴。這個指標能反應系統(tǒng)當前的處理能力蘑斧,幫助我們判斷資源是否已經(jīng)不足。Meters
本身是一個自增計數(shù)器须眷。
通過MetricRegistry
可以獲得一個Meter
:
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">public Meter requestMeter(MetricRegistry metrics) {
return metrics.meter("request");
}</pre>
|
在請求中調(diào)用mark()
方法,來增加計數(shù)沟突,我們可以在不同的請求中添加不同的Meter
花颗,針對自己的系統(tǒng)完成定制的監(jiān)控需求。
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">@RequestMapping("/hello")
@ResponseBody
public String helloWorld() {
requestMeter.mark();
return "Hello World";
}</pre>
|
Counter 計數(shù)器
Counter
的本質(zhì)就是一個AtomicLong
實例惠拭,可以增加或者減少值扩劝,可以用它來統(tǒng)計隊列中Job的總數(shù)庸论。
通過MetricRegistry
也可以獲得一個Counter
實例。
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">public Counter pendingJobs(MetricRegistry metrics) {
return metrics.counter("requestCount");
}</pre>
|
在需要統(tǒng)計數(shù)據(jù)的位置調(diào)用inc()
和dec()
方法棒呛。
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">// 增加計數(shù)
pendingJobs.inc();
// 減去計數(shù)
pendingJobs.dec();</pre>
|
Reporter 報表
Metrics
通過報表聂示,將采集的數(shù)據(jù)展現(xiàn)到不同的位置,這里比如我們注冊一個ConsoleReporter
到MetricRegistry
中,那么console中就會打印出對應的信息簇秒。
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">public ConsoleReporter consoleReporter(MetricRegistry metrics) {
return ConsoleReporter.forRegistry(metrics)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build();
}
</pre>
|
除此之外Metrics
還支持JMX
鱼喉、HTTP
、Slf4j
等等趋观,可以訪問 http://metrics.dropwizard.io/3.1.0/manual/core/#reporters 來查看Metrics
提供的報表扛禽,如果還是不能滿足自己的業(yè)務,也可以自己繼承Metrics
提供的ScheduledReporter
類完成自定義的報表類皱坛。