深入淺出理解 Prometheus,看這篇就夠了~

背景

對很多人來說雁竞,未知钦椭、不確定、不在掌控的東西浓领,會有潛意識的逃避。當我第一次接觸 Prometheus 的時候也有類似的感覺势腮。對初學者來說联贩, Prometheus 包含的概念太多了,門檻也太高了捎拯。

概念:Instance泪幌、Job盲厌、Metric、Metric Name祸泪、Metric Label吗浩、Metric Value、Metric Type(Counter没隘、Gauge懂扼、Histogram、Summary)右蒲、DataType(Instant Vector阀湿、Range Vector、Scalar瑰妄、String)陷嘴、Operator、Function

馬云說:“雖然阿里巴巴是全球最大的零售平臺间坐,但阿里不是零售公司灾挨,是一家數(shù)據(jù)公司”。Prometheus 也是一樣竹宋,本質(zhì)來說是一個基于數(shù)據(jù)的監(jiān)控系統(tǒng)劳澄。

日常監(jiān)控

假設需要監(jiān)控 WebServerA 每個API的請求量為例,需要監(jiān)控的維度包括:服務名(job)逝撬、實例IP(instance)浴骂、API名(handler)、方法(method)宪潮、返回碼(code)溯警、請求量(value)。

如果以SQL為例狡相,演示常見的查詢操作:

查詢 method=put 且 code=200 的請求量(紅框)

SELECT * from http_requests_total WHERE code=”200” AND method=”put” AND created_at BETWEEN 1495435700 AND 1495435710;

查詢 handler=prometheus 且 method=post 的請求量(綠框)

SELECT * from http_requests_total WHERE handler=”prometheus” AND method=”post” AND created_at BETWEEN 1495435700 AND 1495435710;

查詢 instance=10.59.8.110 且 handler 以 query 開頭 的請求量(綠框)

SELECT*fromhttp_requests_totalWHEREhandler=”query”ANDinstance=”10.59.8.110”ANDcreated_atBETWEEN1495435700AND1495435710;

通過以上示例可以看出梯轻,在常用查詢和統(tǒng)計方面,日常監(jiān)控多用于根據(jù)監(jiān)控的維度進行查詢與時間進行組合查詢尽棕。如果監(jiān)控100個服務喳挑,平均每個服務部署10個實例,每個服務有20個API滔悉,4個方法伊诵,30秒收集一次數(shù)據(jù),保留60天回官。那么總數(shù)據(jù)條數(shù)為:100(服務) 10(實例) 20(API) 4(方法) 86400(1天秒數(shù))* 60(天) / 30(秒)= 138.24 億條數(shù)據(jù)曹宴,寫入、存儲歉提、查詢?nèi)绱肆考壍臄?shù)據(jù)是不可能在Mysql類的關系數(shù)據(jù)庫上完成的笛坦。因此 Prometheus 使用 TSDB 作為存儲引擎区转。

存儲引擎

TSDB 作為 Prometheus 的存儲引擎完美契合了監(jiān)控數(shù)據(jù)的應用場景

存儲的數(shù)據(jù)量級十分龐大

大部分時間都是寫入操作

寫入操作幾乎是順序添加,大多數(shù)時候數(shù)據(jù)到達后都以時間排序

寫操作很少寫入很久之前的數(shù)據(jù)版扩,也很少更新數(shù)據(jù)废离。大多數(shù)情況在數(shù)據(jù)被采集到數(shù)秒或者數(shù)分鐘后就會被寫入數(shù)據(jù)庫

刪除操作一般為區(qū)塊刪除,選定開始的歷史時間并指定后續(xù)的區(qū)塊礁芦。很少單獨刪除某個時間或者分開的隨機時間的數(shù)據(jù)

基本數(shù)據(jù)大蜻韭,一般超過內(nèi)存大小。一般選取的只是其一小部分且沒有規(guī)律宴偿,緩存幾乎不起任何作用

讀操作是十分典型的升序或者降序的順序讀

高并發(fā)的讀操作十分常見

那么 TSDB 是怎么實現(xiàn)以上功能的呢湘捎?

"labels": [{"latency":"500"}]"samples":[{"timestamp":1473305798,"value":0.9}]

原始數(shù)據(jù)分為兩部分 label, samples。前者記錄監(jiān)控的維度(標簽:標簽值)窄刘,指標名稱和標簽的可選鍵值對唯一確定一條時間序列(使用 series_id 代表)窥妇;后者包含包含了時間戳(timestamp)和指標值(value)。

