Spring 引导 REST API 的指标收集
Metrics Collection for Spring Boot REST APIs
我正在尝试为我的 Spring Boot(2.1.0.RELEASE) 应用程序收集指标。具体来说,我想知道
- 调用各个 REST 端点的次数。
- 每个端点处理请求所用的时间。
- 我的请求的平均速率 processed/errored。
执行器 /actuator/metrics
端点提供了很多信息,但我不确定其中是否对我的情况有用。此外,有人可以告诉我是否可以使用 @Timed(或任何其他开箱即用的注释)来实现这些统计信息,或者我必须在每个控制器方法中使用如下所示的内容:
Timer timer = new SimpleMeterRegistry().timer("timer.name");
timer.record(() -> {
// all logic here
});
我尝试在我的控制器方法上使用@Timed,但它没有向 /actuator/metrics
端点添加任何新响应。
您可以使用 Spring 引导 /actuator/metrics/http.server.requests
获取所有执行的端点及其计数、异常、结果、状态、总时间等,如下所示。
如果您想查看特定端点的详细信息,那么您可以通过调用请求来完成
localhost:8889/actuator/metrics/http.server.requests?tag=uri:<endPoint>
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets&tag=status:200
- 你会得到
COUNT
作为特定端点的次数
叫
- 你会得到
COUNT
作为特定端点的次数
以 特定状态 调用
- 要获得执行 endPoint 的平均时间,你可以这样做
TOTAL_TIME/COUNT
对于特定端点以及整个端点
申请
localhost:8889/actuator/metrics/http.server.requests
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 3
},
{
"statistic": "TOTAL_TIME",
"value": 0.21817219999999998
},
{
"statistic": "MAX",
"value": 0.1379249
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"MethodArgumentTypeMismatchException",
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "uri",
"values": [
"/{id}.*",
"/user/asset/getAsset/{assetId}",
"/user/asset/getAllAssets"
]
},
{
"tag": "outcome",
"values": [
"CLIENT_ERROR",
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"400",
"404",
"200"
]
}
]
}
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 1
},
{
"statistic": "TOTAL_TIME",
"value": 0.1379249
},
{
"statistic": "MAX",
"value": 0
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "outcome",
"values": [
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"200"
]
}
]
}
另一种方法是使用Spring Boot Admin。为此,我们必须配置客户端-服务器。为避免错误,请确保客户端-服务器依赖项的版本相同。我们可以从下拉列表中添加所需的指标,如图所示。
客户端:
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.4</version>
</dependency>
application.properties
spring.boot.admin.api-path=/instances
spring.boot.admin.client.url=http://localhost:6699
management.endpoints.web.exposure.include=*
服务器端:
application.properties
server.port = 6699
spring.boot.admin.server.url=http://localhost:8889
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.4</version>
</dependency>
添加@EnableAdminServer
import de.codecentric.boot.admin.server.config.EnableAdminServer;
@SpringBootApplication
@EnableAdminServer
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
GUIhttp://localhost:6699/#/applications
首页
指标
健康
图表
使用执行器:
要将执行器添加到基于 Maven 的项目,请添加以下“Starter”依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
对于 Gradle,使用以下声明:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
执行器端点可让您监控应用程序并与之交互。 Spring Boot 包含许多内置端点,您可以添加自己的端点。例如,health 端点提供基本的应用程序健康信息。
默认情况下,健康端点映射到 /actuator/health.
默认情况下,启用除关闭之外的所有端点。
由于 Endpoints 可能包含敏感信息,您应该仔细考虑何时公开它们。
在 application.properties 文件中添加以下内容以启用 health 和 info
management.endpoints.jmx.exposure.include=health,info
或者要启用除 env 和 bean 之外的所有内容,请执行以下操作
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,bean
我正在尝试为我的 Spring Boot(2.1.0.RELEASE) 应用程序收集指标。具体来说,我想知道
- 调用各个 REST 端点的次数。
- 每个端点处理请求所用的时间。
- 我的请求的平均速率 processed/errored。
执行器 /actuator/metrics
端点提供了很多信息,但我不确定其中是否对我的情况有用。此外,有人可以告诉我是否可以使用 @Timed(或任何其他开箱即用的注释)来实现这些统计信息,或者我必须在每个控制器方法中使用如下所示的内容:
Timer timer = new SimpleMeterRegistry().timer("timer.name");
timer.record(() -> {
// all logic here
});
我尝试在我的控制器方法上使用@Timed,但它没有向 /actuator/metrics
端点添加任何新响应。
您可以使用 Spring 引导 /actuator/metrics/http.server.requests
获取所有执行的端点及其计数、异常、结果、状态、总时间等,如下所示。
如果您想查看特定端点的详细信息,那么您可以通过调用请求来完成
localhost:8889/actuator/metrics/http.server.requests?tag=uri:<endPoint>
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets&tag=status:200
- 你会得到
COUNT
作为特定端点的次数 叫 - 你会得到
COUNT
作为特定端点的次数
以 特定状态 调用
- 要获得执行 endPoint 的平均时间,你可以这样做
TOTAL_TIME/COUNT
对于特定端点以及整个端点 申请
localhost:8889/actuator/metrics/http.server.requests
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 3
},
{
"statistic": "TOTAL_TIME",
"value": 0.21817219999999998
},
{
"statistic": "MAX",
"value": 0.1379249
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"MethodArgumentTypeMismatchException",
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "uri",
"values": [
"/{id}.*",
"/user/asset/getAsset/{assetId}",
"/user/asset/getAllAssets"
]
},
{
"tag": "outcome",
"values": [
"CLIENT_ERROR",
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"400",
"404",
"200"
]
}
]
}
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 1
},
{
"statistic": "TOTAL_TIME",
"value": 0.1379249
},
{
"statistic": "MAX",
"value": 0
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "outcome",
"values": [
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"200"
]
}
]
}
另一种方法是使用Spring Boot Admin。为此,我们必须配置客户端-服务器。为避免错误,请确保客户端-服务器依赖项的版本相同。我们可以从下拉列表中添加所需的指标,如图所示。
客户端:
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.4</version>
</dependency>
application.properties
spring.boot.admin.api-path=/instances
spring.boot.admin.client.url=http://localhost:6699
management.endpoints.web.exposure.include=*
服务器端:
application.properties
server.port = 6699
spring.boot.admin.server.url=http://localhost:8889
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.4</version>
</dependency>
添加@EnableAdminServer
import de.codecentric.boot.admin.server.config.EnableAdminServer;
@SpringBootApplication
@EnableAdminServer
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
GUIhttp://localhost:6699/#/applications
首页
指标
健康
图表
使用执行器: 要将执行器添加到基于 Maven 的项目,请添加以下“Starter”依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
对于 Gradle,使用以下声明:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
执行器端点可让您监控应用程序并与之交互。 Spring Boot 包含许多内置端点,您可以添加自己的端点。例如,health 端点提供基本的应用程序健康信息。 默认情况下,健康端点映射到 /actuator/health.
默认情况下,启用除关闭之外的所有端点。
由于 Endpoints 可能包含敏感信息,您应该仔细考虑何时公开它们。 在 application.properties 文件中添加以下内容以启用 health 和 info
management.endpoints.jmx.exposure.include=health,info
或者要启用除 env 和 bean 之外的所有内容,请执行以下操作
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,bean