使用Spring Boot Admin对Spring Boot项目进行监控

前言

Spring Boot Admin 是一款开源的用来监控服务状态的工具,核心是Spring Boot Actuator,Spring Boot Admin在其基础上,通过AngularJs对其实现了可视化的展现。Spring Boot Admin 由server和client两部分组成,为了实现监控的功能,我们需要实现一个server,而每一个被监控的Spring Boot 服务可以视为一个client。

Spring Boot Admin Server

server的搭建十分的简单,只需要在新建项目时进行勾选即可:
使用Spring Boot Admin对Spring Boot项目进行监控_第1张图片
上图中可以看到server和client 选项,在这里我们只需要server。
新建后对应的pom.xml文件的依赖:


	org.springframework.boot
    spring-boot-starter-web


    de.codecentric
    spring-boot-admin-starter-server


    de.codecentric
    spring-boot-admin-server-ui
    2.0.1

在启动类上添加如下的注解:

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
@SpringBootConfiguration
public class DemoApplication {

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

}

最后在application.properties配置文件上注明端口号:

server.port=10000

运行项目,浏览器输入localhost:10000,即可看到如下的页面:
使用Spring Boot Admin对Spring Boot项目进行监控_第2张图片

Spring Boot Admin Client

client的配置更为简单,pom.xml引入依赖:


    de.codecentric
    spring-boot-admin-starter-client
    2.1.0

application.properties配置文件添加以下配置:

spring.application.name=Client Demo
spring.boot.admin.client.url=http://localhost:10000
management.endpoints.web.exposure.include: "*"
  • name 用来命名被监控的服务
  • spring.boot.admin.client.url 用来指明监控服务(即server)的地址
  • management.endpoints.web.exposure.include 2.0中默认不会将所有的节点通过http进行暴露,通过该配置指定暴露所有节点

运行服务,继续在刚才的页面上可以看到出现了被监控的服务:
使用Spring Boot Admin对Spring Boot项目进行监控_第3张图片

遇到的一些坑

  • connection refused
Caused by: io.netty.channel.unix.Errors$NativeConnectException: syscall:getsockopt(..) failed: Connection refused

在服务部署到服务器上时,配置文件加上如下配置

spring.boot.admin.client.instance.service-base-url=http://client所在的服务器的ip:client的端口号
  • NoClassFoundException

此类问题通常是server默认检测到了Spring Boot 自动配置的bean(例如redis, mongo等),而这些bean在业务代码中根本没有使用到,也就是说我们不会对这些进行配置。解决方法,在client的启动类上禁止掉对应的自动配置。

禁止mongo

@SpringBootApplication(exclude = {MongoAutoConfiguration.class})

禁止redis

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})

你可能感兴趣的:(Java学习)