文章目录
- 1、服务监控的实现思路
- 2、SpringBoot Admin服务端
- 3、SpringBoot Admin客户端
- 4、实现原理--Actuator与端点
- 5、关于端点
1、服务监控的实现思路
监控的意义:
- 监控服务状态是否宕机
- 监控服务运行指标:内存、虚拟机、线程、请求等
- 监控日志
- 管理服务:服务下线与启动
当要监控的服务很多时,一个个去查看很不方便,因此考虑引入一个显示所有服务监控信息的服务。这个服务如果只能等待被监控的服务上报数据,那就会有延迟(比如人5分钟一上报),因此需要既支持上报,也支持主动拉取
。但从安全方面来想,你做一个监控服务,然后想监控谁就监控谁,不管别人是否同意,这也是不合理的,因此,需要被监控方配置了对应的监控地址,才能监控。如此就有这样一个效果:被监控方来决定,我受不受你监控,我的哪些数据可以被监控
。而对于负责监控的服务,又可以主动拉取其他服务的监控数据。
- 显示监控信息的服务:用于获取服务信息,并显示对应的信息
- 运行的服务:启动时主动上报,告知监控服务器自己需要受到监控
而SpringBoot Admin就是这样的一个技术:
Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。 客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应信息。
2、SpringBoot Admin服务端
先来做SpringBoot Admin的服务端,也就是上面思路里负责监控所有服务的那个服务。引入依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.4</version>
</dependency>
<!--这个版本不是SpringBoot维护的,
注意和SpringBoot的版本保持相近
-->
当然一般来说,服务端都是新创建的模块,那直接勾选Ops里的Admin Server也行
另外,如果是新模块的话,也记得加入mvc的依赖,配成web服务,不然服务启动完又停了:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
新模块的话记得改下服务端口,别冲突了:
server:
port: 8080
启动类加@EnableAdminServer
注解开启用Spring-Admin:
@SpringBootApplication
@EnableAdminServer
public class SpringbootServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServerApplication.class, args);
}
}
访问IP:PORT即可进入服务端监控页面
3、SpringBoot Admin客户端
SpringBoot Admin即要被监控的服务,首先引入admin客户端依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.4</version>
</dependency>
<!--这个版本不是SpringBoot维护的,注意和SpringBoot的版本保持相近-->
待监控的客户端服务加配置,这些配置就是上面说的"受不受监控,哪些数据可以被监控"。
spring:
boot:
admin:
client:
url: http://localhost:8080 # The admin server urls to register at
management:
endpoint:
health:
show-details: always # 服务的健康信息默认也是不开放的,默认never,改为always
endpoints:
web:
exposure:
include: "*" # 别直接写个*,记得加单引号或者双引号。默认值为health,所以没配这一项的时候可以看到健康状况
修改完成,重启客户端服务,查看服务端页面,可以看到监控成功:
如果配置中只写了允许监控服务监控状况,那服务端页面就长这样:
4、实现原理–Actuator与端点
看下客户端的依赖,里面有个actuator,Actuator提供了SpringBoot生产就绪功能,通过端点的配置与访问,获取端点信息。端点就是某一类监控信息,如health就是一个端点。SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息。
访问当前应用所有端点信息:GET => 客户端ip:port/actuator
访问某个端点的详细信息:GET => 客户端ip:port/actuator/端点名称
5、关于端点
Web程序专用端点:
关于端点的启用,通过enabled来启用指定端点:
management:
endpoint:
health: # 端点名称
enabled: true # health必须开放,要不SpringBoot Admin启动就报错了
show-details: always
beans: # 端点名称
enabled: true
info:
enabled: false
# ......
要启用所有端点的话:
management:
endpoints:
enabled-by-default: true
回顾下前面客户端SpringBoot Admin的部分配置,上面是决定是否对外开放这个数据,下面的只针对web方式:
management:
endpoint: # 这里配的是:是否对外开放
health:
show-details: always
endpoints:
web: # 这个是配能不能在web下看到
exposure:
include: "*"
端点中包含的信息存在敏感信息,需要对外暴露端点功能时手动设定指定端点信息,对于Jmx方式,默认都开启,没有排除的,如下表:
展开就是:
jmx的方式即jconsole,cmd打开DOS窗口输入jconsole,选择要查看的服务即可: