溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java prometheus的數(shù)據(jù)類型有哪些

發(fā)布時(shí)間:2021-06-26 10:24:00 來源:億速云 閱讀:246 作者:chen 欄目:大數(shù)據(jù)

本篇內(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)前的樣本值。

二、Prometheus的四種數(shù)據(jù)類型

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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI