【问题标题】:How get http.server.requests metrics programmatically如何以编程方式获取 http.server.requests 指标
【发布时间】:2020-01-31 15:39:20
【问题描述】:

我好像没有得到 Spring Boot 指标

我有 spring boot 2 应用程序和 org.springframework.boot:spring-boot-starter-actuator

如何以编程方式从此响应中获取数据?

https://localhost/actuator/metrics/http.server.requests?tag=status:200

{
"name": "http.server.requests",
"baseUnit": "seconds",
"measurements": [
    {
        "statistic": "COUNT",
        "value": 1.0
    },
    {
        "statistic": "TOTAL_TIME",
        "value": 250.654721314
    },
    {
        "statistic": "MAX",
        "value": 0.0
    }
],
"availableTags": [
    {
        "tag": "exception",
        "values": [
            "ClientAbortException"
        ]
    },
    {
        "tag": "method",
        "values": [
            "GET"
        ]
    },
    {
        "tag": "uri",
        "values": [
            "/users/metric"
        ]
    },
    {
        "tag": "outcome",
        "values": [
            "SUCCESS"
        ]
    }
]

}

我试过了

@Autowired
private SimpleMeterRegistry meterRegistry;


    Counter counter = meterRegistry.counter("http.server.requests");
    Iterable<Measurement> measure = counter.measure();

但它没有我需要的数据。是零

【问题讨论】:

    标签: spring spring-boot spring-boot-actuator


    【解决方案1】:

    您可以将COUNT 设为follow. 但是,我建议使用Spring Boot Admin,它会显示所有相关指标和其他详细信息。

    int count = 0;
          StringBuilder result = new StringBuilder();
          URL url = new URL(URLtoMap);  //http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:" + endPoint + "";
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          conn.setRequestMethod("GET");
          BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
          String line;
          while ((line = rd.readLine()) != null) {
             result.append(line);
          }
          rd.close();
    
          try {
                JSONObject jsonObject =new JSONObject(result.toString().replace("\"", "")); 
                JSONObject jsonCountObject = new JSONObject(jsonObject.getJSONArray("measurements").get(0).toString());
                count =(int) jsonCountObject.get("value");
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
    
          return count;
    

    【讨论】:

    • 不是没有 REST 请求就可以获取它们的方法吗?
    • 我需要获取数据并保存到数据库中
    【解决方案2】:

    我对执行器有点陌生,但您可以使用注入 MeterRegistry 的一种方法,无需请求即可:

    meterRegistry.get("http.server.requests").timers()
        .forEach(t -> {
            System.out.println("Request count: " + t.count());
            System.out.println("Request type:" + t.getId().getTag("method"));
            System.out.println("Request status:" + t.getId().getTag("status"));
            System.out.println("Request uri:" + t.getId().getTag("uri"));
         });
    

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2011-03-28
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多