static final Counter requests = Counter.build()
.name("requests_total")
.help("Total requests.")
.labelNames("method", "api")
.register();
CollectorRegistry
를 지정하지 않으면, default registry 를 사용한다.API 호출 수를 count 하기 위한 counter 정의.
static final Counter requests = Counter.build()
.name("requests_total")
.help("Total requests.")
.labelNames("method", "api")
.register();
API의 각 메소드에 다음과 같이 api 별로 count를 할 수 있도록 한다.
requests.labels($http_method, $api).inc();
Req/s by API
sum by (method, api) (irate(requests_total[$__rate_interval]))
Website 호출 latency 를 측정하기위한 Histogram 정의
static final Histogram remoteSiteLatency = Histogram.build()
.name("remote_website_latency_seconds")
.help("Request latency in seconds.")
.labelNames("site")
.buckets(0.1, 0.5, 0.8, 0.9, 0.95, 0.99, 1)
.register();
long startTime = System.currentTimeMillis();
String response = restTemplate.getForObject(site, String.class);
remoteSiteLatency.labels(site).observe((System.currentTimeMillis() - startTime) / 1000);
Histogram.Timer timer = remoteSiteLatency.labels(site).startTimer();
String response = restTemplate.getForObject(site, String.class);
timer.observeDuration();
try (Histogram.Timer requestTimer = remoteSiteLatency.labels(site).startTimer()) {
String response = restTemplate.getForObject(site, String.class);
return ResponseEntity.ok(response);
} catch (Exception e) {
return ResponseEntity.unprocessableEntity().body(e.getMessage() + e.getStackTrace());
}
0.95 0.99 등 worst 를 histogra_quantitile 함수로 aggregation 해서 집계한다.
Histogram latency .95 by site
histogram_quantile(0.95, sum(rate(remote_website_latency_seconds_bucket[5m])) by (le, site))