• 微服务监控和报警(四)-自定义metrics指标监控


    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提供监控数据了。

    3、Grafana配置控制台

     对需要的指标进行设置相应的看板即可。

    项目源码:https://github.com/caofanqi/study-security/tree/dev-prometheus3

  • 相关阅读:
    深析Tomcat容器工作流程
    GC基础
    oracle sql总结
    mybatis返回值类型总结
    eclipse启动javaweb项目后,如何让局域网内的其他人访问
    oracle sql 逗号 分割 REGEXP_SUBSTR 函数
    Oracle12c安装时报"指定的oracle主目录用户已存在"错误
    spring
    Oracle sql where后面的多条件case when判断执行
    Oracle12c安装时报ins-30131
  • 原文地址:https://www.cnblogs.com/caofanqi/p/12312096.html
Copyright © 2020-2023  润新知