prometheus實(shí)戰(zhàn)篇:prometheus相關(guān)概念

prometheus相關(guān)概念

在安裝好Prometheus后,會暴露一個(gè)/metrics的http服務(wù)(相當(dāng)于安裝了prometheus_exporter),通過配置,Prometheus就可以采集到這個(gè)/metrics下的所有監(jiān)控樣本數(shù)據(jù).

樣本

Prometheus會將所有采集到的監(jiān)控樣本數(shù)據(jù)以時(shí)間序列的方式保存在內(nèi)存數(shù)據(jù)庫中,并且定時(shí)保存到硬盤上.時(shí)間序列是按照時(shí)間戳和值的序列順序存放的,我們稱之為向量,每條時(shí)間序列通過指標(biāo)名稱和一組標(biāo)簽集命名.如下所示,可以將時(shí)間序列理解為一個(gè)以時(shí)間為X軸的數(shù)字矩陣:

image.png

在時(shí)間序列中的每一個(gè)點(diǎn)稱為一個(gè)樣本(sample),樣本由以下三部分組成:

  • 指標(biāo)(metric): 指標(biāo)名和描述當(dāng)前樣本特征的標(biāo)簽集合
  • 時(shí)間戳(timestamp): 一個(gè)精確到毫秒的時(shí)間戳
  • 樣本值(value): 一個(gè)float64的浮點(diǎn)型數(shù)據(jù)表示當(dāng)前樣本的值
image.png

示例:


image.png

前面一段為指標(biāo)名,中間那段為標(biāo)簽后面那段為時(shí)間戳和樣本值

指標(biāo)(Metric)

在形式上,所有的指標(biāo)(Metric)都通過如下格式表示:

<metric name>{<label name> = <label value>,...}

指標(biāo)的名稱(metric name)可以反映被監(jiān)控樣本的含義(比如,process_open_fds-表示當(dāng)前系統(tǒng)打開的文件描述),指標(biāo)名稱由ASCll字符,數(shù)字,下劃線以及冒號組成必須符合正則表達(dá)式

[a-ZA_:][a-zA-Z0-9_]

標(biāo)簽(label)反映了當(dāng)前樣本的特征維度,通過這些維度Prometheus可以對樣本數(shù)據(jù)進(jìn)行過濾,聚合等.標(biāo)簽的名稱只能由ASCll字符,數(shù)字,下劃線以及冒號組成必須符合正則表達(dá)式.

其實(shí)以下劃線作為前綴的標(biāo)簽,是系統(tǒng)保留的關(guān)鍵字,只能在系統(tǒng)內(nèi)部使用.標(biāo)簽的值則可以包含任何Unicode編碼的字符.在Prometheus的底層實(shí)現(xiàn)中指標(biāo)名稱實(shí)際上是以name = 形式保存在數(shù)據(jù)庫中的,因此以下倆種方式均表示同一條time-series:

process_open_fds{instance="Prometheus服務(wù)器", job="cadvisor"}

等同于:

{_name_="process_open_fds",instance="Prometheus服務(wù)器", job="cadvisor"}

指標(biāo)(Metric)的四種類型

Prometheus底層存儲上其實(shí)沒有對指標(biāo)做類型的區(qū)分,都是以時(shí)間序列的形式存儲,但是為了方便用戶的使用和理解不同監(jiān)控指標(biāo)之間的差異,Prometheus定義了counter(計(jì)數(shù)器),gauge(儀表盤),histogram(直方圖),以及sunmmary(摘要)這四種指標(biāo)類型.

Gauge/Counter是數(shù)值指標(biāo),代表數(shù)據(jù)的變化情況,Histogram/Summary是統(tǒng)計(jì)類型的指標(biāo),表示數(shù)據(jù)的分布情況

在Exporter返回的樣本數(shù)據(jù)中,其注釋中也包含了該樣本的類型.例如:

# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.19.3"} 1

Counter:只增不減的計(jì)數(shù)器

Counter類型的指標(biāo)其工作方式和計(jì)數(shù)器一樣,只增不減(除非系統(tǒng)發(fā)生重置).常見的監(jiān)控指標(biāo).如http_request_total,node_cpud都是Counter類型的監(jiān)控指標(biāo).一般定義Counter類型指標(biāo)的名稱是推薦使用_total作為后綴.

