一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的詳細(xì)教程
目錄閑言碎語:背景Actuator介紹Rest方法來查看Actuatorpom.xml引入Actuator依賴配置application.yml運(yùn)行項(xiàng)目Actuator配合SpringBootSecurity配置application.xml運(yùn)行項(xiàng)目配置關(guān)閉項(xiàng)目API端口配置application.yml命令行執(zhí)行post關(guān)閉指令附:Actuator端口信息附:SpringBoot自帶的健康指示器贈(zèng)言
閑言碎語:
最近刷抖音,看到了星爺?shù)暮芏嚯娪?,感嘆星爺給后世留下了很多的經(jīng)典作品,我就在想,作為一名程序員,如何留下影響后人的經(jīng)典傳世之作呢,不經(jīng)意間看到了一篇大佬的文章,已經(jīng)近百萬人瀏覽,這就是對(duì)后人的一種影響,然后就有了寫這篇博客的沖動(dòng),結(jié)合最近在學(xué)習(xí)的SpringCloud,對(duì)每一個(gè)組件的原理和使用都進(jìn)行深度的學(xué)習(xí)和理解,然后將心得寫在博客里,如果有不對(duì)的地方還請(qǐng)大佬進(jìn)行指正,小弟不勝感激
背景
微服務(wù)之后,系統(tǒng)結(jié)構(gòu)拆分隨著業(yè)務(wù)發(fā)展越來越微型化,也意味著節(jié)點(diǎn)會(huì)呈現(xiàn)幾何數(shù)量級(jí)增長。每個(gè)一個(gè)節(jié)點(diǎn)都是系統(tǒng)組成部分,如何保持如此多節(jié)點(diǎn)的可用性是一件非常有挑戰(zhàn)的工作。
全方位監(jiān)控變得越來越重要,當(dāng)我們遇到bug時(shí),總是希望可以看到更多信息,因此一般我們選用的服務(wù)開發(fā)框架都需要有方便又強(qiáng)大的監(jiān)控功能支持。
Spring Boot Actuator便可以幫助我們?nèi)矫姹O(jiān)控應(yīng)用節(jié)點(diǎn).
比如健康檢查、審計(jì)、統(tǒng)計(jì)、HTTP追蹤等。我們可以通過JMX或者HTTP endpoints來獲得。spring Boot Admin配合下可以進(jìn)行頁面展示,也和可以與其它外部應(yīng)用系統(tǒng)系統(tǒng)整合。
Actuator介紹
Actuator是SpringBoot的一個(gè)非常重要的功能,Actuator 為開發(fā)人員提供了SpringBoot運(yùn)行狀態(tài)信息,通過Actuator可以查看程序的運(yùn)行狀態(tài)的信息。同時(shí)它提供了運(yùn)行狀態(tài)的監(jiān)控功能,Actuator的監(jiān)控功能可以通過Rest、遠(yuǎn)程shell、JMX方式獲得,首先我們介紹Rest方法來查看Actuator的節(jié)點(diǎn)方法,這種是十分簡單的方法。
Spring Boot Actuator 的關(guān)鍵特性是在應(yīng)用程序里提供眾多的Web節(jié)點(diǎn),通過這些節(jié)點(diǎn)可以實(shí)時(shí)地了解應(yīng)用程序的運(yùn)行狀況。有了Actuator,你可以知道Bean在Spring應(yīng)用程序上下文里是如何組裝在一 起的,并且可以獲取環(huán)境屬性的信息和運(yùn)行時(shí)度量信息等。
Rest方法來查看Actuator
pom.xml引入Actuator依賴
首先在pom.xml種引入spring-boot-starter-actuator依賴,代碼如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.3.3.RELEASE</version> </dependency>
配置application.yml
在application.yml中配置management.port和management.security.enabled,這倆是向外暴露actuator的端口和actuator的非安全驗(yàn)證方式。
在這里指定actuator對(duì)外暴露的RestApi端口為9091,Spring1.5x默認(rèn)采用了Actuator安全驗(yàn)證,為了能夠在瀏覽器上展示效果,不做安全驗(yàn)證,將其設(shè)置為false。
management: server: port: 9091 # 對(duì)外暴露API接口端口為9001 servlet: context-path: /sys security: enabled: false # 這是為了在瀏覽器上展示效果 所以設(shè)置為false endpoints: web: exposure: include: "*" # include表示需要暴露的endpoint,配置時(shí)使用“,”隔開,你也可以用*讓所有endpoint暴露出來 endpoint: health: enabled: true show-details: always # health endpoint只展示了簡單的UP和DOWN狀態(tài)。為了獲得健康檢查中所有指標(biāo)的詳細(xì)信息,可以設(shè)置其展示詳細(xì)信息。 shutdown: enabled: true
management.endpoint.health.show-details的默認(rèn)值為never,除了always之外還有when-authorized。
exclude表示在暴露endpoint時(shí),排除掉哪些,同樣使用“,”隔開,例如
management.endpoints.web.exposure.exclude=info # 排除info
注意:如果不指定會(huì)默認(rèn)采用程序的啟動(dòng)端口,這樣做的目的就是將監(jiān)控端口與項(xiàng)目端口進(jìn)行區(qū)分。
不配置監(jiān)控端口:localhost:8080/actuator/
配置監(jiān)控端口:localhost:9091/sys/actuator/
特別注意:在2.0之后的版本訪問地址必須要加上/actuator/才可以
運(yùn)行項(xiàng)目
就可以看到詳細(xì)的信息了,以health為例:
請(qǐng)求路徑:http://localhost:9091/sys/actuator/health { status: "UP", components: { diskSpace: { status: "UP", details: { total: 161062318080, free: 103786217472, threshold: 10485760, exists: true } }, ping: { status: "UP" } } }
Actuator配合SpringBootSecurity
actuator可以配合security進(jìn)行權(quán)限控制,從而保護(hù)endpint。
首先在pom.xml中引入SpringBootSecurity依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
配置application.xml
添加:
spring.security.user.name = admin spring.security.user.password = admin
這樣在我們?cè)L問localhost:9091/sys/actuator/的時(shí)候就會(huì)自動(dòng)跳轉(zhuǎn)到安全登錄頁面,提示我們輸入用戶名和密碼。
security: user: name: admin password: admin
運(yùn)行項(xiàng)目
我們的請(qǐng)求路徑由http://localhost:9091/sys/actuator/自動(dòng)變成了http://localhost:9091/sys/login,輸入配置好的用戶名和密碼,就可以看到對(duì)應(yīng)的各種Api端口信息。
配置關(guān)閉項(xiàng)目API端口
配置application.yml
在endpoint后配置shutdown端口為true,默認(rèn)情況下系統(tǒng)是關(guān)閉該端口,防止他人的惡意關(guān)閉項(xiàng)目,是出于對(duì)系統(tǒng)的一種保護(hù)行為。
endpoint: health: enabled: true show-details: always shutdown: enabled: true
注意:在這里我們利用cmd窗口以命令行的形式來模擬post請(qǐng)求,如果在瀏覽器直接請(qǐng)求的話會(huì)報(bào)錯(cuò),后臺(tái)會(huì)提示
Request method ‘GET' not supported。也就是說不支持get請(qǐng)求,我們需要用post。
命令行執(zhí)行post關(guān)閉指令
在命令行中輸入:
$ curl -X POST localhost:9091/actuator/shutdown
然后命令行提示:
{“message”:“Shutting down, bye…”}
項(xiàng)目就處于關(guān)閉狀態(tài)了!
附:Actuator端口信息
類型 | Api端口 | 描述 |
---|---|---|
get | auditevents | 顯示應(yīng)用暴露的審計(jì)事件 (比如認(rèn)證進(jìn)入、訂單失敗) |
get | info | 顯示應(yīng)用的基本信息 |
get | health | 顯示應(yīng)用的健康狀態(tài) |
get | metrics | 顯示應(yīng)用多樣的度量信息 |
get | loggers | 顯示和修改配置的loggers |
get | logfile | 返回log file中的內(nèi)容(如果logging.file或者logging.path被設(shè)置) |
get | httptrace | 顯示Liquibase 數(shù)據(jù)庫遷移的纖細(xì)信息 |
get | env | 顯示當(dāng)前的環(huán)境特性 |
get | flyway | 顯示數(shù)據(jù)庫遷移路徑的詳細(xì)信息 |
get | liquidbase | 顯示數(shù)據(jù)庫遷移路徑的詳細(xì)信息 |
post | shutdown | 讓你逐步關(guān)閉應(yīng)用 |
get | mappings | 顯示所有的@RequestMapping路徑 |
get | scheduledtasks | 顯示應(yīng)用中的調(diào)度任務(wù) |
get | threaddump | 執(zhí)行一個(gè)線程dump |
get | heapdump | 返回一個(gè)GZip壓縮的JVM堆dump |
附:SpringBoot自帶的健康指示器
指示器 | 鍵 | 內(nèi)容 |
---|---|---|
ApplicationHealthIndicator | none | 永遠(yuǎn)為UP |
DataSourceHealthIndicator | db | 如果數(shù)據(jù)庫能連上,則為up,否則為down |
DiskSpaceHealthIndicator | diskSpace | 如果可用空間大于閾值,則為up和可用磁盤空間,如果空間不足,則為down |
JmsHealthIndicator | jms | 如果能連上消息代理,則為up,否則為down |
MailHealthIndicator | 如果能連上郵件服務(wù)器,則為up和郵件主機(jī)和端口,否則為down | |
MangoHealthIndicator | mongo | 如果能連上MangoDB服務(wù)器,則為up和MongoDB服務(wù)器版本,否則為down |
RabbitHealthIndicator | rabbit | 如果能連上RabbitMQ服務(wù)器,則為up和MongoDB服務(wù)器版本,否則為down |
RedisHealthIndicator | redis | 如果能連上Redis服務(wù)器,則為up和服務(wù)器版本,否則為down |
SolrHealthIndicator | solr | 如果能連上Solr服務(wù)器,則為up和服務(wù)器版本,否則為down |
總結(jié)
到此這篇關(guān)于一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的文章就介紹到這了,更多相關(guān)spring boot 運(yùn)行狀態(tài)監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控
- Java SpringBoot快速集成SpringBootAdmin管控臺(tái)監(jiān)控服務(wù)詳解
- Spring?Boot?+?Canal?實(shí)現(xiàn)數(shù)據(jù)庫實(shí)時(shí)監(jiān)控
- Spring?boot?admin?服務(wù)監(jiān)控利器詳解
- SpringBoot整合ip2region實(shí)現(xiàn)使用ip監(jiān)控用戶訪問城市的詳細(xì)過程
- Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin
相關(guān)文章
在SpringBoot中無縫整合Dubbo的實(shí)現(xiàn)過程
微服務(wù)架構(gòu)已經(jīng)成為現(xiàn)代應(yīng)用開發(fā)的熱門趨勢,而Dubbo作為一款強(qiáng)大的分布式服務(wù)框架,與Spring?Boot的結(jié)合是構(gòu)建高性能微服務(wù)應(yīng)用的理想選擇,本文將詳細(xì)介紹如何在SpringBoot中無縫整合Dubbo,需要的朋友可以參考下2024-01-01try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法
這篇文章主要為大家介紹了try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02使用Spring Initializr方式如何快速構(gòu)建Spring Boot項(xiàng)目
Spring lnitializr是一個(gè)Web應(yīng)用,它提供了一個(gè)基本的項(xiàng)目結(jié)構(gòu),能夠幫助我們快速構(gòu)建一個(gè)基礎(chǔ)的Spring Boot項(xiàng)目,本文分步驟講解如何使用Spring Initializr方式構(gòu)建Spring Boot項(xiàng)目,感興趣的朋友跟隨小編一起看看吧2023-08-08java后臺(tái)調(diào)用HttpURLConnection類模擬瀏覽器請(qǐng)求實(shí)例(可用于接口調(diào)用)
這篇文章主要介紹了java后臺(tái)調(diào)用HttpURLConnection類模擬瀏覽器請(qǐng)求實(shí)例,該實(shí)例可用于接口調(diào)用,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10J2SE基礎(chǔ)之命令行中編寫第一個(gè) Hello World
“Hello World”程序指的是只在計(jì)算機(jī)屏幕上輸出“Hello, World!”(意為“世界,你好!”)這行字符串的計(jì)算機(jī)程序。hello world作為所有編程語言的起始階段,占據(jù)著無法改變的地位,所有的編程第一步就在于此了!經(jīng)典之中的經(jīng)典!hello world!2016-05-05java 打印一字符串,并在main()方法內(nèi)調(diào)用它
編寫一個(gè)方法(名字自定,但要符合Java編碼規(guī)范),方法內(nèi)打印一字符串,并在main()方法內(nèi)調(diào)用它。2017-02-02