springboot之监控
监控
Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。
java自带的监控
- cmd命令行输入:
jconsole
即可打开 java自带的 监视和管理控制台
主要特点
- 显示应用程序的监控状态
- 应用程序上下线监控
- 查看 JVM,线程信息
- 可视化的查看日志以及下载日志文件
- 动态切换日志级别
- Http 请求信息跟踪
- 其他功能点……
搭建服务流程
admin-server admin 监控服务
注意点
- 必须引入web
- 版本建议: Spring Boot 2.x=Spring Boot Admin 2.x (比如Spring Boot 2.7.x 可以用Spring Boot Admin 2.3.x)
三步走
- 引入依赖web项目
- 访问地址:http://localhost:8087
- 绿色:健康
- 灰色:连接客户端健康信息超时(超过10s)
- 红色:就能看到具体异常信息
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.7.9</version>
</dependency>
- 开启监控
@SpringBootApplication
@EnableAdminServer
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
- 配置端口
server:
port: 8087
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
admin-order amdin 客户端服务
注意点
两步走
- 引入依赖web项目
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.7.9</version>
</dependency>
- 配置文件
server:
port: 8087
spring:
boot:
admin:
client:
url: http://localhost:8087
# 监控的配置
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*'
Info节点
配置式
- application.yml
info:
appName: @project.artifactId@
version: @project.version@
company: 北京天健
author: wanghx
编程式
- 创建一个类,实现
InfoContributor
接口即可
@Component
public class InfoConfig implements InfoContributor {
@Resource
Environment env;
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("配置信息",this.getClass().getName());
// map方式
Map<String, Object> map = new LinkedHashMap<>(8);
map.put("操作系统", System.getenv("OS"));
map.put("操作系统版本", System.getProperty("os.version"));
map.put("服务器主机", String.valueOf(System.getenv("COMPUTERNAME")));
map.put("服务器端口", env.getProperty("server.port"));
map.put("服务器时间", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
try {
map.put("服务器ip", InetAddress.getLocalHost().getHostAddress());
} catch (UnknownHostException e) {
throw new RuntimeException(e);
};
map.put("java版本", System.getProperty("java.vm.version"));
builder.withDetails(map);
}
}
世界上没有什么事情是跑步解决不了的,如果有,那就再跑一会!