通過Counter指標(biāo)可以統(tǒng)計(jì)HTTP請求數(shù)量,請求錯(cuò)誤數(shù),接口調(diào)用次數(shù)等單調(diào)遞增的數(shù)據(jù),同事可結(jié)合increase和rate等函數(shù)統(tǒng)計(jì)變化速率

例如,通過PromQL內(nèi)置的聚合rate()函數(shù)獲取HTTP請求量的評價(jià)增長率:

rate(promhttp_metric_handler_requests_total[5m])

查詢當(dāng)前系統(tǒng)中訪問量前十的HTTP地址

topk(10,promhttp_metric_handler_requests_total)

[圖片上傳失敗...(image-100e58-1703511923645)]

Gauge:可增可減的儀表盤

與Counter不同,Gauge類型的指標(biāo)側(cè)重于反應(yīng)系統(tǒng)的當(dāng)前狀態(tài).因此這類指標(biāo)的樣本數(shù)據(jù)可增可減.常見指標(biāo)如:node_memory_memFree_bytes(主機(jī)當(dāng)前空閑的物理內(nèi)存大小),node_memory_MemAvailable_bytes(可用內(nèi)存大小)都是Gauge類型的監(jiān)控指標(biāo).

通過Gauge指標(biāo),通過ProQL可以直接查看系統(tǒng)的當(dāng)前物理內(nèi)存大小:

node_memory_MemFree_bytes

[圖片上傳失敗...(image-862b76-1703511923645)]

對于Gauge類型的監(jiān)控指標(biāo),通過PromQL內(nèi)置函數(shù)delta()可以獲取樣本在一段時(shí)間返回內(nèi)的變化情況.例如,計(jì)算CPU溫度在倆個(gè)小時(shí)內(nèi)的差異:

delta(cpu_temp_celsius{host="zeus"}[2h])

還可以使用deriv()計(jì)算樣本的線性回歸模型,甚至使用predict_linear()對數(shù)據(jù)的變化趨勢進(jìn)行預(yù)測.例如,預(yù)測系統(tǒng)磁盤空間在4個(gè)小時(shí)之后的剩余情況:

predict_linear(node_filesystem_avail_bytes{}[1h],4*3600)

[圖片上傳失敗...(image-ff832a-1703511923645)]

需要將最終結(jié)果78637829682.74074/1024/1024/1024得到最終GB為單位的空間大小

[圖片上傳失敗...(image-894ebf-1703511923645)]

也就是73GB左右

Histogram :直方圖

Histogram 會在一段時(shí)間范圍內(nèi)對數(shù)據(jù)進(jìn)行采樣(通常是請求持續(xù)時(shí)間或響應(yīng)大小等),并將其計(jì)入可配置的存儲桶(bucket)中。但這句話還是不太好理解兔乞,下面通過具體的示例來說明次慢。

假設(shè)我們想監(jiān)控某個(gè)應(yīng)用在一段時(shí)間內(nèi)的響應(yīng)時(shí)間,最后監(jiān)控到的樣本的響應(yīng)時(shí)間范圍為 0s~10s。現(xiàn)在我們將樣本的值域劃分為不同的區(qū)間,即不同的 bucket,每個(gè) bucket 的寬度是 0.2s极舔。那么第一個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.2s 的請求數(shù)量,第二個(gè) bucket 表示響應(yīng)時(shí)間大于 0.2s 小于等于 0.4s 的請求數(shù)量链瓦,以此類推拆魏。

[圖片上傳失敗...(image-7e8e74-1703511923645)]

Prometheus 的 histogram 是一種累積直方圖盯桦,與上面的區(qū)間劃分方式是有差別的,它的劃分方式如下:還假設(shè)每個(gè) bucket 的寬度是 0.2s渤刃,那么第一個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.2s 的請求數(shù)量拥峦,第二個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.4s 的請求數(shù)量,以此類推卖子。也就是說略号,每一個(gè) bucket 的樣本包含了之前所有 bucket 的樣本,所以叫累積直方圖洋闽。
[圖片上傳失敗...(image-d90fb8-1703511923645)]

分位數(shù)計(jì)算

Prometheus 通過 histogram_quantile 函數(shù)來計(jì)算分位數(shù)(quantile)玄柠,而且是一個(gè)預(yù)估值,并不完全準(zhǔn)確诫舅,因?yàn)檫@個(gè)函數(shù)是假定每個(gè)區(qū)間內(nèi)的樣本分布是線性分布來計(jì)算結(jié)果值的羽利。預(yù)估的準(zhǔn)確度取決于 bucket 區(qū)間劃分的粒度,粒度越大骚勘,準(zhǔn)確度越低铐伴。

