Spring Cloud應用監控與管理Actuator

??由于我們把一個復雜高耦合的單體系統拆分成了多個小型服務,所以部署應用的數量在不斷增長,造成維護復雜度大大提升。所以我們需要一套自動化的監控運維機制,這套運維機制可以不間斷的獲取每個服務應用的各種指標,并根據這些指標信息來制定監控預警規則。

? ? ? ?Spring Boot提供了一個依賴模塊:spring-boot-starter-actuator,這個模塊可以自動為Spring Boot創建的應用構建一系列的用于監控的端點,而且Spring Cloud還在這個基礎上進行了擴展,當然在不滿足我們業務需求時也需要對這個模塊進行擴展。

? ? ? ? 接下來創建一個Spring Boot項目命名actuator,勾選Actuator依賴

或者在你現有的Spring Boot項目里加上依賴

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-actuator</artifactId>

  4. </dependency>

項目創建完畢后的pom文件:

 
  1. <parent>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-parent</artifactId>

  4. <version>2.0.2.RELEASE</version>

  5. <relativePath/> <!-- lookup parent from repository -->

  6. </parent>

  7. ?
  8. <properties>

  9. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  10. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  11. <java.version>1.8</java.version>

  12. </properties>

  13. ?
  14. <dependencies>

  15. <dependency>

  16. <groupId>org.springframework.boot</groupId>

  17. <artifactId>spring-boot-starter-actuator</artifactId>

  18. </dependency>

  19. <dependency>

  20. <groupId>org.springframework.boot</groupId>

  21. <artifactId>spring-boot-starter-web</artifactId>

  22. </dependency>

  23. ?
  24. <dependency>

  25. <groupId>org.springframework.boot</groupId>

  26. <artifactId>spring-boot-starter-tomcat</artifactId>

  27. <scope>provided</scope>

  28. </dependency>

  29. <dependency>

  30. <groupId>org.springframework.boot</groupId>

  31. <artifactId>spring-boot-starter-test</artifactId>

  32. <scope>test</scope>

  33. </dependency>

  34. </dependencies>

  35. ?
  36. <build>

  37. <plugins>

  38. <plugin>

  39. <groupId>org.springframework.boot</groupId>

  40. <artifactId>spring-boot-maven-plugin</artifactId>

  41. </plugin>

  42. </plugins>

  43. </build>

說一下我的版本:jdk1.8、Spring Boot 2.0.2。

接下來就可以啟動應用了,發現控制臺打印如下信息:

/actuator/health和/actuator/info以及/actuator這三個就是actuator提供的端點,注意以前的版本是沒有/actuator前綴的,2.0以后的版本都加了/actuator前綴,而且看官方文檔actuator提供了如下端點:

我們只有health和info是因為actuator默認只暴露了health和info端點,我們可以選擇全部暴露或者指定暴露部分端點,修改application.yml

 
  1. management:

  2. endpoints:

  3. web:

  4. exposure:

  5. include: "*" #暴露所有端點 默認是info,health

?重新啟動應用,控制臺打印

發現有其余的端點了,下面是對部分端點的簡要說明

?

?

auditevents公開當前應用程序的審計事件信息。
beans顯示應用程序中所有Spring bean的完整列表。
configprops顯示應用中配置的屬性信息報告。
env顯示應用中所有可用的環境屬性報告,包括環境變量、JVM屬性、應用的配置屬性、命令行的參數。
health顯示應用健康信息。
httptrace顯示HTTP跟蹤信息(默認情況下為最后100個HTTP請求 - 響應交換)。
info顯示應用的自定義信息,默認是空。
metrics顯示當前應用程序的“指標”信息,如內存信息、線程信息。
mappings顯示所有url映射。
scheduledtasks顯示應用程序中的計劃任務。
shutdown讓應用程序正常關機。
threaddump程序運行中的線程信息。

詳細說明查看actuator-api文檔點擊打開鏈接,注意這是Spring Boot2.0.2的文檔,其余版本請去官網自行查找。

開啟和關閉端點

使用management.endpoint.<id>.enabled來修改端點的開啟關閉狀態,如以關閉health端點為例

management.endpoint.health.enabled=false

如果您希望端點啟用選擇加入而不是選擇退出,請將management.endpoints.enabled-by-default屬性設置?為false并使用各個端點?enabled屬性重新加入。以下示例啟用info端點并禁用所有其他端點:

?

management.endpoints.enabled-by-default = false
management.endpoint.info.enabled = true

修改路徑

現在所有端點的前綴默認是/actuator,如果想修改的話用management.endpoints.web.base-path屬性

如果想修改端點的路徑,可以用?management.endpoints.web.path-mapping屬性

比如我們想把/autuator/health修改為/healthcheck,

?

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck

重啟后所有端點都去掉了/actuator前綴,并且health端點的路徑變成了healthcheck

當然,如果你想修改端點的端口,也是可以的,可以通過以下屬性修改

?

management.server.port = 8081

如果您不想通過HTTP公開端點,則可以將管理端口設置為-1

?

management.server.port = -1

關于shutdown端點

shutdown端點可以用來遠程關閉應用,此端點默認是關閉的,如果使用的話,需要開啟,使用以下屬性

management.endpoint.shutdown.enabled = true

你就可以在應用啟動后遠程通過調用/actuator/shutdown來關閉應用,注意只能POST請求調用。

關于health端點

?

我們嘗試訪問/actuator/health端點,返回

{"status":"UP"}

只有status一個屬性,查看官方文檔

health端點的management.endpoint.health.show-details屬性默認不展示細節,我們可以修改一下

 
  1. management:

  2. endpoints:

  3. web:

  4. exposure:

  5. include: "*" #暴露所有端點 默認是info和health

  6. endpoint:

  7. health:

  8. show-details: always #默認是never

重新啟動再次請求,會發現多了一個磁盤空間的狀態信息,返回

{"status":"UP","details":{"diskSpace":{"status":"UP","details":{"total":169917878272,"free":138603999232,"threshold":10485760}}}}

health端點默認自帶了一些常用資源的健康指標檢測器,只要你引入了以下依賴就會自動添加到health里

我們也可以自己擴展一個健康指標檢測器

 
  1. /**

  2. * 1.實現HealthIndicator接口

  3. * 2.類名要求 xxxHealthIndicator xxx將會是你自定義得健康指標名稱

  4. * 3.@Component注入到容器內

  5. * 4.重寫health()方法

  6. * @author Administrator

  7. *

  8. */

  9. @Component

  10. public class MyAppHealthIndicator implements HealthIndicator{

  11. ?
  12. @Override

  13. public Health health() {

  14. if(check()!=0){

  15. return Health.up().build();

  16. }

  17. return Health.down().withDetail("error", "出錯了").build();

  18. }

  19. ?
  20. private int check(){

  21. // 檢測是否健康的自定義邏輯

  22. return 0;

  23. }

  24. }

然后重啟應用發現多了自定義的健康指標

關于info端點

info端點默認是空的,我們可以在application配置文件中配置info前綴的屬性來完善

 
  1. info:

  2. app:

  3. version: 1.1

  4. name: aut #/actuator/info 自定義的info端點 否則是空的

訪問/actuator/info

我們也可以用info端點描述Git版本信息。

在application.yml或者application.properties同級目錄創建git.properties,添加屬性git.branch=master

再次重啟訪問/actuator/info

git.后面的屬性是來自于GitProperties類,eclipse中使用ctrl+shift+t輸入GitProperties就可以查看了,前提是你下載了源碼,當然你也可以引入git的插件,具體我就不介紹了,想了解的可以看下這篇文章

http://blog.didispace.com/spring-boot-actuator-info-git/,總的來說info端點用途并不大。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387052.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387052.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387052.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2019.04.09 電商25 結算功能1

結算功能要獲取很多數據&#xff0c; 現在的主要問題是要知道獲取對應的商品信息&#xff0c;要知道我選的是哪個的商品信息啊 它們選框的類名都一樣啊&#xff0c;能遍歷嗎&#xff1f;遍歷之后要去獲取&#xff0c;它父級屬性的值 有多少商品就有多少復選框&#xff0c;可以獲…

性能堆分析思路

1、通過top找到對應的耗費資源比較大的進程ID&#xff0c; 2、ps p 進程ID -L -o pcpu,pid,tid,time,tname,cmd 3、然后利用上面面命令來找到對應的線程 4、利用Listthread方法 列出所有線程&#xff0c;與找到對應資源比較大的匹配 5、利用stack查找到對應的堆棧調用代碼&…

第十二屆湖南省賽 (B - 有向無環圖 )(拓撲排序+思維)好題

Bobo 有一個 n 個點&#xff0c;m 條邊的有向無環圖&#xff08;即對于任意點 v&#xff0c;不存在從點 v 開始、點 v 結束的路徑&#xff09;。為了方便&#xff0c;點用 1,2,…,n 編號。 設 count(x,y) 表示點 x 到點 y 不同的路徑數量&#xff08;規定 count(x,x)0&#xff…

GC 調優(實戰篇) - GC參考手冊

說明: Allocation Rate, 翻譯為分配速率, 而不是分配率; 因為不是百分比,而是單位時間內分配的量; 同理, Promotion Rate 翻譯為 提升速率; 您應該已經閱讀了前面的章節: 垃圾收集簡介 - GC參考手冊Java中的垃圾收集 - GC參考手冊GC 算法(基礎篇) - GC參考手冊GC 算法(實現篇)…

01 HTML

1.什么是HTML&#xff1f;(Hyper Text Markup Language:超文本標記語言)超文本&#xff1a;功能比普通文本更加強大標記語言&#xff1a;使用一組標簽對內容進行描述的一門語言(它不是編程語言)2.語法和規范&#xff1f;HTML文件都是以.html或者.htm結尾的&#xff0c;建議使用…

圖的四種最短路徑算法

本文總結了圖的幾種最短路徑算法的實現&#xff1a;深度或廣度優先搜索算法&#xff0c;弗洛伊德算法&#xff0c;迪杰斯特拉算法&#xff0c;Bellman-Ford算法 1&#xff09;&#xff0c;深度或廣度優先搜索算法&#xff08;解決單源最短路徑&#xff09; 從起始結點開始訪問所…

20101008 搬家

剛剛系統還原了&#xff0c;把軟件啥的都裝上了&#xff0c;忙完一切&#xff0c;該整理整理照片&#xff0c;寫寫博客了&#xff08;總是如果不及時寫&#xff0c;就幾乎永遠不會寫了&#xff09;。我一貫喜歡"工欲善其事&#xff0c;必先利其器"&#xff0c;裝個wi…

ZooKeeper集群與Leader選舉

說說你對ZooKeeper集群與Leader選舉的理解&#xff1f; ZooKeeper是一個開源分布式協調服務、分布式數據一致性解決方案。可基于ZooKeeper實現命名服務、集群管理、Master選舉、分布式鎖等功能。 高可用 為了保證ZooKeeper的可用性&#xff0c;在生產環境中我們使用ZooKeeper…

JVM初探:內存分配、GC原理與垃圾收集器

JVM內存的分配與回收大致可分為如下4個步驟: 何時分配 -> 怎樣分配 -> 何時回收 -> 怎樣回收. 除了在概念上可簡單認為new時分配外, 我們著重介紹后面的3個步驟: I. 怎樣分配- JVM內存分配策略 對象內存主要分配在新生代Eden區, 如果啟用了本地線程分配緩沖, 則優先在…

02 CSS

使用 table 進行布局存在缺陷&#xff0c;而一般的布局都會采用 DIVCSS 來進行布局。 Div 它是一個html 標簽&#xff0c;一個塊級元素(單獨顯示一行)。它單獨使用沒有任何意義&#xff0c;必須結合 CSS 來使用。它主要用于頁面的布局。 Span 它是一個 html 標簽&#xff0c;…

為什么要在密碼里加點“鹽”

鹽&#xff08;Salt&#xff09; 在密碼學中&#xff0c;是指通過在密碼任意固定位置插入特定的字符串&#xff0c;讓散列后的結果和使用原始密碼的散列結果不相符&#xff0c;這種過程稱之為“加鹽”。 以上這句話是維基百科上對于 Salt 的定義&#xff0c;但是僅憑這句話還是…

一致性哈希算法 應用

互聯網創業中大部分人都是草根創業&#xff0c;這個時候沒有強勁的服務器&#xff0c;也沒有錢去買很昂貴的海量數據庫。在這樣嚴峻的條件下&#xff0c;一批又一批的創業者從創業中獲得成 功&#xff0c;這個和當前的開源技術、海量數據架構有著必不可分的關系。比如我們使用m…

(9)How to take a picture of a black hole

https://www.ted.com/talks/katie_bouman_what_does_a_black_hole_look_like/transcript 00:13In the movie "Interstellar[??nt?r?stel?(r)]星際的," we get an up-close look at a supermassive black hole. Set against a backdrop of bright gas, the black…

單個節點的緩存容量達到上限 Hash算法一致性

場景 單個節點的緩存容量達到上限&#xff0c;無法繼續單點增加內存&#xff0c;如何解決&#xff1f; 單個節點支撐的QPS達到上限&#xff0c;如何解決&#xff1f; 初步方案 增加N個緩存節點&#xff0c;為了保證緩存數據的均勻&#xff0c;一般情況會采用對key值hash&…

java學習筆記11 (構造方法 this深探)

在開發中&#xff0c;經常需要在創建對象的同事明確對象對的屬性值&#xff0c;比如一個person對象創建的時候就應該有name和age 等屬性&#xff0c;那么如何做到在創建對象的同時給對象的屬性值初始化值呢&#xff1f; 這里介紹構造方法 1 構造方法沒有返回值類型&#xff0c;…

密碼中不能包含全角字符的正則表達式

String regex "^((?![^\\x00-\\xff]).)*$"; String str "aA"; System.out.println(str.matches(regex));

編程算法 - 將排序數組按絕對值大小排序 代碼(java)

一個含有多個元素的數組&#xff0c;有多種排序方式。它可以升序排列&#xff0c;可以降序排列&#xff0c;也可以像我們以前章節說過的&#xff0c;以波浪形方式排序&#xff0c;現在我們要看到的一種是絕對值排序。對于數組A,絕對值排序滿足以下條件&#xff1a;|A[i]| < …