国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

prometheus 集成 spring boot 2

Airmusic / 785人閱讀

摘要:簡介中文名稱為普羅米修斯,受啟發于的監控系統,從年開始由前工程師在以開源軟件的形式進行研發,年月發布版本。拉的代表,主要代表就是,讓我們不用擔心監控應用本身的狀態。這樣的一個程序稱為,的實例稱為一個。

Prometheus 簡介

Prometheus 中文名稱為普羅米修斯,受啟發于Google的Brogmon監控系統,從2012年開始由前Google工程師在Soundcloud以開源軟件的形式進行研發,2016年6月發布1.0版本。Prometheus 可以看作是 Google 內部監控系統 Borgmon 的一個實現

首先了解下 prometheus 架構圖

Prometheus監控模式

目前,監控系統采集指標有兩種方式,一種是『推』,另一種就是『拉』:

推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你從程序中將指標使用 TCP,UDP 等方式推送至相關監控應用,只是使用 TCP 的話,一旦監控應用掛掉或存在瓶頸,容易對應用本身產生影響,而使用 UDP 的話,雖然不用擔心監控應用,但是容易丟數據。

拉的代表,主要代表就是 Prometheus,讓我們不用擔心監控應用本身的狀態。而且可以利用 DNS-SRV 或者 Consul 等服務發現功能就可以自動添加監控。

監控java 應用

prometheus 監控應用的方式非常簡單,只需要進程暴露了一個用于獲取當前監控樣本數據的HTTP訪問地址。這樣的一個程序稱為Exporter,Exporter的實例稱為一個Target。Prometheus通過輪訓的方式定時從這些Target中獲取監控數據樣本,對于java 應用來講,只需要暴露一個包含監控數據的http訪問地址即可,當然提供的數據需要滿足一定的格式,這個格式就是 Metrics 格式

Metircs 格式

metircs 的格式非常簡單

metric name>{

主要分為三個部分
各個部分需符合相關的正則表達式
metric name:指標的名稱,主要反映被監控樣本的含義 a-zA-Z_:*
label name: 標簽 反映了當前樣本的特征維度 [a-zA-Z0-9_]*
label value: 各個標簽的值,不限制格式
需要注意的是,label value 最好使用枚舉值,而不要使用無限制的值,比如用戶 ID,Email 等,不然會消耗大量內存,也不符合指標采集的意義

Metrics類型

Prometheus定義了4中不同的指標類型(metric type):Counter(計數器)、Gauge(儀表盤)、Histogram(直方圖)、Summary(摘要)。
Counter:只增不減的計數器
Gauge:可增可減的儀表盤
Histogram:直方圖,內置分析樣本的分布情況
Summary:摘要 自定義樣本分布情況

spring boot 集成 prometheus 加入prometheus依賴

prometheus 官方提供了spring boot 的依賴,但是該客戶端已經不支持spring boot 2


    io.prometheus
    simpleclient_spring_boot
    0.4.0

由于 spring boot 2 的actuator 使用了 Micrometer 進行監控數據統計,
而Micrometer 提供了prometheus 支持,我們可以使用 micrometer-registry-prometheus 來集成 spring boot 2
加入相應依賴

 
        org.springframework.boot
        spring-boot-starter-actuator
  
 
        io.micrometer
         micrometer-core
 
 
        io.micrometer
        micrometer-registry-prometheus
 
添加監控項 統計http 請求的總數量

如果要統計http 請求的總數量,我們可以直接使用prometheus 提供的 Counter 類
首先我們注冊一個 Counter 實例到spring 容器

    @Bean
    public Counter requestTotalCountCollector(){
        return  Counter.build()
         .name("http_requests_total")
         .labelNames("path", "method", "code")
         .help("http請求總計數").register(collectorRegistry);
    }

繼承HandlerInterceptorAdapter ,聲明一個攔截器

public class PrometheusInterceptor extends HandlerInterceptorAdapter {

     @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

在 prehandle 中 執行

 requestTotalCountCollector.labels(requestURI, method,code).inc();

在配置文件 applicaion.yml 中啟用metrics,prometheus監控

management:
  metrics:
    export:
      prometheus:
        enabled: true
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: ["prometheus","health"]

啟動項目,訪問路徑下的 /actuator/prometheus,即可看到監控項

統計正常及自定義錯誤碼的接口響應時間

自定義一個metrics 收集器
只需要繼承 prometheus 的 Collector,重寫抽象方法collect

public class RequestTimeCollector extends Collector{
    @Override
    public List collect() {
    }
}

注冊RequestTimeCollector 到 spring 容器

    @Bean
    @Primary
    public RequestTimeCollector requestTimeCollector(){
        return new RequestTimeCollector("request_time","接口請求時間",Arrays.asList("url","method", "status")).register(collectorRegistry);
    }

聲明一個around 切面攔截controller方法

    @Around("execution(* com.xxx.controller..*.*(..))")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
    try {
            requestTimeCollector.setValue(diff, uri, method, String.valueOf(200));
            return proceed;
        } catch (Throwable throwable) {
            if (throwable instanceof BaseException) {
                requestTimeCollector.setValue(diff, uri, method, String.valueOf(statEnum.key()));
            }
            throw throwable;
          }
        }
    }

