Spring Boot Admin 微服務監控系統
當所有的系統都要跟分散式或微服務掛上關係時,我們又需要如何在 production 中管理我們的 micro service 呢?今天想跟大家介紹一個微服務的監控系統Spring Boot Admin,由於都已經整合到 spring boot 中了,因此添加方式也非常的簡單,請大家跟著我的步驟來吧!
Quick Start
今天我們使用之前寫的專案 cpay-core_service、cpay-payment_service、cpay-admin_server當作範例。
新建 Admin Server 專案
- 首先我們需要先新建一個 Admin Server 的專案,並在
pom.xml
中加入 spring-boot-admin-starter-server 的 dependency,可參考cpay-admin_server
1 | <dependency> |
完整的 pom.xml
請參考如下
- 建立 Main Class:
CpayAdminApplicatioin.java
1 | @Configuration |
- 調整啟動 port:
application.yml
1 | server.port: 8070 |
- 執行 Main Class,執行localhost:8070
添加需要監控的服務
這邊將以cpay-core_service為例。
- 在 core_service 的
pom.xml
,增加 dependency
1 | <dependency> |
- 修改
application.yml
1 | spring.boot.admin.client.url: "http://localhost:8070" |
- 需在 CpayWebSecurityConfigurerAdapter 增加需 ignore 的 path
1 | @Override |
- 啟動 core_service
補充說明
這寫此文章的時候,已經推出了 2.1.3
版本,但測試時卻出現錯誤,參考如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
錯誤訊息:
java.lang.IllegalStateException: Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]
at org.apache.coyote.AsyncStateMachine.asyncError(AsyncStateMachine.java:440)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:512)
at org.apache.coyote.Request.action(Request.java:430)
at org.apache.catalina.core.AsyncContextImpl.setErrorState(AsyncContextImpl.java:396)
at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:239)
at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:241)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
主要原因應該是可參考該文章。
Reference
Donate
謝謝您的支持與鼓勵