series^│. . . . . . . . . . . .? server{latency="500"}│. . . . . . . . . . . .? server{latency="300"}│. . . . . . . . . .? .? server{}│. . . . . . . . . . . . v<--------time---------->

TSDB 使用 timeseries:doc:: 為 key 存儲 value娩践。為了加速常見查詢查詢操作:label 和 時間范圍結(jié)合活翩。TSDB 額外構(gòu)建了三種索引:Series, Label Index 和 Time Index。

以標簽 latency 為例:

Series

存儲兩部分數(shù)據(jù)翻伺。一部分是按照字典序的排列的所有標簽鍵值對序列(series)材泄;另外一部分是時間線到數(shù)據(jù)文件的索引,按照時間窗口切割存儲數(shù)據(jù)塊記錄的具體位置信息吨岭,因此在查詢時可以快速跳過大量非查詢窗口的記錄數(shù)據(jù)

Label Index

每對 label 為會以 index:label: 為 key拉宗,存儲該標簽所有值的列表,并通過引用指向 Series 該值的起始位置辣辫。

Time Index

數(shù)據(jù)會以 index:timeseries:: 為 key旦事,指向?qū)獣r間段的數(shù)據(jù)文件

數(shù)據(jù)計算

強大的存儲引擎為數(shù)據(jù)計算提供了完美的助力,使得 Prometheus 與其他監(jiān)控服務完全不同急灭。Prometheus 可以查詢出不同的數(shù)據(jù)序列姐浮,然后再加上基礎的運算符,以及強大的函數(shù)葬馋,就可以執(zhí)行 metric series 的矩陣運算(見下圖)卖鲤。

如此,Promtheus體系的能力不弱于監(jiān)控界的“數(shù)據(jù)倉庫”+“計算平臺”畴嘶。因此蛋逾,在大數(shù)據(jù)的開始在業(yè)界得到應用,就能明白窗悯,這就是監(jiān)控未來的方向区匣。

一次計算,處處查詢

當然蟀瞧,如此強大的計算能力沉颂,消耗的資源也是挺恐怖的。因此悦污,查詢預計算結(jié)果通常比每次需要原始表達式都要快得多铸屉,尤其是在儀表盤和告警規(guī)則的適用場景中,儀表盤每次刷新都需要重復查詢相同的表達式切端,告警規(guī)則每次運算也是如此彻坛。因此,Prometheus提供了 Recoding rules踏枣,可以預先計算經(jīng)常需要或者計算量大的表達式昌屉,并將其結(jié)果保存為一組新的時間序列, 達到 一次計算茵瀑,多次查詢的目的间驮。

本文作者:cyningsun

本文地址:

https://www.cyningsun.com/02-22-2020/hidden-secret-to-understanding-prometheus.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市马昨,隨后出現(xiàn)的幾起案子竞帽,更是在濱河造成了極大的恐慌,老刑警劉巖鸿捧,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屹篓,死亡現(xiàn)場離奇詭異,居然都是意外死亡匙奴,警方通過查閱死者的電腦和手機堆巧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泼菌,“玉大人谍肤,你說我怎么就攤上這事≡詈洌” “怎么了谣沸?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笋颤。 經(jīng)常有香客問我乳附,道長,這世上最難降的妖魔是什么伴澄? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任赋除,我火速辦了婚禮,結(jié)果婚禮上非凌,老公的妹妹穿的比我還像新娘举农。我一直安慰自己,他們只是感情好敞嗡,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布颁糟。 她就那樣靜靜地躺著航背,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棱貌。 梳的紋絲不亂的頭發(fā)上玖媚,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音婚脱,去河邊找鬼今魔。 笑死,一個胖子當著我的面吹牛障贸,可吹牛的內(nèi)容都是我干的错森。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼篮洁,長吁一口氣:“原來是場噩夢啊……” “哼涩维!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袁波,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤激挪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锋叨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垄分,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年娃磺,在試婚紗的時候發(fā)現(xiàn)自己被綠了薄湿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡偷卧,死狀恐怖豺瘤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情听诸,我是刑警寧澤坐求,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站晌梨,受9級特大地震影響桥嗤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仔蝌,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一泛领、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敛惊,春花似錦渊鞋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡湾。三九已至,卻和暖如春执俩,著一層夾襖步出監(jiān)牢的瞬間盒粮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工奠滑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妒穴。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓宋税,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讼油。 傳聞我的和親對象是個殘疾皇子杰赛,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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