目录
- 未来的开发场景
- [Spring Boot Actuator](#Spring Boot Actuator)
- 代码示例
- [Endpoints 介绍](#Endpoints 介绍)
-
- [Actuator 提供的所有 endpoint](#Actuator 提供的所有 endpoint)
- [Spring Boot Admin](#Spring Boot Admin)
未来的开发场景
- 假设一个SpringBoot项目开发完毕部署到生产环境中,刚好出现线上问题,而运维希望能提供一些工具帮助定位问题。
- 再假设应用部署成功,但是发现运行方式与预期不一致,通过查看日志,发现加载的Bean自动配置有误,在生产环境中没法直接调试,用什么办法来解决问题。
- Spring Boot遵循着约定大于配置"的原则,许多功能使用默认的配置即可。好处在于我们不需要像使用Spring那样编写一大堆的XML配置代码,但过于简单的配置过程会让我们在了解各种依赖,配置之间的关系过程上带来一些困难。对于新手不太友好
- 对于一个大型的几十个、几百个微服务构成的微服务架构系统,在线上时通常会遇到下面一些问题
- 如何知道哪些服务出了问题,如何快速定位? (健康状况)
- 如何统一监控各个微服务的性能指标(内存、jvm、并发数、线程池、Http请求统计)
- 如何统一管理各个微服务的日志?(切换线上日志等级,快速搜索日志...)
- 如何优雅管理服务下线(正在运行的线程不发生中断)
- 不过没关系,在Spring Boot中,我们可以使用Actuator来监控应用,它提供了一系列的RESTful API让我们可以更为细致的了解各种信息。
- Spring Boot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能
Spring Boot Actuator
- Actuator是Spring Boot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。
- Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
- Spring Boot Actuator同时还可以与外部应用监控系统整合,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。容器的创建和停止都十分快速(秒级),更重要的是容器性能开销极低。
代码示例
1.引入依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.启动程序
-
在浏览器中输入如下的网址
-
SpringBoot 中提供了非常多的默认端点监控,但是出于安全考虑,默认情况下有些端点并不是开启状态,如 shutdown 端点就是默认关闭的。
-
SpringBoot 在运行时就会自动开发/actuator/health和/actuator/info这两个endpoint
3.修改配置文件,添加开放的端点
yaml
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always # 可以看到具体哪个是down,其中一个为down,那么status就是down
4.启动程序
- 在浏览器中输入如下的网址
http://localhost:8080/actuator/info
http://localhost:8080/actuator/health
http://localhost:8080/actuator/beans
http://localhost:8080/actuator/metrics
http://localhost:8080/actuator/metrics/jvm.gc.pause
Endpoints 介绍
- Spring Boot 提供了所谓的 endpoints给外部来与应用程序进行访问和交互。
- 打比方来说,/health 端点 提供了关于应用健康情况的一些基础信息。metrics 端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。
- 这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:
- 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
- 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
- 操作控制类:提供了对应用的关闭等操作类功能。
Actuator 提供的所有 endpoint
http方法 | Endpoint | 描述 |
---|---|---|
GET | /actuator | 查看有哪些 Actuator endpoint 是开放的 |
GET | /actuator/auditevent | 查看 audit 的事件,例如认证进入、订单失败,需要搭配 Spring Security |
GET | /actuator/beans | 查看全部的 bean,以及它们的关系 |
GET | /actuator/conditions | 查看自动配置的结果,记录哪些自动配置条件通过了,哪些没通过 |
GET | /actuator/configprops | 查看带有 @ConfigurationProperties 的 properties 值为何(包含默认值) |
GET | /actuator/env | 查看全部环境属性 |
GET | /actuator/flyway | 查看 flyway DB 的 migration 资讯 |
GET | /actuator/health | 查看当前 SpringBoot 运行的健康指标 |
GET | /actuator/heapdump | 取得 JVM 当下的 heap dump,会下载一个档案 |
GET | /actuator/info | 查看 properties 中 info开头的属性的值,沒啥用 |
GET | /actuator/mappings | 查看全部的 endpoint,以及他们和 Controller 的关系 |
GET | /actuator/metrics | 查看有哪些指标可以看 |
GET | /actuator/scheduledtasks | 查看定時任务的资讯 |
POST | /actuator/shutdown | 唯一一個需要 POST 请求的 endpoint,关闭这个 SpringBoot 程序 |
Spring Boot Admin
- Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。
- 该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。
- https://github.com/codecentric/spring-boot-admin
主要的功能点
- 显示应用程序的监控状态
- 应用程序上下线监控
- 查看 JVM,线程信息
- 可视化的查看日志以及下载日志文件
- 动态切换日志级别
- Http 请求信息跟踪
代码示例
1.添加依赖
xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
2.启动类添加注解
java
@SpringBootApplication
@EnableAdminServer
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
3.启动程序
- 在浏览器中输入如下的网址
http://localhost:8080/applications
将监控到的数据传输到Admin-Server中。
1.添加客户端依赖
在之前的redisdemo工程中添加以下依赖
xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
2.修改配置文件,指定admin-server的地址
在之前的redisdemo工程中配置admin-server的地址
yaml
spring:
boot:
admin:
client:
url: http://localhost:8080
instance:
service-url: http://localhost:${server.port}
3.启动程序
启动redisdemo工程