5

我正在尝试为我的 Spring Boot(2.1.0.RELEASE) 应用程序收集指标。具体来说,我想知道

  1. 调用单个 REST 端点的次数。
  2. 每个端点处理请求所花费的时间。
  3. 我的请求被处理/出错的平均速率。

执行器/actuator/metrics端点提供了很多信息,但我不确定这些信息是否对我的情况有用。另外,有人可以判断@Timed(或任何其他开箱即用的注释)是否可以用于实现这些统计信息,或者我必须在每个控制器方法中使用类似下面的内容:

  Timer timer = new SimpleMeterRegistry().timer("timer.name");
timer.record(() -> {
    // all logic here
});

我尝试在我的控制器方法上使用@Timed,但它没有向/actuator/metrics端点添加任何新响应。

4

3 回答 3

12

您可以使用 Spring Boot/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为特定的 endPoint 以及整个应用程序执行

本地主机: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"
            ]
        }
    ]
}
于 2019-07-11T11:05:14.477 回答
1

另一种方法是使用Spring Boot Admin。为此,我们必须配置客户端-服务器。为避免该错误,请确保客户端-服务器依赖项的版本相同。如图所示,我们可以从下拉列表中添加所需的指标。

客户端:

pom.xml

<dependency>
     <groupId>de.codecentric</groupId>
     <artifactId>spring-boot-admin-starter-client</artifactId>
     <version>2.1.4</version>
</dependency>

应用程序属性

spring.boot.admin.api-path=/instances
spring.boot.admin.client.url=http://localhost:6699
management.endpoints.web.exposure.include=*

服务器端:

应用程序属性

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);
    }

}

图形界面 http://localhost:6699/#/applications

主页 主页

指标 指标集合

健康 在此处输入图像描述

图表 在此处输入图像描述

于 2019-10-08T06:57:28.983 回答
0

使用执行器:要将执行器添加到基于 Maven 的项目中,请添加以下“启动器”依赖项:

    <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 包含许多内置端点,并允许您添加自己的端点。例如,健康端点提供基本的应用程序健康信息。默认情况下,健康端点映射到 /actuator/health。

默认情况下,除了关闭之外的所有端点都已启用。

由于端点可能包含敏感信息,您应该仔细考虑何时公开它们。在 application.properties 文件中添加以下内容以启用运行状况和信息

management.endpoints.jmx.exposure.include=health,info

或启用除 env 和 bean 之外的所有内容,请执行以下操作

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,bean
于 2021-12-27T17:26:06.817 回答