iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Software Development

Wow ! There is no doubt about Learn Spring framework in a month.系列 第 29

[Day - 29] - 深透 Spring Actuator 創造系統服務監視神之眼

Abstract

大家好,我是遊戲王怪獸之決鬥小編威斯~~丁,想必大家都知道遊戲王的貝卡斯的千年眼可以看到每個人的心靈....心靈透視~~~
image 差不多是這樣子垃....別問我這監測服務有名字嗎,他叫哇~沒錯 就只有哇(WAR,Weisting ActuatoR)
一樣的道理,無論您開發何種服務系統,必定都會遇到障礙排除(Trouble SHOOOOOOOTING)問題,來跟我唸一次,你也只剩看到我再發文文章一天了,TROOOOOUBLE SHOOOOOOTING,好拉,此時您除了透過Log跟程式碼進行解析臭蟲(Bug)外,勢必需要監視這套系統,看到所有問題,才可以順利解決,今天小編就帶給大家一套Spring Actuator服務監測套件,這套件不僅可以取代我們早期的JConsole監測套件,而且還可以透過應用程式接口(API)進行與其他系統介接,透過此項套件,在新的時代來臨,小編的思想是這樣,沒有舊技術這句話,只要你覺得好用,並且馬上學以致用,這就是新技術,所以小編在今日選用前端框架Vue及圖形設計框架Vuetify,並整合入此套監測套件,這套是近期蠻盛行的,頗多神級人物都用來監測Spring Cloud Eureka,但這居多透過JMX拉,我很難解釋,只能看後年,為什麼是後年,因爲明年不確定因素太多,哎~不過,真的有點潮,等一下讓小編帶妳潮一下,不潮不用錢,我是小編,我是貝卡斯,下面讓小編來介紹Actuator運作原理與支援內容吧。

Principle Introduction

Spring Actuator中所有端口都是透過@Endpoint進行標注個類別為一個監測終端點的Bean,並透過@ReadOperation進行註記監測方法位置,所有的終端點(@EndPoint)都是透過配置類別(EndpointWebMvcManagementContextConfiguration)中定義的EndpointHandlerMapping進行映射處理達成的,故此BeansEndpoint皆透過EndpointAutoConfiguration進行注入IOC容器,在這邊可以看出,終端點(@EndPoint)功能相當於Spring中的控制器(@RestController),透過AbstractWebMvcEndpointHandlerMapping.initHandlerMethods中把所有終端點(@EndPoint)配製成符合規範的結構,並注入至HandlerMapping集合中,便可完成所有監測項目端點API結構的生成與配置。

目前Spring Actuator支援兩種協定,第一、JMX(Java Management Extensions,Java管理擴充)協定,有如小編最初運用的監控套件JConsole,將各種需要監測的物件包裝成代管Bean(MBean,Managed Bean),透過JMX及RMI(Remote Method Invocation)進行監測與管理,第二種為透過TCP/IP Web API進行監測,為上敘透過@EndPoint進行配置各項監測API服務。

以下為預測的所有監測API,提供給各位開發者參考

No Web API
1 /actuator/beans
2 /actuator/caches
3 /actuator/health
4 /actuator/info
5 /actuator/conditions
6 /actuator/shutdown
7 /actuator/configprops
8 /actuator/env
9 /actuator/loggers
10 /actuator/heapdump
11 /actuator/threaddump
12 /actuator/metrics
13 /actuator/scheduledtasks
14 /actuator/mappings

並透過增加de.codecentric:spring-boot-admin-starter-server 存儲庫套件,可看到Spring 內建的圖形化介面,但官方套件目前尚有部分問題,沒辦法看得很仔細。
image

故我們運用此範例來開發一個微服務監測圖形化網頁功能,提供給各位做參考,以下為我們運用@EndPoint客製化一個終端點監測服務,如程式碼所敘,終端點位置不可與其他預設的終點重複,並將其終端點名稱配置於@EndPoint Bean 中的id,並配置回傳的監測值方法編譯在@ReadOperation標注的方法中,

@Component
@Endpoint(id = "memory")
public class ActuatorMontorController {

    Runtime runtime = Runtime.getRuntime();

    @ReadOperation
    public Map<String, Object> getData() {
        Map<String, Object> map = new HashMap<>();
        map.put("available-processors", runtime.availableProcessors());
        map.put("free-memory", runtime.freeMemory());
        map.put("max-memory", runtime.maxMemory());
        map.put("total-memory", runtime.totalMemory());
        return map;
    }
}

透過以上的原理敘述,各位開發者可以透過各類API取得監測資訊,或自行定義客製化的終端點監測內容。

Structure

所有的終端點(@Endpoint)皆是透過WebMvcEndpointManagementContextConfiguration中的webEndpointServletHandlerMapping進行過濾與獲取相關的Bean,透過WebEndpointSupplier分析器中createEndpointBean方法中進行取得BeanFactoryUtils元件,並觸發其beanNamesFOrAnnotationincludingAncestors方法取得專案中所有標注Endpoind註解的類別,最後透過WebMvcEndpointHandlerMapping中的EndpointLinksResolver進行配製成規範的API接口格式。
image

Customize Design

以下Spring Actuator為小編透過進行整合開發的GUI,提供各位讀者參考。

  1. /actuator/info,透過組態設定檔(application-.properties)中進行配置actuator資訊,Prefix為info.app.
    image
  1. 整合客製化終端口 /actuator/memory GUI頁面,監測系統的記憶體使用情況
    image
  1. 整合客製化中端口 /actuator/beans GUI頁面,監測系統啟動所有Singleton或Prototype的Bean元件資訊。有沒有看到,這種卡片形式Data table,在小編看十幾套以來,這套最潮,我一定要說一下,不錯!真的好用!看看我佛心來的免費推薦加叩叮。這個最適合用來闡述一個後端類別,是不是很合適啊!
    image
  1. 整合客製化中端口 /actuator/health GUI頁面,監測服務狀態(Service Status)、記憶體狀態(Memory Status)及連通狀態(Ping status)此三項運作狀態。
    image
  1. 整合客製化中端口 /actuator/metrics GUI頁面,監測系統服務各項指標。如:HTTP、JVM、LOGBACK、PROCESS、SYSTEM及TOMCAT等各項指標。由於JSON結構複雜,小編就採用TAB架構敘述所有群組資訊,主要都用來呈現JVM內部健康程度。
    image

由於範例整合頁面過多,程式碼在範例中,各位開發者可透過Follow up進行測試引用。

Follow Up

★ Back-End Setting

Run dev/stag/prod environment application without JAR file

 1. gradle bootRun -D profile=dev
 2. gradle bootRun -D profile=stag
 3. gradle bootRun -D profile=prod

Original spring actuator monitor website,

http://localhost:8080/sea/applications

See as raw data shown as below.

http://localhost:8080/sea/actuator

★ Front-End Setting

Step-1 : CD to spring-actuator-monitor folder

cd spring-actuator-monitor

Step-2 : Install node modules

yarn install

Step-3 : Run DEV with 8081

yarn run dev

Step-4 : Open your browser with page

http://localhost:8081/

Good luck all, kick back and relax it. weisting .

Sample Source

day-29-spring-framework-Actuator

Refernece Url

spring boot actuator工作原理之http服务暴露源码分析

SpringBoot Actuator端点的实现原理【概括整理】


上一篇
[Day - 28] - 運用Spring MockMvc 邁向自動化測試之路
下一篇
[Day - 30] - Spring framework research conclusions
系列文
Wow ! There is no doubt about Learn Spring framework in a month.30

尚未有邦友留言

立即登入留言