【SpringBoot框架学习】Actuator监控中心 详解
基本知识点:
什么是 Actuator监控中心?
针对 微服务器
- 监控
- 内存变化(堆内存,线程,日志管理等)
- 检测服务配置连接池是否可用(模拟访问、懒加载)
- 统计现有Bean(通过Spring容器) 和 Http接口(@RequestMapping)
的一系列数据管理机制
Actuator监控应用只通过JSON形式返回数据统计结果,没有UI界面处理
AdminUI则内置Actuator服务监控,并对返回JSON数据进行图形化处理展示
为什么要学习actuator监控呢?
应用场景:
微服务架构中,多功能由多个服务器实现
虽然这样做减少了主服务器的压力,但是给运维同志们造成了很大的压力!
因此,为了做到高效运维,需要一套 自动化的监控运维机制:
- 不间断地收集各个微服务应用的各项 指标情况
- 根据这些基础指标信息来制定监控和预警规则
而SpringBoot的监控机制,正是迎合了这种需求
它可以通过使用HTTP端点的各个请求路径 或 JMX 来 监管、审计、收集 引用的运行情况,
概括来讲,就是:
简化 管理微服务 的流程
Maven依赖:
<!--actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
基本使用:
起步:
当我们导入了上述Maven依赖后,启动:
只要出现上述的信息,就代表Actuator成功配置上了!
1. 若是我们访问
http://localhost:设置的端口号/actuator
就会显示如下结果:
2. 若是我们访问
http://localhost:8080/actuator/health
就会显示
3. 若是我们访问
http://localhost:8080/actuator/info
就会显示
其实,health和info都是actuator的内置端点
那么,本人来介绍下 actuator的内置端点:
内置端点:
Endpoint ID | Description |
---|---|
auditevent | 显示 应用暴露的 审计事件 (比如认证进入、订单失败) |
info | 显示 应用的基本信息 |
health | 显示 应用的健康状态 |
metrics | 显示 应用多样的度量信息 |
loggers | 显示和修改 配置的loggers |
logfile | 返回 log file中的内容 (如果logging.file或者logging.path被设置) |
httptrace | 显示 HTTP足迹 (最近100个HTTP request/repsponse) |
env | 显示 当前的环境特性 |
flyway | 显示 数据库迁移路径 的 详细信息 |
liquidbase | 显示 Liquibase数据库迁移 的 详细信息 |
shutdown | 优雅地 逐步关闭应用 |
mappings | 显示 所有的@RequestMapping路径 |
scheduledtasks | 显示 应用中的 调度任务 |
threaddump | 执行 一个 线程dump |
heapdump | 返回 一个 GZip压缩的JVM堆dump |
其实这些信息,我们在IDEA中也能观察得到:
获取 端点的详细信息:
若是我们想要获取某个端点的详细信息,
则在配置文件中加入
# 获得健康检查中所有指标的详细信息
management.endpoint.health.show-details=always
即可
本人以health端点为例,来展示设置后的效果
在加入后,当我们再次访问health端点后,就会显示:
在这里还有两个关于info端点的问题:
info端点 问题:
1. info端点不显示(仅显示{})问题:
- 原因:
生成文件中的META-INF目录下的build-info.properties文件没有生成
- 解决办法:
我们只需要双击Maven提供的插件,生成即可:
2. 自定义 info端点 的内容:
在application.properties配置文件中,加入如下中的所需内容即可:
# info内容自定义
info.app.name=${spring.application.name}
info.app.description=@project.description@
info.app.version=@project.version@
info.app.encoding=@project.build.sourceEncoding@
info.app.java.version=@java.version@
但是,我们若是直接去访问这些端点,则会404异常:
这是为什么呢?
答曰:
只有 health 和 info 端点 默认 是 暴露的
那么,我们该如何暴露这些端点呢?
设置 端点 暴露:
由于properties配置文件 和 yml配置文件 效果是一样的,
因此本人在此仅展示 properties配置文件 的设置步骤:
在application.properties配置文件中加入
# 暴露指定端点
management.endpoints.web.exposure.include=目标端点1, 目标端点2, ...
或者
# 暴露所有端点
management.endpoints.web.exposure.include=*
抑或是
# 暴露除指定端点外的其它端点
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=非目标端点1, 非目标端点2, ...
这时,我们能发现:
当我们再次访问
http://localhost:8080/actuator
时,我们设置的端点也会出现在返回的结果中:
这时,当我们再次访问设置暴露的端点时,就会显示出相应的信息:
在本篇博文刚开始就讲过:
actuator监控 机制,是来简化运维同志们的操作的
那么,本人在这里再来扩展一个知识点 —— ui界面化插件:
ui界面化 —— AdminUI:
Server端:
Maven依赖:
(注意:此处的Maven依赖,是在actuator的基础上增加的)
<!--ui插件 服务端-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>2.2.3</version>
</dependency>
配置Server端的端口号:
在application配置文件中加入
server:
port: 自定义 服务器端 端口号
声明Server:
在该程序的Application启动类上,加上
@EnableAdminServer
注解
查看结果:
这时,当我们访问
http://localhost:配置文件中配置的端口号
就会出现如下页面:
Client端:
Maven依赖:
(注意:此处的Maven依赖,是在actuator的基础上增加的)
<!--ui插件 客户端-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.3</version>
</dependency>
配置client端的端口号:
由于好多同学和本人一样,在一台机子上测试,
因此,要注意不要 与server端的端口号 冲突
server:
port: 自定义的client端的port
连接Server端:
spring:
boot:
admin:
client:
url: http://localhost:要连接的server的port
测试:
先启动Server端,再启动两个Client端(一定要注意 端口冲突问题!)
访问
http://localhost:之前设置的server的port
就会显示如下页面:
我们访问第一个链接:
可以看到:测试成功了!
(之所以此处显示Login Failure页面,是因为本人为了展示actuator-ui,
找的之前博文《【Spring Security框架学习】专栏总集篇》中的程序来充当的client端)
当我们点击应用墙,就会看到:
我们再来查看下第二个client的情况:
心得体会 与 未来展望:
其实看到这里,相信很多同学和本人一样:
想到了本人之前的博文 —— 《详解 服务发现 的基本实现》中所讲解的 服务发现 的重要组件 功能一致!
而此处的Server端就是服务发现中的监控器
Client端就是App服务器
本人再来展示下 服务发现框架 的基本组件:
(由于原理都一致,SpringCloud的官方图片未找到,本人就挑选最熟悉的Dubbo来展示)
可以看到:
Dubbo中的Monitor,正是和本篇博文的 Actuator 功能一致!
而在我们之后学习微服务框架的过程中,也会学到两者的整合
所以本篇博文仅讲解下基本使用原理,来为同学们扫扫盲,希望对有需要的同学有所帮助!