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);
    }
}

posted @ 2023-04-01 06:17  his365  阅读(212)  评论(0编辑  收藏  举报