度量指標(biāo)(Metrics)
Spring Boot執(zhí)行器包括一個支持'gauge'和'counter'級別的度量指標(biāo)服務(wù)搏熄。'gauge'記錄一個單一值;'counter'記錄一個增量(增加或減少)生巡。同時,Spring Boot提供一個PublicMetrics接口见妒,你可以實現(xiàn)它孤荣,從而暴露以上兩種機(jī)制不能記錄的指標(biāo)。
所有HTTP請求的指標(biāo)都被自動記錄须揣,所以如果點擊 metrics 端點盐股,你可能會看到類似以下的響應(yīng):
{
"counter.status.200.root": 20,
"counter.status.200.metrics": 3,
"counter.status.200.star-star": 5,
"counter.status.401.root": 4,
"gauge.response.star-star": 6,
"gauge.response.root": 2,
"gauge.response.metrics": 3,
"classes": 5808,
"classes.loaded": 5808,
"classes.unloaded": 0,
"heap": 3728384,
"heap.committed": 986624,
"heap.init": 262144,
"heap.used": 52765,
"mem": 986624,
"mem.free": 933858,
"processors": 8,
"threads": 15,
"threads.daemon": 11,
"threads.peak": 15,
"uptime": 494836,
"instance.uptime": 489782,
"datasource.primary.active": 5,
"datasource.primary.usage": 0.25
}
此處我們可以看到基本的 memory , heap 耻卡, class loading 疯汁, processor 和 thread pool 信息,連同一些HTTP指標(biāo)卵酪。在該實例中幌蚊, root ('/')谤碳, /metrics URLs分別返回20次,3次 HTTP 200 響應(yīng)溢豆。同時可以看到 root URL返回了4次 HTTP 401 (unauthorized)響應(yīng)蜒简。雙asterix(star-star)來自于被Spring MVC /** 匹配到的一個請求(通常為一個靜態(tài)資源)。
gauge 級別展示了一個請求的最后響應(yīng)時間沫换。所以臭蚁, root 的最后請求被響應(yīng)耗時2毫秒, /metrics 耗時3毫秒讯赏。
系統(tǒng)指標(biāo)
- Spring Boot暴露以下系統(tǒng)指標(biāo):
系統(tǒng)內(nèi)存總量(mem)垮兑,單位:Kb
空閑內(nèi)存數(shù)量(mem.free),單位:Kb
處理器數(shù)量(processors)
系統(tǒng)正常運行時間(uptime)漱挎,單位:毫秒
應(yīng)用上下文(就是一個應(yīng)用實例)正常運行時間(instance.uptime)系枪,單位:毫秒
系統(tǒng)平均負(fù)載(systemload.average)
堆信息(heap,heap.committed磕谅,heap.init私爷,heap.used),單位:Kb
線程信息(threads膊夹,thread.peak衬浑,thead.daemon)
類加載信息(classes,classes.loaded放刨,classes.unloaded)
垃圾收集信息(gc.xxx.count, gc.xxx.time)
數(shù)據(jù)源指標(biāo)
Spring Boot會為你應(yīng)用中定義的支持的DataSource暴露以下指標(biāo):
最大連接數(shù)(datasource.xxx.max)
最小連接數(shù)(datasource.xxx.min)
活動連接數(shù)(datasource.xxx.active)
連接池的使用情況(datasource.xxx.usage)所有的數(shù)據(jù)源指標(biāo)共用 datasoure. 前綴工秩。該前綴對每個數(shù)據(jù)源都非常合適:
如果是主數(shù)據(jù)源(唯一可用的數(shù)據(jù)源或存在的數(shù)據(jù)源中被@Primary標(biāo)記的)前綴為datasource.primary
如果數(shù)據(jù)源bean名稱以dataSource結(jié)尾,那前綴就是bean的名稱去掉dataSource的部分(例如进统,batchDataSource的前綴是datasource.batch)
其他情況使用bean的名稱作為前綴通過注冊一個自定義版本的DataSourcePublicMetrics bean助币,你可以覆蓋部分或全部的默認(rèn)行為。默認(rèn)情況下螟碎,Spring Boot提供支持所有數(shù)據(jù)源的元數(shù)據(jù)眉菱;如果你喜歡的數(shù)據(jù)源恰好不被支持,你可以添加另外的DataSourcePoolMetadataProvider beans掉分。具體參考DataSourcePoolMetadataProvidersConfiguration俭缓。
Tomcat session指標(biāo)
- 如果你使用Tomcat作為內(nèi)嵌的servlet容器,session指標(biāo)將被自動暴露出去酥郭。 httpsessions.active 和 httpsessions.max 提供了活動的和最大的session數(shù)量尔崔。
記錄自己的指標(biāo)
想要記錄你自己的指標(biāo),只需將CounterService或GaugeService注入到你的bean中褥民。CounterService暴露increment,decrement和reset方法洗搂;GaugeService提供一個submit方法消返。
下面是一個簡單的示例载弄,它記錄了方法調(diào)用的次數(shù):
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.metrics.CounterService;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final CounterService counterService;
@Autowired
public MyService(CounterService counterService) {
this.counterService = counterService;
}
public void exampleMethod() {
this.counterService.increment("services.system.myservice.invoked");
}
}
注:你可以將任何的字符串用作指標(biāo)的名稱,但最好遵循所選存儲或圖技術(shù)的指南撵颊。Matt Aimonetti’s Blog中有一些好的關(guān)于圖(Graphite)的指南宇攻。
添加你自己的公共指標(biāo)
- 想要添加額外的,每次指標(biāo)端點被調(diào)用時都會重新計算的度量指標(biāo)倡勇,只需簡單的注冊其他的PublicMetrics實現(xiàn)bean(s)逞刷。默認(rèn)情況下,端點會聚合所有這樣的beans妻熊,通過定義自己的MetricsEndpoint可以輕易改變這種情況夸浅。
指標(biāo)倉庫
通過綁定一個MetricRepository來實現(xiàn)指標(biāo)服務(wù)。 MetricRepository 負(fù)責(zé)存儲和追溯指標(biāo)信息扔役。Spring Boot提供一個 InMemoryMetricRepository 和一個 RedisMetricRepository (默認(rèn)使用in-memory倉庫)帆喇,不過你可以編寫自己的 MetricRepository 。 MetricRepository 接口實際是 MetricReader 接口和 MetricWriter 接口的上層組合亿胸。具體參考Javadoc
沒有什么能阻止你直接將 MetricRepository 的數(shù)據(jù)導(dǎo)入應(yīng)用中的后端存儲坯钦,但我們建議你使用默認(rèn)的 InMemoryMetricRepository (如果擔(dān)心堆使用情況,你可以使用自定義的Map實例)侈玄,然后通過一個scheduled export job填充后端倉庫(意思是先將數(shù)據(jù)保存到內(nèi)存中婉刀,然后通過異步j(luò)ob將數(shù)據(jù)持久化到數(shù)據(jù)庫,可以提高系統(tǒng)性能)序仙。通過這種方
式突颊,你可以將指標(biāo)數(shù)據(jù)緩存到內(nèi)存中,然后通過低頻率或批量導(dǎo)出來減少網(wǎng)絡(luò)擁堵诱桂。Spring Boot提供一個 Exporter 接口及一些幫你開始的基本實現(xiàn)洋丐。
Dropwizard指標(biāo)
Dropwizard ‘Metrics’庫的用戶會發(fā)現(xiàn)Spring Boot指標(biāo)被發(fā)布到了 com.codahale.metrics.MetricRegistry 。當(dāng)你聲明對 io.dropwizard.metrics:metrics-core 庫的依賴時會創(chuàng)建一個默認(rèn)的 com.codahale.metrics.MetricRegistry Spring bean挥等;如
果需要自定義友绝,你可以注冊自己的@Bean實例。來自于 MetricRegistry 的指標(biāo)也是自動通過 /metrics 端點暴露的肝劲。用戶可以通過使用合適類型的指標(biāo)名稱作為前綴來創(chuàng)建Dropwizard指標(biāo)(比如迁客, histogram.* , meter.* )。
消息渠道集成
- 如果你的classpath下存在'Spring Messaging' jar辞槐,一個名為 metricsChannel 的 MessageChannel 將被自動創(chuàng)建(除非已經(jīng)存在一個)掷漱。此外,所有的指標(biāo)更新事件作為'messages'發(fā)布到該渠道上榄檬。訂閱該渠道的客戶端可以進(jìn)行額外的分析或行動卜范。