摘要:簡(jiǎn)介中文名稱為普羅米修斯,受啟發(fā)于的監(jiān)控系統(tǒng),從年開始由前工程師在以開源軟件的形式進(jìn)行研發(fā),年月發(fā)布版本。拉的代表,主要代表就是,讓我們不用擔(dān)心監(jiān)控應(yīng)用本身的狀態(tài)。這樣的一個(gè)程序稱為,的實(shí)例稱為一個(gè)。
Prometheus 簡(jiǎn)介
Prometheus 中文名稱為普羅米修斯,受啟發(fā)于Google的Brogmon監(jiān)控系統(tǒng),從2012年開始由前Google工程師在Soundcloud以開源軟件的形式進(jìn)行研發(fā),2016年6月發(fā)布1.0版本。Prometheus 可以看作是 Google 內(nèi)部監(jiān)控系統(tǒng) Borgmon 的一個(gè)實(shí)現(xiàn)
首先了解下 prometheus 架構(gòu)圖
目前,監(jiān)控系統(tǒng)采集指標(biāo)有兩種方式,一種是『推』,另一種就是『拉』:
推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你從程序中將指標(biāo)使用 TCP,UDP 等方式推送至相關(guān)監(jiān)控應(yīng)用,只是使用 TCP 的話,一旦監(jiān)控應(yīng)用掛掉或存在瓶頸,容易對(duì)應(yīng)用本身產(chǎn)生影響,而使用 UDP 的話,雖然不用擔(dān)心監(jiān)控應(yīng)用,但是容易丟數(shù)據(jù)。
拉的代表,主要代表就是 Prometheus,讓我們不用擔(dān)心監(jiān)控應(yīng)用本身的狀態(tài)。而且可以利用 DNS-SRV 或者 Consul 等服務(wù)發(fā)現(xiàn)功能就可以自動(dòng)添加監(jiān)控。
監(jiān)控java 應(yīng)用prometheus 監(jiān)控應(yīng)用的方式非常簡(jiǎn)單,只需要進(jìn)程暴露了一個(gè)用于獲取當(dāng)前監(jiān)控樣本數(shù)據(jù)的HTTP訪問(wèn)地址。這樣的一個(gè)程序稱為Exporter,Exporter的實(shí)例稱為一個(gè)Target。Prometheus通過(guò)輪訓(xùn)的方式定時(shí)從這些Target中獲取監(jiān)控?cái)?shù)據(jù)樣本,對(duì)于java 應(yīng)用來(lái)講,只需要暴露一個(gè)包含監(jiān)控?cái)?shù)據(jù)的http訪問(wèn)地址即可,當(dāng)然提供的數(shù)據(jù)需要滿足一定的格式,這個(gè)格式就是 Metrics 格式
Metircs 格式metircs 的格式非常簡(jiǎn)單
metric name>{
主要分為三個(gè)部分
各個(gè)部分需符合相關(guān)的正則表達(dá)式
metric name:指標(biāo)的名稱,主要反映被監(jiān)控樣本的含義 a-zA-Z_:*
label name: 標(biāo)簽 反映了當(dāng)前樣本的特征維度 [a-zA-Z0-9_]*
label value: 各個(gè)標(biāo)簽的值,不限制格式
需要注意的是,label value 最好使用枚舉值,而不要使用無(wú)限制的值,比如用戶 ID,Email 等,不然會(huì)消耗大量?jī)?nèi)存,也不符合指標(biāo)采集的意義
Prometheus定義了4中不同的指標(biāo)類型(metric type):Counter(計(jì)數(shù)器)、Gauge(儀表盤)、Histogram(直方圖)、Summary(摘要)。
Counter:只增不減的計(jì)數(shù)器
Gauge:可增可減的儀表盤
Histogram:直方圖,內(nèi)置分析樣本的分布情況
Summary:摘要 自定義樣本分布情況
prometheus 官方提供了spring boot 的依賴,但是該客戶端已經(jīng)不支持spring boot 2
io.prometheus simpleclient_spring_boot 0.4.0
由于 spring boot 2 的actuator 使用了 Micrometer 進(jìn)行監(jiān)控?cái)?shù)據(jù)統(tǒng)計(jì),
而Micrometer 提供了prometheus 支持,我們可以使用 micrometer-registry-prometheus 來(lái)集成 spring boot 2
加入相應(yīng)依賴
添加監(jiān)控項(xiàng) 統(tǒng)計(jì)http 請(qǐng)求的總數(shù)量org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-core io.micrometer micrometer-registry-prometheus
如果要統(tǒng)計(jì)http 請(qǐng)求的總數(shù)量,我們可以直接使用prometheus 提供的 Counter 類
首先我們注冊(cè)一個(gè) Counter 實(shí)例到spring 容器
@Bean public Counter requestTotalCountCollector(){ return Counter.build() .name("http_requests_total") .labelNames("path", "method", "code") .help("http請(qǐng)求總計(jì)數(shù)").register(collectorRegistry); }
繼承HandlerInterceptorAdapter ,聲明一個(gè)攔截器
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 中 執(zhí)行
requestTotalCountCollector.labels(requestURI, method,code).inc();
在配置文件 applicaion.yml 中啟用metrics,prometheus監(jiān)控
management: metrics: export: prometheus: enabled: true endpoint: metrics: enabled: true prometheus: enabled: true endpoints: web: exposure: include: ["prometheus","health"]
啟動(dòng)項(xiàng)目,訪問(wèn)路徑下的 /actuator/prometheus,即可看到監(jiān)控項(xiàng)
自定義一個(gè)metrics 收集器
只需要繼承 prometheus 的 Collector,重寫抽象方法collect
public class RequestTimeCollector extends Collector{ @Override public Listcollect() { } }
注冊(cè)RequestTimeCollector 到 spring 容器
@Bean @Primary public RequestTimeCollector requestTimeCollector(){ return new RequestTimeCollector("request_time","接口請(qǐng)求時(shí)間",Arrays.asList("url","method", "status")).register(collectorRegistry); }
聲明一個(gè)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; } } }
啟動(dòng)項(xiàng)目,訪問(wèn)路徑下的 /actuator/prometheus,即可看到監(jiān)控項(xiàng)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73919.html
摘要:在發(fā)出經(jīng)過(guò)身份驗(yàn)證的請(qǐng)求時(shí),被認(rèn)為是端點(diǎn)的輸入,因此不會(huì)緩存響應(yīng)。自定義端點(diǎn)對(duì)或的操作通過(guò)使用或通過(guò)自動(dòng)公開。端點(diǎn)范圍請(qǐng)求范圍請(qǐng)求可以用于請(qǐng)求資源的一部分,當(dāng)使用或時(shí),操作將返回一個(gè)自動(dòng)支持范圍請(qǐng)求的。 50. 端點(diǎn) Actuator端點(diǎn)讓你監(jiān)視和與應(yīng)用程序交互,Spring Boot包含許多內(nèi)置的端點(diǎn),并允許你添加自己的端點(diǎn)。例如,health端點(diǎn)提供基本的應(yīng)用程序健康信息。 可以啟...
摘要:前言實(shí)際項(xiàng)目中,提供接口,對(duì)接公司的監(jiān)控系統(tǒng),增加服務(wù)的可觀察性,是一個(gè)基本的要求。在中集成,非常簡(jiǎn)單。由上可知,我們可以訪問(wèn)獲取格式的。在層,增加然后具體的邏輯中,直接使用。最后重新啟動(dòng)項(xiàng)目,再次訪問(wèn)可看到自定義的已經(jīng)存在了。 前言 實(shí)際項(xiàng)目中,提供metrics接口,對(duì)接公司的監(jiān)控系統(tǒng),增加服務(wù)的可觀察性,是一個(gè)基本的要求。在spring boot 1.X 中集成prometheu...
摘要:可簡(jiǎn)單地認(rèn)為它是的擴(kuò)展,負(fù)載均衡自然成為不可或缺的特性。類似的特性在項(xiàng)目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負(fù)載均衡。 Dubbo Cloud Native 實(shí)踐與思考 分享簡(jiǎn)介 Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Foundation)項(xiàng)目蓬勃發(fā)展之際。Dubbo...
摘要:以下是它的示例現(xiàn)在,如果需要的話,所有對(duì)已修飾的服務(wù)塊的調(diào)用都要符合速率限制器配置。 案例概述 在本文中,我們討論一下Resilience4j庫(kù)。該庫(kù)通過(guò)管理遠(yuǎn)程通信的容錯(cuò)性來(lái)幫助實(shí)現(xiàn)彈性系統(tǒng)。這個(gè)庫(kù)受到Hystrix的啟發(fā),但提供了更方便的API和許多其他特性,如速率限制器(阻塞太頻繁的請(qǐng)求)、Bulkhead(避免太多并發(fā)請(qǐng)求)等。 Maven設(shè)置 首先,我們需要將目標(biāo)模塊添加到我...
摘要:可簡(jiǎn)單地認(rèn)為它是的擴(kuò)展,負(fù)載均衡自然成為不可或缺的特性。是基于開發(fā)的服務(wù)代理組件,在使用場(chǎng)景中,它與和整合,打造具備服務(wù)動(dòng)態(tài)更新和負(fù)載均衡能力的服務(wù)網(wǎng)關(guān)。類似的特性在項(xiàng)目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負(fù)載均衡。 摘要: Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Fo...
閱讀 3780·2021-11-11 11:02
閱讀 3508·2021-10-11 10:57
閱讀 3621·2021-09-22 16:00
閱讀 1856·2021-09-02 15:15
閱讀 1344·2019-08-30 15:56
閱讀 1021·2019-08-30 15:54
閱讀 2748·2019-08-30 12:43
閱讀 3552·2019-08-29 16:06