您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“java prometheus的數(shù)據(jù)類型有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java prometheus的數(shù)據(jù)類型有哪些”吧!
Prometheus將所有采集到的樣本數(shù)據(jù)以時(shí)間序列(time-series)的方式保存在內(nèi)存數(shù)據(jù)庫中,并定時(shí)保存在硬盤上。時(shí)間序列中的每一個(gè)樣本由以下三部分組成。
指標(biāo)(metric): metric name和描述當(dāng)前樣本特征的labelsets組成,參考格式如 <metric name>{<label name>=<label value>, ...};
,其中metric name的命名規(guī)則為:應(yīng)用名稱開頭_監(jiān)測對像_數(shù)值類型_單位
時(shí)間截(timestamp):一個(gè)精確到毫秒的時(shí)間截;
樣本值(value):一個(gè)float64的浮點(diǎn)類型數(shù)據(jù)表示當(dāng)前的樣本值。
2.1 Counter(計(jì)數(shù)器類型)
Counter類型的指標(biāo)的工作方式和計(jì)數(shù)器一樣,只增不減(除非系統(tǒng)發(fā)生了重置)。Counter一般用于累計(jì)值,例如記錄請求次數(shù)、任務(wù)完成數(shù)、錯(cuò)誤發(fā)生次數(shù)。counter主要有兩個(gè)方法:
//將counter值加1. Inc() // 將指定值加到counter值上,如果指定值< 0會(huì)panic. Add(float64)
在Prometheus自定義的metrics監(jiān)控中,Counter的使用可以參考如下:
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter { static final Counter requestCounter = Counter.build() .name("io_namespace_http_requests_total").labelNames("path", "method", "code") //metric name建議使用_total結(jié)尾 .help("Total requests.").register(); @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { String requestURI = request.getRequestURI(); String method = request.getMethod(); int status = response.getStatus(); requestCounter.labels(requestURI, method, String.valueOf(status)).inc(); //調(diào)用inc()函數(shù),每次請求發(fā)生時(shí)計(jì)數(shù)+1 super.afterCompletion(request, response, handler, ex); } }
Counter類型數(shù)據(jù)可以讓用戶方便的了解事件產(chǎn)生的速率的變化,在PromQL內(nèi)置的相關(guān)操作函數(shù)可以提供相應(yīng)的分析,比如以HTTP應(yīng)用請求量來進(jìn)行說明:
//通過rate()函數(shù)獲取HTTP請求量的增長率 rate(http_requests_total[5m]) //查詢當(dāng)前系統(tǒng)中,訪問量前10的HTTP地址 topk(10, http_requests_total)
1
2
3
4
2.2 Gauge(儀表盤類型)
Gauge是可增可減的指標(biāo)類,可以用于反應(yīng)當(dāng)前應(yīng)用的狀態(tài)。比如在監(jiān)控主機(jī)時(shí),主機(jī)當(dāng)前的內(nèi)容大小(node_memory_MemFree),可用內(nèi)存大?。╪ode_memory_MemAvailable)?;蛘邥r(shí)容器當(dāng)前的cpu使用率,內(nèi)存使用率。
Gauge指標(biāo)對象主要包含兩個(gè)方法inc()以及dec(),用戶添加或者減少計(jì)數(shù)。
在Prometheus自定義的metrics監(jiān)控中,Gauge的使用可以參考如下:
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter { ...省略的代碼 static final Gauge inprogressRequests = Gauge.build() .name("io_namespace_http_inprogress_requests").labelNames("path", "method", "code") .help("Inprogress requests.").register(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ...省略的代碼 inprogressRequests.labels(requestURI, method, String.valueOf(status)).inc();// 計(jì)數(shù)器+1 return super.preHandle(request, response, handler); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { ...省略的代碼 inprogressRequests.labels(requestURI, method, String.valueOf(status)).dec();// 計(jì)數(shù)器-1 super.afterCompletion(request, response, handler, ex); } }
對于Gauge類型的監(jiān)控指標(biāo),通過PromQL內(nèi)置函數(shù)delta()可以獲取樣本在一段時(shí)間內(nèi)的變化情況,比如:
dalta(cpu_temp_celsius{host="zeus"}[2h]) //計(jì)算CPU溫度在兩小時(shí)內(nèi)的差異 predict_linear(node_filesystem_free{job="node"}[1h], 4*3600) //預(yù)測系統(tǒng)磁盤空間在4小時(shí)之后的剩余情況
2.3 Histogram(直方圖類型)
Histogram 由 < basename>_bucket{le="< upper inclusive bound>"},< basename>_bucket{le="+Inf"}, < basename>_sum,_count 組成,主要用于表示一段時(shí)間范圍內(nèi)對數(shù)據(jù)進(jìn)行采樣(通常是請求持續(xù)時(shí)間或響應(yīng)大?。⒛軌?qū)ζ渲付▍^(qū)間以及總數(shù)進(jìn)行統(tǒng)計(jì),通常它采集的數(shù)據(jù)展示為直方圖。
在Prometheus自定義的metrics監(jiān)控中,Histgram的使用可以參考如下:
以請求響應(yīng)時(shí)間requests_latency_seconds為例,比如我們需要記錄http請求響應(yīng)時(shí)間符合在分布范圍{0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10}中的次數(shù)時(shí)
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter { static final Histogram requestLatencyHistogram = Histogram.build().labelNames("path", "method", "code") .name("io_namespace_http_requests_latency_seconds_histogram").help("Request latency in seconds.") .register(); private Histogram.Timer histogramRequestTimer; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ...省略的代碼 histogramRequestTimer = requestLatencyHistogram.labels(requestURI, method, String.valueOf(status)).startTimer(); ...省略的代碼 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { ...省略的代碼 histogramRequestTimer.observeDuration(); ...省略的代碼 }
1
2
3
4
使用Histogram構(gòu)造器在創(chuàng)建Histogram監(jiān)控指標(biāo)時(shí),默認(rèn)的buckets范圍為{0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10},如果要修改默認(rèn)的buckets,可以使用.buckets(double… bukets)覆蓋。
Histogram會(huì)自動(dòng)創(chuàng)建3個(gè)指標(biāo),分別為:
事件發(fā)生的總次數(shù),basename_count。
# 實(shí)際含義: 當(dāng)前一共發(fā)生了2次http請求 io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0
所有事件產(chǎn)生值的大小的總和,basename_sum。
# 實(shí)際含義: 發(fā)生的2次http請求總的響應(yīng)時(shí)間為13.107670803000001 秒 io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001
1
2
事件產(chǎn)生的值分布在bucket中的次數(shù),basename_bucket{le=“上包含”}
2.4 Summary(摘要類型)
Summary類型和Histogram類型相似,由< basename>{quantile="< φ>"},< basename>_sum,< basename>_count組成,主要用于表示一段時(shí)間內(nèi)數(shù)據(jù)采樣結(jié)果(通常時(shí)請求持續(xù)時(shí)間或響應(yīng)大小),它直接存儲(chǔ)了quantile數(shù)據(jù),而不是根據(jù)統(tǒng)計(jì)區(qū)間計(jì)算出來的。Summary與Histogram相比,存在如下區(qū)別:
都包含 < basename>_sum和< basename>_count;
Histogram需要通過< basename>_bucket計(jì)算quantile,而Summary直接存儲(chǔ)了quantile的值。
在Prometheus自定義的metrics監(jiān)控中,Summary的使用可以參考如下:
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter { static final Summary requestLatency = Summary.build() .name("io_namespace_http_requests_latency_seconds_summary") .quantile(0.5, 0.05) .quantile(0.9, 0.01) .labelNames("path", "method", "code") .help("Request latency in seconds.").register(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ...省略的代碼 requestTimer = requestLatency.labels(requestURI, method, String.valueOf(status)).startTimer(); ...省略的代碼 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { ...省略的代碼 requestTimer.observeDuration(); ...省略的代碼 } }
Summary類型指標(biāo)中包含的數(shù)據(jù)如下:
事件發(fā)生總的次數(shù)
# 含義:當(dāng)前http請求發(fā)生總次數(shù)為12次 io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0
事件產(chǎn)生的值的總和
# 含義:這12次http請求的總響應(yīng)時(shí)間為 51.029495508s io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508
1
2
事件產(chǎn)生的值的分布情況
# 含義:這12次http請求響應(yīng)時(shí)間的中位數(shù)是3.052404983s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983 # 含義:這12次http請求響應(yīng)時(shí)間的9分位數(shù)是8.003261666s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666
到此,相信大家對“java prometheus的數(shù)據(jù)類型有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。