日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
SpringBoot健康檢查,如何與容器配合?

本文轉(zhuǎn)載自微信公眾號(hào)「小姐姐味道」,作者小姐姐養(yǎng)的狗 。轉(zhuǎn)載本文請(qǐng)聯(lián)系小姐姐味道公眾號(hào)。

監(jiān)控的重要性就不必多說(shuō)了吧,不要再花功夫開(kāi)會(huì)討論它的必要性了,當(dāng)你線上遇到問(wèn)題,就不會(huì)再懷疑監(jiān)控是浪費(fèi)開(kāi)發(fā)成本的建設(shè)。監(jiān)控讓人告別了靠“猜”來(lái)維持的救火現(xiàn)狀,它能夠留下證據(jù),來(lái)支撐我們后續(xù)的分析。

作為監(jiān)控的首要目標(biāo),服務(wù)的存活性,也就是它的健康狀況,成為了重中之重。SpringBoot可以通過(guò)簡(jiǎn)單的參數(shù),來(lái)開(kāi)啟健康檢查,并能夠和主流的監(jiān)控系統(tǒng)集成起來(lái)。

1. 監(jiān)控開(kāi)啟

在Spring中,是使用actuator組件,來(lái)做監(jiān)控等相關(guān)操作。可以在pom中加入下面的starter:

 
 
 
 
  1.  
  2.   org.springframework.boot 
  3.   spring-boot-starter-actuator 
  4.  

對(duì)于gradle來(lái)說(shuō),加入下面這個(gè)。

 
 
 
 
  1. dependencies { 
  2.   compile("org.springframework.boot:spring-boot-starter-actuator") 

訪問(wèn)/actuator/health,即可獲取項(xiàng)目的健康狀況。

 
 
 
 
  1. {"status":"UP"} 

在application.yml文件里,加入如下的內(nèi)容:

 
 
 
 
  1. management: 
  2.   endpoint: 
  3.     health: 
  4.       show-details: always 

再次訪問(wèn)這個(gè)接口,將輸出詳細(xì)的內(nèi)容。包括DB的狀態(tài)、磁盤(pán)狀態(tài)等??梢钥吹?,最外層的status,其實(shí)是內(nèi)部各個(gè)組件狀態(tài)的集合。

 
 
 
 
  1.     "status":"UP", 
  2.     "components":{ 
  3.         "db":{ 
  4.             "status":"UP", 
  5.             "details":{ 
  6.                 "database":"H2", 
  7.                 "validationQuery":"isValid()" 
  8.             } 
  9.         }, 
  10.         "diskSpace":{ 
  11.             "status":"UP", 
  12.             "details":{ 
  13.                 "total":250685575168, 
  14.                 "free":31373905920, 
  15.                 "threshold":10485760, 
  16.                 "exists":true 
  17.             } 
  18.         }, 
  19.         "ping":{ 
  20.             "status":"UP" 
  21.         } 
  22.     } 

2. 自定義Indicator

這些功能,是由Indicators來(lái)實(shí)現(xiàn)的(HealthIndicator)。比如下面這些:

  • DataSourceHealthIndicator
  • DiskSpaceHealthIndicator
  • CouchbaseHealthIndicator
  • MongoHealthIndicator
  • RedisHealthIndicator
  • CassandraHealthIndicator

如果你是用的是組件提供的starter,這些Indicator就會(huì)在/health接口進(jìn)行聚合,如果你不想要監(jiān)控某個(gè)組件,可以在配置中把它關(guān)閉。

 
 
 
 
  1. management: 
  2.   health: 
  3.     mongo: 
  4.       enabled: false 

明白了這個(gè)道理,在做一些組件的時(shí)候時(shí)候,就可以通過(guò)這種方式,來(lái)提供組件自帶的健康檢查:只需要實(shí)現(xiàn)HealthIndicator接口就可以了。代碼樣例如下:

 
 
 
 
  1. @Component 
  2. @Slf4j 
  3. public class X implements HealthIndicator { 
  4.     @Override 
  5.     public Health health() { 
  6.         try { 
  7.             //檢查組件狀態(tài)異常信息 
  8.         } catch (Exception e) { 
  9.             log.warn("Failed to connect to: {}", URL); 
  10.             return Health.down() 
  11.                     .withDetail("error", e.getMessage()) 
  12.                     .build(); 
  13.         } 
  14.         return Health.up().build(); 
  15.     } 

3. 接入監(jiān)控系統(tǒng)

更多情況,我們是希望把業(yè)務(wù)監(jiān)控的數(shù)據(jù),使用專(zhuān)業(yè)的監(jiān)控組件收集起來(lái)。這個(gè)在SpringBoot中,可以使用micrometer來(lái)實(shí)現(xiàn)。

以最流行的prometheus為例,在pom里增加下面的內(nèi)容。

 
 
 
 
  1.  
  2.     io.micrometer 
  3.     micrometer-registry-prometheus 
  4.  

當(dāng)然,我們也要在yaml里配置一些內(nèi)容。它現(xiàn)在看起來(lái)長(zhǎng)這個(gè)樣子:

 
 
 
 
  1. management: 
  2.   endpoints: 
  3.     web: 
  4.       exposure: 
  5.         include: health,info,prometheus 
  6.   endpoint: 
  7.     health: 
  8.       show-details: always 

這時(shí)候,訪問(wèn)/actuator/prometheus,即可獲取prometheus格式的監(jiān)控?cái)?shù)據(jù)。

