1、Metrics類型
prometheus中定義了四種metrics類型:
1.1、Counter:只增不減的計數器,其值只能在重新啟動時遞增或重置為零。例如,可以使用計數器表示已服務的請求數、已完成的任務數或錯誤數。
1.2、Gauge:是一種度量,它表示一個可以任意上下移動的數值。例如,溫度或當前內存使用量。
1.3、Histogram:直方圖對觀察結果(通常是請求持續時間或響應大小)進行采樣,並在可配置的存儲桶中對其進行計數。它還提供了所有觀測值的總和。
1.4、Summary:與Histogram類似,一個摘要采樣觀察(通常是請求持續時間和響應大小等)。它還提供觀測值的總數和所有觀測值的總和,同時計算滑動時間窗口上的可配置分位數。
2、代碼示例
2.1、定義指標監控
/** * 監控指標設置 * * @author caofanqi * @date 2020/2/15 12:16 */ @Configuration public class PrometheusMetricsConfig { @Resource private PrometheusMeterRegistry prometheusMeterRegistry; /** * 用於統計請求總數 */ @Bean public Counter requestCounter() { return Counter.build().name("order_requests_total").help("請求總數").labelNames("service","method","code") .register(prometheusMeterRegistry.getPrometheusRegistry()); } /** * 用於統計TP50,TP90 */ @Bean public Summary requestLatency(){ return Summary.build() .quantile(0.5, 0.05) .quantile(0.9, 0.01) .name("order_request_latency").help("請求延遲").labelNames("service","method","code") .register(prometheusMeterRegistry.getPrometheusRegistry()); } }
2.2、通過攔截器對指標進行處理
/** * 監控指標攔截器 * * @author caofanqi * @date 2020/2/15 12:22 */ @Component public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter { @Resource private Counter requestCounter; @Resource private Summary requestLatency; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setAttribute("start",System.currentTimeMillis()); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { requestCounter.labels(request.getRequestURI(),request.getMethod(),String.valueOf(response.getStatus())).inc(); long duration = System.currentTimeMillis() - (Long) request.getAttribute("start"); requestLatency.labels(request.getRequestURI(),request.getMethod(),String.valueOf(response.getStatus())).observe(duration); } }
2.3、注冊攔截器
/** * webmvc配置類 * * @author caofanqi * @date 2020/2/15 12:27 */ @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Resource private PrometheusMetricsInterceptor prometheusMetricsInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(prometheusMetricsInterceptor).addPathPatterns("/**"); } }
2.4、對創建訂單方法進行隨機休眠
2.5、啟動項目,使用Test類中的方法,不斷發起調用,通過/actuator/prometheus接口,已經為Prometheus提供監控數據了。
項目源碼:https://github.com/caofanqi/study-security/tree/dev-prometheus3