Spring Boot Admin实现服务监控
2019-05-23 本文已影响103人
SMTC
Spring Boot Admin简介
SBA 全称 Spring Boot Admin Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。常见的功能或者监控如下:
- 显示健康状况
- 显示详细信息,例如
- JVM和内存指标
- micrometer.io指标
- 数据源指标
- 缓存指标
- 显示构建信息编号
- 关注并下载日志文件
- 查看jvm系统和环境属性
- 查看Spring Boot配置属性
- 支持Spring Cloud的postable / env-和/ refresh-endpoint
- 轻松的日志级管理
与JMX-beans交互 - 查看线程转储
- 查看http跟踪
- 查看auditevents
- 查看http-endpoints
- 查看计划任务
- 查看和删除活动会话(使用spring-session)
- 查看Flyway / Liquibase数据库迁移
- 下载heapdump
- 状态变更通知(通过电子邮件,Slack,Hipchat,......)
- 状态更改的事件日志(非持久性)
SBA结合eureka实现服务监控以及邮件通知
搭建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);
}
}
- 配置文件(根据实际场景调整)
# 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清理无效节点的时间间隔,默认60000毫秒,即60秒
eureka.server.evictionIntervalTimerInMs=20000
# 自我保护模式(缺省为打开)
eureka.server.enable-self-preservation=false
# 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=20000
#logback配置
logging.path=./logs
logging.file=eureka-server.log
logging.level.root=info
由于在开发环境下很容易出现自我保护机制,推荐开发环境关闭eureka自我保护机制
镜像配置一台端口为8762 eureka服务,此处省略
搭建spring boot admin server服务,即监控程序
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
# 发送给谁
spring.boot.admin.notify.mail.to=***@**.com,***@**.com
# 是谁发送出去的
spring.boot.admin.notify.mail.from=***@qq.com
应用服务接入
由于受到公司框架制约应用sprngboot版本无法升级到2.0.X,因此admin client 采用1.5.x版本
可以使用Spring Boot Admin 2.x监视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**
由于一些执行器端点随Spring Boot 2发布而改变,因此并非所有选>项都可用(例如/metrics端点); 对于某些端点,我们提供传统转换>器。
- 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
#监控
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
效果
注册中心中可以看到注册的服务
image.png
-
监控平台
image.png