Spring Boot Actuator 服务监控与管理
参考地址:https://docs.spring.io/spring-boot/docs/2.2.0.M6/reference/html/production-ready-features.html#production-ready-enabling
https://docs.spring.io/spring-boot/docs/current/actuator-api/html/
Spring Boot版本:2.2.0.M6
Actuator作用
SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。
添加actuator模块
基于Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
基于Gradle
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
引用成功之后,即可启动spring boot工程,启动成功如下:
可看到有health
,info
等映射信息。
端点
端点说明详解:
ID | 描述 | 默认启用 |
---|---|---|
auditevents | 公开当前应用程序的审核事件信息。 | 是 |
beans | 显示应用程序中所有Spring Bean的完整列表。 | 是 |
caches | 公开可用的缓存。 | 是 |
conditions | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 | 是 |
configprops | 显示所有的整理列表@ConfigurationProperties 。 | 是 |
env | 公开Spring的属性ConfigurableEnvironment 。 | 是 |
flyway | 显示已应用的所有Flyway数据库迁移。 | 是 |
health | 显示应用程序运行状况信息。 | 是 |
httptrace | 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应交换)。 | 是 |
info | 显示任意应用程序信息。 | 是 |
integrationgraph | 显示Spring Integration图。 | 是 |
loggers | 显示和修改应用程序中记录器的配置。 | 是 |
liquibase | 显示已应用的所有Liquibase数据库迁移。 | 是 |
metrics | 显示当前应用程序的“指标”信息。 | 是 |
mappings | 显示所有@RequestMapping 路径的整理列表。 | 是 |
scheduledtasks | 显示应用程序中的计划任务。 | 是 |
sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对反应式Web应用程序的支持时不可用。 | 是 |
shutdown | 使应用程序正常关闭。 | 没有 |
threaddump | 执行线程转储。 | 是 |
如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:
ID | 描述 | 默认启用 |
---|---|---|
heapdump | 返回hprof 堆转储文件。 | 是 |
jolokia | 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。 | 是 |
logfile | 返回日志文件的内容(如果已设置logging.file.name 或logging.file.path 属性)。支持使用HTTP Range 标头来检索部分日志文件的内容。 | 是 |
prometheus | 以Prometheus服务器可以抓取的格式公开指标。 | 是 |
启动端点
默认情况下,除了shutdown
之外都是开启状态。如果想配置端点状态,可以根management.endpoint.<id>.enabled
进行配置端点状态,例如:
#启动shudtown端点
management.endpoint.shutdown.enabled=true
当然也可以默认吧所有端点关闭,然后开启自己想开启的端点。
#修改所有端点开启状态
management.endpoints.enabled-by-default=false
#打开info端点
management.endpoint.info.enabled=true
注意:即使在这里启动了端点,也无法通过web进行访问,需要端点暴露
暴露端点
由于端点可能包含敏感信息,因此应谨慎考虑何时公开它们。下表显示了内置端点的默认暴露:
ID | JMX | Web |
---|---|---|
auditevents | 是 | 没有 |
beans | 是 | 没有 |
caches | 是 | 没有 |
conditions | 是 | 没有 |
configprops | 是 | 没有 |
env | 是 | 没有 |
flyway | 是 | 没有 |
health | 是 | 是 |
heapdump | N / A | 没有 |
httptrace | 是 | 没有 |
info | 是 | 是 |
integrationgraph | 是 | 没有 |
jolokia | N / A | 没有 |
logfile | N / A | 没有 |
loggers | 是 | 没有 |
liquibase | 是 | 没有 |
metrics | 是 | 没有 |
mappings | 是 | 没有 |
prometheus | N / A | 没有 |
scheduledtasks | 是 | 没有 |
sessions | 是 | 没有 |
shutdown | 是 | 没有 |
threaddump | 是 | 没有 |
要更改端点暴露,使用下面的特定技术include
和exclude
特性:
属性 | 默认 |
---|---|
management.endpoints.jmx.exposure.exclude | |
management.endpoints.jmx.exposure.include | * |
management.endpoints.web.exposure.exclude | |
management.endpoints.web.exposure.include | info, health |
include
属性列出了公开的端点的ID。该exclude
属性列出了不应公开的端点的ID。
exclude
属性优先于该include
属性
例如,要通过HTTP公开除env
和beans
端点之外的所有内容
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
Auto-configured HealthIndicators
我们可以根据以下进行自定义配置
名称 | 描述 |
---|---|
CassandraHealthIndicator | 检查Cassandra数据库是否已启动。 |
CouchbaseHealthIndicator | 检查Couchbase群集是否已启动。 |
DiskSpaceHealthIndicator | 检查磁盘空间不足。 |
ElasticSearchRestHealthContributorAutoConfiguration | 检查Elasticsearch集群是否已启动。 |
HazelcastHealthIndicator | 检查Hazelcast服务器是否已启动。 |
InfluxDbHealthIndicator | 检查InfluxDB服务器是否已启动。 |
InfluxDbHealthIndicator | 检查InfluxDB服务器是否已启动。 |
JmsHealthIndicator | 检查JMS代理是否启动。 |
MailHealthIndicator | 检查邮件服务器是否已启动。 |
MongoHealthIndicator | 检查Mongo数据库是否已启动。 |
PingHealthIndicator | 一律以回应UP 。 |
RabbitHealthIndicator | 检查Rabbit服务器是否已启动。 |
RabbitHealthIndicator | 检查Rabbit服务器是否已启动。 |
RedisHealthIndicator | 检查Redis服务器是否启动。 |
SolrHealthIndicator | 检查Solr服务器是否已启动。 |
通过设置
management.health.defaults.enabled
属性来全部禁用它们