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