類(lèi)似于下面這種:

 
 
 
 
  1. jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 0.0 
  2. jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 2.9444904E7 
  3. jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 6.829E7 
  4. jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 5.917196E7 
  5. jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 1.0929088E7 
  6. jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 8420512.0 

在prometheus的target頁(yè)面,可以看到下面的信息:

最終在Grafana里,長(zhǎng)的更加妖艷一些。

那它都能監(jiān)控一些什么東西呢?我們來(lái)看一下:

  • 服務(wù)節(jié)點(diǎn)基本信息,包括內(nèi)存CPU網(wǎng)絡(luò)IO等
  • JVM堆棧信息
  • JVM GC信息,STW信息
  • 默認(rèn)HikariCP的連接池信息
  • HTTP請(qǐng)求接口信息(最大耗時(shí),QPS最高)
  • Tomcat容器監(jiān)控
  • Logback日志打印監(jiān)控(各級(jí)別條數(shù))
  • ...其他

可以看到,只需要暴露這么一個(gè)接口,就可以對(duì)項(xiàng)目中的組件,進(jìn)行比較全面的掌控。

4. 與容器配合

最后一點(diǎn),由于SpringBoot服務(wù),經(jīng)常會(huì)發(fā)布到一些容器中,比如docker。這個(gè)時(shí)候,就要用到probes配置(kube有相同的概念)。probes是探測(cè)的意思,用來(lái)區(qū)分Liveness和Readiness兩種狀態(tài)。

最終的配置如下:

 
 
 
 
  1. management: 
  2.   health: 
  3.     probes: 
  4.       enabled: true 
  5.   endpoints: 
  6.     web: 
  7.       exposure: 
  8.         include: health,info,prometheus 
  9.   endpoint: 
  10.     health: 
  11.       show-details: always 

這時(shí)候,我們將在瀏覽器的接口中獲取兩個(gè)分組,展示如下:

  • http://localhost:8080/actuator/health/liveness
  • http://localhost:8080/actuator/health/readiness

這兩個(gè)鏈接,前者用于判斷容器是否應(yīng)該重啟;后者判斷服務(wù)是否可用,如果可用,將開(kāi)始接受外部的請(qǐng)求。

End

對(duì)于規(guī)模比較小的SpringBoot應(yīng)用來(lái)說(shuō),使用SpringBootAdmin一類(lèi)的監(jiān)控,就已經(jīng)足夠了。但如果你的企業(yè)是集中式部署,節(jié)點(diǎn)多且變化頻繁,一個(gè)統(tǒng)一的監(jiān)控建設(shè)平臺(tái)是非常必要的。

除了Prometheus,SpringBoot的Metrics還支持以下組件:

  • AppOptics
  • Atlas
  • Datadog
  • Dynatrace
  • Elastic
  • Ganglia
  • Graphite
  • Humio
  • Influx
  • JMX
  • KairosDB
  • New Relic
  • Prometheus
  • SignalFx
  • Simple (in-memory)
  • Stackdriver
  • StatsD
  • Wavefront

你熟悉的組件,有沒(méi)有它的身影呢?

作者簡(jiǎn)介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個(gè)人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。


當(dāng)前文章:SpringBoot健康檢查,如何與容器配合?
文章起源:http://www.dlmjj.cn/article/dhogpce.html