springboot(二十):使用spring-boot-admin對spring-boot服務進行監控
上一篇文章《springboot(十九):使用Spring Boot Actuator監控應用》介紹了Spring Boot Actuator的使用,Spring Boot Actuator提供了對單個Spring Boot的監控,資訊包含:應用狀態、記憶體、執行緒、堆疊等等,比較全面的監控了Spring Boot應用的整個生命週期。
但是這樣監控也有一些問題:第一,所有的監控都需要呼叫固定的介面來檢視,如果全面檢視應用狀態需要呼叫很多介面,並且介面返回的Json資訊不方便運營人員理解;第二,如果Spring Boot應用叢集非常大,每個應用都需要呼叫不同的介面來檢視監控資訊,操作非常繁瑣低效。在這樣的背景下,就誕生了另外一個開源軟體:Spring Boot Admin
什麼是Spring Boot Admin?
Spring Boot Admin 是一個管理和監控Spring Boot 應用程式的開源軟體。每個應用都認為是一個客戶端,通過HTTP或者使用 Eureka註冊到admin server中進行展示,Spring Boot Admin UI部分使用AngularJs將資料展示在前端。
Spring Boot Admin 是一個針對spring-boot的actuator介面進行UI美化封裝的監控工具。他可以:在列表中瀏覽所有被監控spring-boot專案的基本資訊,詳細的Health資訊、記憶體資訊、JVM資訊、垃圾回收資訊、各種配置資訊(比如資料來源、快取列表和命中率)等,還可以直接修改logger的level。
這篇文章給大家介紹如何使用Spring Boot Admin對Spring Boot應用進行監控。
監控單體應用
這節給大家展示如何使用Spring Boot Admin監控單個Spring Boot應用。
Admin Server端
專案依賴
<dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>1.5.6</version> </dependency> </dependencies>
配置檔案
server.port=8000
服務端設定埠為:8000。
啟動類
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
完成上面三步之後,啟動服務端,瀏覽器訪問http://localhost:8000
可以看到以下介面:
Admin Client端
專案依賴
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
配置檔案
server.port=8001
spring.boot.admin.url=http://localhost:8000
management.security.enabled=false
-spring.boot.admin.url
配置Admin Server的地址
-management.security.enabled=false
關閉安全驗證
啟動類
@SpringBootApplication
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(AdminClientApplication.class, args);
}
}
配置完成之後,啟動Client端服務,再次訪問服務:http://localhost:8000
可以看到客戶端的相關資訊。
首頁會展示被監控的各個服務,點選詳情可以檢視某個服務的具體監控資訊
通過上圖可以看出,Spring Boot Admin以圖形化的形式展示了應用的各項資訊,這些資訊大多都來自於Spring Boot Actuator提供的介面。
監控微服務
如果我們使用的是單個Spring Boot應用,就需要在每一個被監控的應用中配置Admin Server的地址資訊;如果應用都註冊在Eureka中就不需要再對每個應用進行配置,Spring Boot Admin會自動從註冊中心抓取應用的相關資訊。
這裡使用四個示例專案來演示:
- spring-boot-admin-server Admin Server端
- spring-cloud-eureka 註冊中心
- spring-cloud-producer 應用一,Admin Client端
- spring-cloud-producer-2 應用二,Admin Client端
首先啟動註冊中心spring-cloud-eureka,如果對Eureka不瞭解的同學可以檢視這篇文章springcloud(二):註冊中心Eureka
Server端
示例專案:spring-boot-admin-server
專案依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
增加了對eureka的支援
配置檔案
server:
port: 8000
spring:
application:
name: admin-server
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management.security.enabled: false
配置檔案中添加了eureka的相關配置
啟動類
@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
上述步驟完成之後,啟動Server端。
Client端
示例專案:spring-cloud-producer和spring-cloud-producer-2
專案依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
配置檔案
server:
port: 9000
spring:
application:
name: producer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
management:
security:
enabled: false
我們發現配置檔案中並沒有新增Admin Server的相關配置
啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
Web層
@RequestMapping("/hello")
public String index(@RequestParam String name) {
logger.info("request one/two name is "+name);
return "hello "+name+",this is first messge";
}
web層添加了/hello的請求方法,方法中使用one/two區別是哪個應用。spring-cloud-producer-2和spring-cloud-producer程式碼類似,具體大家可以檢視示例程式碼。
完成上面配置之後,分別啟動專案:spring-cloud-producer和spring-cloud-producer-2,瀏覽器訪問http://localhost:8000
可以看到以下介面:
從上圖可以看出Admin Server監控了四個例項,包括Server自己,註冊中心、兩個PRODUCER。說明Admin Server自動從服務中心抓取了所有的例項資訊並進行了監控。點選Detail可以具體檢視某一個示例的監控資訊。
郵件告警
Spring Boot Admin將微服務中所有應用資訊在後臺進行了展示,非常方便我們對微服務整體的監控和治理。但是我們的運營人員也不可能一天24小時盯著監控後臺,因此如果服務有異常的時候,有對應的郵件告警就太好了,其實Spring Boot Admin也給出了支援。
我們對上面的示例專案spring-boot-admin-server進行改造。
新增依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
增加了郵件傳送的starter包
配置檔案
spring:
mail:
host: smtp.qq.com
username: [email protected]
password: xxxx
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
boot:
admin:
notify:
mail:
from: [email protected]
to: [email protected]
# http://codecentric.github.io/spring-boot-admin/1.5.6/#mail-notifications
在配置檔案中新增郵件傳送相關資訊:郵件的傳送者、接受者、協議、移動授權碼等。關於Spring Boot郵件傳送,可以參考springboot(十):郵件服務
配置完成後,重新啟動專案spring-boot-admin-server,這樣Admin Server就具備了郵件告警的功能,預設情況下Admin Server對Eureka中的服務上下線都進行了監控,當服務上下線的時候我們就會收到如下郵件:
當然這只是最基本的郵件監控,在實際的使用過程中,需要根據我們的情況對郵件告警內容進行自定義,比如監控堆記憶體的使用情況,當到達一定比例的時候進行告警等。