Spring Boot Admin簡介
SBA 全稱 Spring Boot Admin Spring Boot Admin是一個開源社區(qū)項目册舞,用于管理和監(jiān)控SpringBoot應用程序回官。 應用程序作為Spring Boot Admin Client向為Spring Boot Admin Server注冊(通過HTTP)或使用SpringCloud注冊中心(例如Eureka期吓,Consul)發(fā)現(xiàn)。 UI是的AngularJs應用程序量愧,展示Spring Boot Admin Client的Actuator端點上的一些監(jiān)控趾痘。常見的功能或者監(jiān)控如下:
- 顯示健康狀況
- 顯示詳細信息蜀肘,例如
- JVM和內(nèi)存指標
- micrometer.io指標
- 數(shù)據(jù)源指標
- 緩存指標
- 顯示構建信息編號
- 關注并下載日志文件
- 查看jvm系統(tǒng)和環(huán)境屬性
- 查看Spring Boot配置屬性
- 支持Spring Cloud的postable / env-和/ refresh-endpoint
- 輕松的日志級管理
與JMX-beans交互 - 查看線程轉儲
- 查看http跟蹤
- 查看auditevents
- 查看http-endpoints
- 查看計劃任務
- 查看和刪除活動會話(使用spring-session)
- 查看Flyway / Liquibase數(shù)據(jù)庫遷移
- 下載heapdump
- 狀態(tài)變更通知(通過電子郵件,Slack磺箕,Hipchat奖慌,......)
- 狀態(tài)更改的事件日志(非持久性)
SBA結合eureka實現(xiàn)服務監(jiān)控以及郵件通知
搭建eureka集群服務
首先搭建注冊中心
eureka server HA服務,至少啟動2個服務滞磺。
- pom.xml中添加以下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 啟動類:
/**
* @author sl
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
- 配置文件(根據(jù)實際場景調(diào)整)
# server (eureka 默認端口為:8761)
server.port=8761
# 服務名
spring.application.name=eureka-server
# 是否注冊到eureka(eureka本身是不需要再注冊到自己的)
eureka.client.register-with-eureka=false
# 是否從eureka獲取注冊信息
eureka.client.fetch-registry=false
# eureka服務器的地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
#服務失效時間升薯,Eureka多長時間沒收到服務的renew操作,就剔除該服務击困,默認90秒
eureka.instance.leaseExpirationDurationInSeconds=90
#eureka server清理無效節(jié)點的時間間隔涎劈,默認60000毫秒,即60秒
eureka.server.evictionIntervalTimerInMs=20000
# 自我保護模式(缺省為打開)
eureka.server.enable-self-preservation=false
# 續(xù)期時間阅茶,即掃描失效服務的間隔時間(缺省為60*1000ms)
eureka.server.eviction-interval-timer-in-ms=20000
#logback配置
logging.path=./logs
logging.file=eureka-server.log
logging.level.root=info
由于在開發(fā)環(huán)境下很容易出現(xiàn)自我保護機制,推薦開發(fā)環(huán)境關閉eureka自我保護機制
鏡像配置一臺端口為8762 eureka服務,此處省略
搭建spring boot admin server服務蛛枚,即監(jiān)控程序
pom添加如下依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.3</version>
</dependency>
- 啟動類:
/**
* @author sl
*/
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class UnionAdminApplication {
public static void main(String[] args) {
SpringApplication.run(UnionAdminApplication.class, args);
}
}
- 配置文件:
spring.application.name=admin-server
server.port=43200
#eureka config
eureka.instance.health-check-url-path=/actuator/health
eureka.client.registry-fetch-interval-seconds=5
eureka.client.service-url.defaultZone=http://192.168.94.44:8761/eureka
# 是否注冊到eureka(eureka本身是不需要再注冊到自己的)
eureka.client.register-with-eureka=false
##############################日志配置#############################
logging.path=./logs
logging.file=admin.log
logging.level.root=info
#郵件配置
spring.mail.host=smtp.qq.com
spring.mail.username=****@qq.com
spring.mail.password=*****
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
# 發(fā)送給誰
spring.boot.admin.notify.mail.to=***@**.com,***@**.com
# 是誰發(fā)送出去的
spring.boot.admin.notify.mail.from=***@qq.com
應用服務接入
由于受到公司框架制約應用sprngboot版本無法升級到2.0.X,因此admin client 采用1.5.x版本
可以使用Spring Boot Admin 2.x監(jiān)視Spring Boot 1.5.x應用程序。舊的Spring Boot Admin Client能夠在較新的服務器上注冊脸哀。由于API稍有更改蹦浦,因此您需要在舊客戶端上設置以下屬性:
重新配置Spring Boot Admin Client 1.5.x的api路徑:
application.ymlspring.boot.admin.api-path: instances**
由于一些執(zhí)行器端點隨Spring Boot 2發(fā)布而改變,因此并非所有選>項都可用(例如/metrics端點); 對于某些端點撞蜂,我們提供傳統(tǒng)轉換>器盲镶。
- pom.xml添加如下依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.7</version>
</dependency>
- 啟動類:
/**
* @author sl
*/
@EnableTransactionManagement
@SpringBootApplication(scanBasePackages = {"com.demo.ai.aidrg"},
exclude = {DataSourceAutoConfiguration.class})
public class AidrgApplication {
public static void main(String[] args) {
SpringApplication.run(AidrgApplication.class, args);
}
@RestController
public static class EchoTest {
@GetMapping("/")
public Result<String> echo() {
return Results.success("AidrgApplication");
}
}
}
- 配置文件:
#eureka配置
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://192.168.94.44:8761/eureka/
eureka.client.registryFetchIntervalSeconds=15
eureka.instance.leaseRenewalIntervalInSeconds=10
#監(jiān)控
management.endpoint.health.show-details=ALWAYS
management.endpoints.jmx.exposure.exclude=*
management.endpoints.web.exposure.include=*
spring.boot.admin.api-path=instances
management.security.enabled=false
management.context-path=/actuator
效果
注冊中心中可以看到注冊的服務
-
監(jiān)控平臺
image.png