介紹
Metrics是一個給JAVA服務的各項指標提供度量工具的包,在JAVA代碼中嵌入Metrics代碼,可以方便的對業務代碼的各個指標進行監控,同時,Metrics能夠很好的跟Ganlia、Graphite結合,方便的提供圖形化接口。基本使用方式直接將core包(目前穩定版本3.0.1)導入pom文件即可,配置如下:
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.1</version>
</dependency>
core包主要提供如下核心功能:
Metrics Registries類似一個metrics容器,維護一個Map,可以是一個服務一個實例。
支持五種metric類型:Gauges、Counters、Meters、Histograms和Timers。
可以將metrics值通過JMX、Console,CSV文件和SLF4J loggers發布出來。
五種Metrics類型:
- Gauges
Gauges是一個最簡單的計量,一般用來統計瞬時狀態的數據信息,比如系統中處於pending狀態的job。 - Counter
Counter是Gauge的一個特例,維護一個計數器,可以通過inc()和dec()方法對計數器做修改。使用步驟與Gauge基本類似,在MetricRegistry中提供了靜態方法可以直接實例化一個Counter。 - Meters
Meters用來度量某個時間段的平均處理次數(request per second),每1、5、15分鍾的TPS。比如一個service的請求數,通過metrics.meter()實例化一個Meter之后,然后通過meter.mark()方法就能將本次請求記錄下來。統計結果有總的請求數,平均每秒的請求數,以及最近的1、5、15分鍾的平均TPS。 - Histograms
Histograms主要使用來統計數據的分布情況,最大值、最小值、平均值、中位數,百分比(75%、90%、95%、98%、99%和99.9%)。例如,需要統計某個頁面的請求響應時間分布情況,可以使用該種類型的Metrics進行統計。 - Timers
Timers主要是用來統計某一塊代碼段的執行時間以及其分布情況,具體是基於Histograms和Meters來實現的。
Health Checks
Metrics提供了一個獨立的模塊:Health Checks,用於對Application、其子模塊或者關聯模塊的運行是否正常做檢測。該模塊是獨立metrics-core模塊的,使用時則導入metrics-healthchecks包。
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-healthchecks</artifactId>
<version>3.0.1</version>
</dependency>
使用起來和與上述幾種類型的Metrics有點類似,但是需要重新實例化一個Metrics容器HealthCheckRegistry,待檢測模塊繼承抽象類HealthCheck並實現check()方法即可,然后將該模塊注冊到HealthCheckRegistry中,判斷的時候通過isHealthy()接口即可。
其他支持
metrics提供了對Ehcache、Apache HttpClient、JDBI、Jersey、Jetty、Log4J、Logback、JVM等的集成,可以方便地將Metrics輸出到Ganglia、Graphite中,供用戶圖形化展示。
參考資料
http://blog.synyx.de/2013/09/yammer-metrics-made-easy-part-i/
http://blog.synyx.de/2013/09/yammer-metrics-made-easy-part-ii/