假設(shè)有 10000 個(gè)樣本,第 9501 個(gè)樣本落入了第 8 個(gè) bucket俏讹。第 8 個(gè) bucket 總共有 368 個(gè)樣本,其中第 9501 個(gè)樣本在該 bucket 中屬于第 93 個(gè)樣本畜吊。

Summary:摘要

摘要用于記錄某些東西的平均大小泽疆,可能是計(jì)算所需的時(shí)間或處理的文件大小,摘要顯示兩個(gè)相關(guān)的信息:count(事件發(fā)生的次數(shù))和 sum(所有事件的總大辛嵯住)

例如殉疼,指標(biāo) prometheus_tsdb_wal_fsync_duration_seconds 的指標(biāo)類型為 Summary,它記錄了 Prometheus Server 中 wal_fsync 的處理時(shí)間捌年,通過訪問 Prometheus Server 的 /metrics 地址瓢娜,可以獲取到以下監(jiān)控樣本數(shù)據(jù):

# HELP prometheus_tsdb_wal_fsync_duration_seconds Duration of WAL fsync.
# TYPE prometheus_tsdb_wal_fsync_duration_seconds summary
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173
prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002
prometheus_tsdb_wal_fsync_duration_seconds_count 216

Job(任務(wù))和instances(實(shí)例)

概述

在Prometheus中,任何被采集的目標(biāo),即每一個(gè)暴露監(jiān)控樣本數(shù)據(jù)的HTTP服務(wù)都被稱為一個(gè)實(shí)例,例如在當(dāng)前主機(jī)上運(yùn)行的node exporter可以被稱為一個(gè)實(shí)例.而具有相同采集目的的實(shí)例集合稱為任務(wù).

Job(任務(wù))

例如,一下2個(gè)復(fù)制實(shí)例的node

* job: node
    * instances 2:1.2.3.4:9100
    * instances 4:5.6.7.8:9100

instances(實(shí)例)

通過在Prometheus.yml配置文件中,添加如下配置,我們讓Prometheus可以從node exporter暴露的服務(wù)中獲取監(jiān)控指標(biāo)數(shù)據(jù).

  - job_name: 'node-exporter'
    scrape_interval: 15s
    static_configs:
    - targets: ['node_exporter:9100']
      labels:
        instance: Prometheus服務(wù)器

可以在targets處配置多個(gè)地址進(jìn)行監(jiān)控

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市礼预,隨后出現(xiàn)的幾起案子眠砾,更是在濱河造成了極大的恐慌,老刑警劉巖托酸,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褒颈,死亡現(xiàn)場離奇詭異,居然都是意外死亡励堡,警方通過查閱死者的電腦和手機(jī)谷丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來应结,“玉大人刨疼,你說我怎么就攤上這事。” “怎么了揩慕?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵亭畜,是天一觀的道長。 經(jīng)常有香客問我漩绵,道長贱案,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任止吐,我火速辦了婚禮宝踪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碍扔。我一直安慰自己瘩燥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布不同。 她就那樣靜靜地躺著厉膀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪二拐。 梳的紋絲不亂的頭發(fā)上服鹅,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音百新,去河邊找鬼企软。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饭望,可吹牛的內(nèi)容都是我干的仗哨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼铅辞,長吁一口氣:“原來是場噩夢啊……” “哼厌漂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斟珊,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤苇倡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后倍宾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雏节,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年高职,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钩乍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怔锌,死狀恐怖寥粹,靈堂內(nèi)的尸體忽然破棺而出变过,到底是詐尸還是另有隱情,我是刑警寧澤涝涤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布媚狰,位于F島的核電站,受9級特大地震影響阔拳,放射性物質(zhì)發(fā)生泄漏崭孤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一糊肠、第九天 我趴在偏房一處隱蔽的房頂上張望辨宠。 院中可真熱鬧,春花似錦货裹、人聲如沸嗤形。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赋兵。三九已至,卻和暖如春搔预,著一層夾襖步出監(jiān)牢的瞬間霹期,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工拯田, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留经伙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓勿锅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枣氧。 傳聞我的和親對象是個(gè)殘疾皇子溢十,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容