啟動項目,訪問路徑下的 /actuator/prometheus,即可看到監控項

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73919.html

相關文章

  • Spring Boot 參考指南(端點)

    摘要:在發出經過身份驗證的請求時,被認為是端點的輸入,因此不會緩存響應。自定義端點對或的操作通過使用或通過自動公開。端點范圍請求范圍請求可以用于請求資源的一部分,當使用或時,操作將返回一個自動支持范圍請求的。 50. 端點 Actuator端點讓你監視和與應用程序交互,Spring Boot包含許多內置的端點,并允許你添加自己的端點。例如,health端點提供基本的應用程序健康信息。 可以啟...

    mozillazg 評論0 收藏0
  • 配置 spring boot 2.X 支持 prometheus metrics

    摘要:前言實際項目中,提供接口,對接公司的監控系統,增加服務的可觀察性,是一個基本的要求。在中集成,非常簡單。由上可知,我們可以訪問獲取格式的。在層,增加然后具體的邏輯中,直接使用。最后重新啟動項目,再次訪問可看到自定義的已經存在了。 前言 實際項目中,提供metrics接口,對接公司的監控系統,增加服務的可觀察性,是一個基本的要求。在spring boot 1.X 中集成prometheu...

    leo108 評論0 收藏0
  • Dubbo Cloud Native 實踐與思考

    摘要:可簡單地認為它是的擴展,負載均衡自然成為不可或缺的特性。類似的特性在項目也有體現,它是另一種高性能代理的方案,提供服務發現健康和負載均衡。 Dubbo Cloud Native 實踐與思考 分享簡介 Cloud Native 應用架構隨著云技術的發展受到業界特別重視和關注,尤其是 CNCF(Cloud Native Computing Foundation)項目蓬勃發展之際。Dubbo...

    邱勇 評論0 收藏0
  • Resilience4j使用指南

    摘要:以下是它的示例現在,如果需要的話,所有對已修飾的服務塊的調用都要符合速率限制器配置。 案例概述 在本文中,我們討論一下Resilience4j庫。該庫通過管理遠程通信的容錯性來幫助實現彈性系統。這個庫受到Hystrix的啟發,但提供了更方便的API和許多其他特性,如速率限制器(阻塞太頻繁的請求)、Bulkhead(避免太多并發請求)等。 Maven設置 首先,我們需要將目標模塊添加到我...

    Labradors 評論0 收藏0
  • Dubbo Cloud Native 之路的實踐與思考

    摘要:可簡單地認為它是的擴展,負載均衡自然成為不可或缺的特性。是基于開發的服務代理組件,在使用場景中,它與和整合,打造具備服務動態更新和負載均衡能力的服務網關。類似的特性在項目也有體現,它是另一種高性能代理的方案,提供服務發現健康和負載均衡。 摘要: Cloud Native 應用架構隨著云技術的發展受到業界特別重視和關注,尤其是 CNCF(Cloud Native Computing Fo...

    niceforbear 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<