javaspring-bootspring-boot-actuatorspring-boot-adminspring-micrometer

Metrics Collection for Spring Boot REST APIs


I am trying to collect metrics for my Spring Boot(2.1.0.RELEASE) Application. Specifically, I want to know

  1. No of times individual REST endpoints were called.
  2. Time taken by each of those endpoints to process the request.
  3. Average rate at which my requests are being processed/errored.

The actuator /actuator/metrics endpoint gives lot of info but I am not sure if any of those are useful for my case. Also, can someone tell if @Timed(or any other out-of-the-box annotation) can be used for achieving those stats or I have to use something like below in every controller method:

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

I tried using @Timed on my controller method but it doesn't adds any new response to the /actuator/metrics endpoint.


Solution

  • You can use Spring Boot /actuator/metrics/http.server.requests to get all endPoints which are executed with their count, exception, outcome, status, total time, etc as follow.

    If you want to see details for particular endPoint then you can do it by calling request as follow

    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
    

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