java - Spring Boot REST API 的指标收集

标签 java spring-boot spring-boot-actuator spring-boot-admin spring-micrometer

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

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

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

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

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

最佳答案

您可以使用 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 特定端点以及整个端点 应用

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"
            ]
        }
    ]
}

关于java - Spring Boot REST API 的指标收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987541/

相关文章:

java - 如何将图像从MYSQL显示到JTable单元格行?

java - Kubernetes 服务节点端口不工作

java - 如何在 Spring Boot 中测试对外部 api 的调用

spring - 为 Spring Webclient 默认指标添加标签

java - 哪个更好 : letting Java do autoboxing or using valueOf()

java - Android线程完成通知

Java:是否可以(在运行时)获取 future 方法调用的源文件名和行号?

java - 使用 Vaadin 14 的 RTL 支持

从 Spring Boot 2.1.6 升级到 2.2.2 后,Prometheus 不导出 Kafka Consumer 数据

java - Spring OAuth2 java.util.LinkedHashMap 无法转换为 org.springframework.security.web.authentication.WebAuthenticationDetails