spring_boot_admin实践

简介

官网: https://github.com/codecentric/spring-boot-admin

官网入门: https://codecentric.github.io/spring-boot-admin/2.5.1/#getting-started

spring boot admin是一个非常好用的监控和管理的开源软件。该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。

主要的功能点有:

  • 显示应用程序的监控状态
  • 应用程序上下线监控
  • 查看 JVM,线程信息
  • 可视化的查看日志以及下载日志文件
  • 动态切换日志级别
  • Http 请求信息跟踪
  • 其他功能点……

搭建

搭建server

使用spring init工具添加依赖 admin-server

1
2
3
4
5
6
7
8
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>

spring boot 启动类添加 @EnableAdminServer

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableAdminServer
public class AdminApplication {

public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}

}
1
2
server:
port: 8080

搭建client

1
2
3
4
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
# 修改Admin Server的地址
spring:
boot:
admin:
client:
url: http://localhost:8080

# 打开客户端Actuator的监控
management:
endpoints:
web:
exposure:
include: '*'

启动server、 client后访问http://localhost:8080/

搭建从eureka-server获取的server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
@EnableAdminServer
@EnableEurekaClient
public class AdminApplication {

public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server:
port: 8080

# 应用名称
spring:
application:
name: admin
# eureka 客户端配置
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
metadata-map:
startup: ${random.int} #needed to trigger info and endpoint update after restart
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

# actuator 端点开启
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS

这时admin项目是一个eureka-client并且是一个admin-server。

其他的需要监控的项目不需要引入admin-client,只需要引入actuator并开启端点。

使用

首页

首页显示了应用数、实例数、实例状态,还有应用列表。

Insights

细节

包含了实例的信息、健康情况、元数据、进程信息、线程信息、垃圾回收情况、堆内存情况、非堆内存情况。

环境

包含了实例的启动端口、系统属性、系统环境变量、springCloudClientHostInfo、application.yml信息

可以查看类的信息,比如是否单例。

配置属性

可以查看一些配置类的配置信息。比如eurekaClientConfigBean

计划任务

可以看到我们配置的定时器

日志配置

可以动态调整一个包的日志级别

JVM

线程转储:可以查看线程的情况。可以下载线程快照。类似jstack

内存转储:可以下载内存快照。

映射

http请求地址与处理程序的映射。

缓存

可以看到我们使用到的缓存空间。

服务上下线通知

通知支持邮件、钉钉、微信等

可以引入spring Security实现安全

引入spring Security 并配置用户名、密码

查看日志

当client配置了logging.file.path or logging.file.name后,admin-server会开启查看日志的视图

1
2
3
4
5
logging:
file:
name: /Users/qichuanhan/logs/service-a.log
pattern:
file: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx'

启动service-a服务,会发现admin的控制台菜单出现了变化,日志配置变为了二级菜单,日志变为一级菜单,日志中包含日志文件、日志配置两个子菜单。点击日志文件就可以看到日志打印了。

httptrace 怎么没了

Spring boot 2.2.x 正式版开始,不再默认开启 InMemoryHttpTraceRepository,所以导致了这个问题。

对于此问题,官方建议采用第三方组件来进行 httptrace 的收集,详见:鼓励使用第三方跟踪和可观察性解决方案,而不是实现自己的HttpTraceRepositroy[2] https://github.com/spring-projects/spring-boot/issues/17047。

可以使用 prometheus 来实现httptrace的功能。


spring_boot_admin实践
http://hanqichuan.com/2022/06/28/spring_cloud/spring_boot_admin实践/
作者
韩启川
发布于
2022年6月28日
许可协议