Коллекция метрик для API-интерфейсов REST Spring Boot - PullRequest
3 голосов
/ 11 июля 2019

Я пытаюсь собрать показатели для моего приложения 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.

1 Ответ

5 голосов
/ 11 июля 2019

Вы можете использовать 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 каксколько раз конкретная конечная точка
    вызывается с определенным статусом
  • Чтобы получить среднее время выполнения конечной точки, вы можете сделать TOTAL_TIME/COUNT для конкретной конечной точки, а также для всего приложения

localhost: 8889 / привод / метрики / 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 / привод / метрики/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);
    }

}

GUI http://localhost:6699/#/applications

Домашняя страница Homepage

Метрики Metric Colletion

Здоровье enter image description here

Графики enter image description here

...