title: SpringBoot2.X性能监控Actuator
date: 2020-03-20
author: maxzhao
tags:
- SpringBoot
- Actuator
categories:
- SpringBoot
一、前言
SpringBoot Actuator 服务监控与管理**
其中包含了很多的服务,比如我们常用的amqp
、JVM
、cache
等等,下面是actuator
包下的目录
amqp,audit,beans,cache,cassandra,context,couchbase,elasticsearch,endpoint,env,flyway,health,influx,info,integration,jdbc,jms,ldap,liquibase,logging,mail,management,metrics,mongo,neo4j,redis,scheduling,security,session,solr,system,http,web
是不是感觉挺全面的。
二、服务监控与管理
Maven 依赖
org.springframework.boot
spring-boot-starter-actuator
主要配置
Spring Boot2.x中,默认只开放了info、health
两个端点,开放其他端点需要配置
# 开启所有端点
management:
endpoints: # 这里是 endpoints
web:
# 默认路径
base-path: /actuator
exposure:
# Endpoint IDs that should be included or '*' for all.
include: '*'
# 显示详细的 health 信息
jmx:
# Whether unique runtime object names should be ensured.
domain: org.springframework.boot
exposure:
# Endpoint IDs that should be included or '*' for all.
include: '*'
# 显示详细的 health 信息
endpoint: # 这里是 endpoint
health:
show-details: always
# 打开 shutdown 端点,通过 POST 访问该端点可以关闭应用
shutdown:
enabled: true
监控状态
启动之后访问 http://localhost:8062/boot/actuator/health 就可以看到对应的项目监控状态。
访问 http://localhost:8062/boot/actuator 可以查看有那些监控。
健康指标 HealthIndicators 由 Spring Boot 自动配置,因此这里显示监控信息是由项目所使用的技术栈而决定的:
名称 | 描述 |
---|---|
CassandraHealthIndicator | 检查 Cassandra 数据库是否启动。 |
DiskSpaceHealthIndicator | 检查磁盘空间不足。 |
DataSourceHealthIndicator | 检查是否可以获得连接 DataSource。 |
ElasticsearchHealthIndicator | 检查 Elasticsearch 集群是否启动。 |
InfluxDbHealthIndicator | 检查 InfluxDB 服务器是否启动。 |
JmsHealthIndicator | 检查 JMS 代理是否启动。 |
MailHealthIndicator | 检查邮件服务器是否启动。 |
MongoHealthIndicator | 检查 Mongo 数据库是否启动。 |
Neo4jHealthIndicator | 检查 Neo4j 服务器是否启动。 |
RabbitHealthIndicator | 检查 Rabbit 服务器是否启动。 |
RedisHealthIndicator | 检查 Redis 服务器是否启动。 |
SolrHealthIndicator | 检查 Solr 服务器是否已启动。 |
常用端点
查看常用接口
http://localhost:8062/boot/actuator/
env 端点,应用获取环境信息,包括:环境变量、JVM属性、应用的配置配置、命令行中的参数等等。
localhost:8080/actuator/env
mapping 端点,url 与 控制器映射关系信息
localhost:8080/actuator/info
metrics 端点,引用度量指标端点,提供引用再运行时的信息,如内存使用情况、HTTP请求统计、外部资源指标等
查看所有度量指标 localhost:8080/actuator/metrics
查看度量指标详细信息 localhost:8080/actuator/metrics/jvm.gc.pause
loggers 端点,查看可配置 loggers 的列表及相关的等级信息
localhost:8080/actuator/loggers
查看特定的 logger 详细信息localhost:8080/actuator/loggers/{name}
健康检查
health 端点用于暴露程序运行的健康状态,暴露的信息的详细程度由 management.endpoint.health.show-details 来控制,它具有以下三个可选值:
名称 | 描述 |
---|---|
never | 细节永远不会显示。 |
when-authorized | 详细信息仅向授权用户显示。授权角色可以使用配置 management.endpoint.health.roles。 |
always | 详细信息显示给所有用户。 |
在 org.springframework.boot.actuate.health.ShowDetails
中有详细说明。
端点列表
-
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
三、自定义健康检查
在启动类中加入
@Bean
HealthIndicator customHealthIndicator() {
return () -> Health.status("DOWN")
.withDetail("error code", "某健康专项检查失败").build();
}
@Bean
HealthIndicator customUpHealthIndicator() {
return () -> Health.up().withDetail("success code", "自定义检查一切正常 UP").build();
}
@Bean
HealthIndicator customDownHealthIndicator() {
return () -> Health.up().withDetail("success code", "自定义检查一切正常 DOWN ").build();
}
访问 http://localhost:8062/boot/actuator/health 的结果为:
这里我开启了redis
,数据库为mysql
{
"status": "DOWN",
"details": {
"custom": {
"status": "FATAL",
"details": {
"error code": "某健康专项检查失败"
}
},
"customUp": {
"status": "UP",
"details": {
"success code": "自定义检查一切正常 UP"
}
},
"customDown": {
"status": "DOWN",
"details": {
"success code": "自定义检查一切正常 DOWN "
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": "471182741504",
"free": "375580655616",
"threshold": "10485760"
}
},
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"hello": "1"
}
},
"redis": {
"status": "UP",
"details": {
"version": "5.0.8"
}
}
}
}
当前details
中有一个检查status
为DOWN
时,Health
检查的status
就为DOWN
,否则为UP
。
如果把第一个FATAL
改为DOWN
,Health
检查结果同样为DOWN
。
下表显示了内置状态的默认映射:
Status | Mapping |
---|---|
DOWN | SERVICE_UNAVAILABLE (503) |
OUT_OF_SERVICE | SERVICE_UNAVAILABLE (503) |
UP | No mapping by default, so http status is 200 |
UNKNOWN | No mapping by default, so http status is 200 |
四、自定义端点
Spring Boot 支持使用 @Endpoint
来自定义端点暴露信息。
@Endpoint(id = "customEndPoint")
@Component
public class CustomEndPoint {
@ReadOperation
public Map getInfo() {
Map dataMap = new LinkedHashMap<>();
dataMap.put("自定义信息", "custom endpoint ");
return dataMap;
}
}
请求 http://localhost:8062/boot/actuator/customEndPoint 的结果为
{
"自定义信息": "custom endpoint "
}
可用的方法注解由 HTTP 操作所决定:
operation | HTTP 方法 |
---|---|
@ReadOperation | GET |
@WriteOperation | POST |
@DeleteOperation | DELETE |