Spring Boot 执行器:公开操作信息
随着时间的推移,Spring Boot 由于其提供的功能而越来越受欢迎。现在,该框架为各种企业问题和模式提供了解决方案,并且最适合每种需求,它与大量自动配置库/模块捆绑在一起,以减少样板代码并让您专注于业务逻辑。
Spring boot Actuator 是 Spring Boot 的流行功能之一,用于创建生产就绪的应用程序。Actuator 公开了一组端点来监视您的应用程序运行状况、查看指标、使用 Spring Security 以及您声明应用程序生产就绪所需的许多其他功能来保护它们。
Spring Boot执行器的特点
- Spring Boot Actuator 模块允许您通过两种方式监控您的应用程序;通过利用 HTTP 端点或JMX(Java 管理扩展)。大多数应用程序都利用 HTTP 端点。
- 端点: Actuator 模块与一组丰富的 HTTP 端点捆绑在一起,用于监视应用程序并与应用程序交互。您甚至可以创建自定义端点来满足您的需求,还可以利用 spring-security 来保护执行器端点。几个例子是
- 信息
- 健康
- 指标
- 豆子
- 缓存
- 伐木工
- 映射
- 指标: Spring Boot Actuator 为名为Micrometer的仪器库提供支持,它是一个供应商中立的应用程序指标外观,可捕获应用程序指标并将其公开给不同的监控解决方案,例如 Prometheus、Dynatrace、New Relic、DataDog 等等...为计时器、仪表、计数器、分布摘要和具有维度数据模型的长任务计时器提供接口。
- 执行器模块是高度(但简单)可配置的,您可以利用您的 application.[properties|yaml] 文件来满足您的大多数自定义需求。
让我们构建一个 Spring Boot 应用程序并见证 spring-boot-actuator 的神奇作用......
先决条件:
- 您的系统上安装了 Java(推荐 JDK 17),尝试使用SDKMAN来管理您的 JDK 版本。
- 具有 starter-web 依赖项的 Spring 项目。
$ curl -G https://start.spring.io/starter.zip \
-d type=gradle-project \
-d language=java \
-d packaging=jar \
-d javaVersion=17 \
-d dependencies=web \
-d name=spring-boot-actuator-example \
-d baseDir=spring-boot-actuator-example \
-o starter.zip
$ # You can specify more options using -d option; like groupId, artifactId, packageName
$ unzip starter.zip
$ # Open project in your preferred IDE
将 Spring Boot Actuator 添加到您的应用程序中
在构建配置文件中添加“spring-boot-starter-actuator”依赖项。
对于 Maven 用户:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
对于 gradle 用户:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
一旦您在类路径中添加启动器-执行器依赖项并重新启动应用程序(重建后),您就可以看到执行器端点已由 Spring Boot 启用。默认情况下,“/actuator”是所有执行器端点的基本路径。
INFO 9143 --- [ main] i.c.s.SpringbootActuatorsApplication : No active profile set, falling back to 1 default profile: "default"
INFO 9143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
INFO 9143 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
INFO 9143 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.64]
INFO 9143 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
INFO 9143 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 648 ms
INFO 9143 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
INFO 9143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
INFO 9143 --- [ main] i.c.s.SpringbootActuatorsApplication : Started SpringbootActuatorsApplication in 1.271 seconds (JVM running for 1.818)
INFO 9143 --- [on(1)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
INFO 9143 --- [on(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
INFO 9143 --- [on(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
应用程序在端口 8080 上启动,让我们点击“/actuator”端点来查看所有可用的执行器端点...
正如您所观察到的,只有“/actuator/health”端点被暴露,默认情况下,出于安全原因,所有其他端点都被禁用,由于某些执行器端点可以暴露敏感数据,所以要小心...
让我们启用所有端点...通过设置“management.endpoints.web.exposure.include”属性来更新“application.properties”文件
management.endpoints.web.exposure.include=*
“*”模式将启用执行器模块公开的所有端点。但建议公开一组特定的端点(逗号分隔列表),这对于您的操作要求是必要的,以避免任何安全问题。
注意:“关闭”端点仍将被禁用,因为它对您的应用程序非常重要。它用于优雅地关闭您的应用程序。
让我们尝试点击“ http://localhost:8080/actuator ”
{
"_links" : {
"beans" : {
"href" : "http://localhost:8080/actuator/beans",
"templated" : false
},
"caches" : {
"href" : "http://localhost:8080/actuator/caches",
"templated" : false
},
"caches-cache" : {
"href" : "http://localhost:8080/actuator/caches/{cache}",
"templated" : true
},
"conditions" : {
"href" : "http://localhost:8080/actuator/conditions",
"templated" : false
},
"configprops" : {
"href" : "http://localhost:8080/actuator/configprops",
"templated" : false
},
"configprops-prefix" : {
"href" : "http://localhost:8080/actuator/configprops/{prefix}",
"templated" : true
},
"env" : {
"href" : "http://localhost:8080/actuator/env",
"templated" : false
},
"env-toMatch" : {
"href" : "http://localhost:8080/actuator/env/{toMatch}",
"templated" : true
},
"health" : {
"href" : "http://localhost:8080/actuator/health",
"templated" : false
},
"health-path" : {
"href" : "http://localhost:8080/actuator/health/{*path}",
"templated" : true
},
"heapdump" : {
"href" : "http://localhost:8080/actuator/heapdump",
"templated" : false
},
"info" : {
"href" : "http://localhost:8080/actuator/info",
"templated" : false
},
"loggers" : {
"href" : "http://localhost:8080/actuator/loggers",
"templated" : false
},
"loggers-name" : {
"href" : "http://localhost:8080/actuator/loggers/{name}",
"templated" : true
},
"mappings" : {
"href" : "http://localhost:8080/actuator/mappings",
"templated" : false
},
"metrics" : {
"href" : "http://localhost:8080/actuator/metrics",
"templated" : false
},
"metrics-requiredMetricName" : {
"href" : "http://localhost:8080/actuator/metrics/{requiredMetricName}",
"templated" : true
},
"scheduledtasks" : {
"href" : "http://localhost:8080/actuator/scheduledtasks",
"templated" : false
},
"self" : {
"href" : "http://localhost:8080/actuator",
"templated" : false
},
"threaddump" : {
"href" : "http://localhost:8080/actuator/threaddump",
"templated" : false
}
}
}
请查看此spring 文档,了解每个端点的详细说明。
* application.properties 文件中的一些更多配置:
#1. Update default port for actuator endpoints
management.server.port=2121
#2. Update base-path to use **'/manage'** instead of **'/actuator'**
management.endpoints.web.base-path=/manage
#3. Following will ensure include all actuator endpoints except 'mappings' and 'heapdump'
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=mappings,heapdump
健康端点
运行状况端点将应用程序的运行状况暴露给外界(使用有用的数据),此端点在分布式系统中变得更加重要,其中一项服务的活性依赖于另一项服务,例如数据库、队列或其他应用程序。
现在,让我们尝试“/actuator/health”端点,并查看响应
目前,运行状况端点返回的唯一信息是应用程序是否启动,默认情况下,运行状况端点不会显示所有详细信息。可以通过设置 health.show-details 属性的值来启用(或安全启用)此功能。
management.endpoint.health.show-details=always
# Possible values for health.show-details can be one of the following
# never|always|when_authorized
# by default it is set to 'never',
# 'always' will display all the details,
# 'when_autorized' will display details when requesting user is authorized.
请注意,Spring Boot Actuator 模块支持使用以下模式单独更新每个端点的配置。
# Pattern: management.endpoint.{endpoint-name}.{property}=value
# property attribute can vary according to endpoint
management.endpoint.configprops.enabled=true
management.endpoint.info.enabled=false
management.endpoint.beans.cache.time-to-live=10s
management.endpoint.logfile.external-file=~/app.log
信息端点
现在让我们尝试“/actuator/info”端点,看看它返回什么。
因此,默认情况下,信息端点不会返回任何有用的信息,您可以通过更新构建配置来自定义信息端点的响应,让我们逐步了解如何在 build.gradle 文件中配置信息端点。
Maven 用户也可以关注这个Spring 官方文档
对于gradle用户,我们首先更新build.gradle文件,添加buildInfo任务,并更新版本值。
description = 'Spring Boot Actuator Configuration App'
version = '2.0.0'
springBoot {
buildInfo() {
properties {
additional = [
'lastRelease': '1.0.0',
'description': rootProject.description
]
}
}
}
除了构建信息之外,您还可以在 application.properties 文件中设置其他信息:
management.info.env.enabled=true
app.cusomInfo=This is Custom Info
info.app.cusomInfo=${app.cusomInfo}
info.app.java-version=${java.version}
info.app.java-vendor=${java.vendor}
info.app.excluded-actuator-enpoints=${management.endpoints.web.exposure.exclude}
您可以观察响应中的所有配置信息。信息端点可以进一步扩展以公开 git 相关信息(如提交 ID、分支)。
最后的话:
正如我们可以通过利用 application.[properties|yaml] 文件观察到的那样,我们可以完全自定义和配置我们的执行器端点以公开有用的信息。在后续文章中,我们将了解如何创建自定义端点,并使用千分尺连接到不同的监控工具。
- 点赞
- 收藏
- 关注作者
评论(0)