微服務監控和報警(四)-自定義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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM