Prometheus的架構(gòu)及持久化

Prometheus是什么

Prometheus是一個(gè)開(kāi)源的系統(tǒng)監(jiān)控和報(bào)警工具躏碳,特點(diǎn)是

  • 多維數(shù)據(jù)模型(時(shí)序列數(shù)據(jù)由metric名和一組key/value組成)
  • 在多維度上靈活的查詢語(yǔ)言(PromQl)
  • 不依賴分布式存儲(chǔ)道伟,單主節(jié)點(diǎn)工作.
  • 通過(guò)基于HTTP的pull方式采集時(shí)序數(shù)據(jù)
  • 可以通過(guò)push gateway進(jìn)行時(shí)序列數(shù)據(jù)推送(pushing)
  • 可以通過(guò)服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
  • 多種可視化圖表及儀表盤支持

pull方式

Prometheus采集數(shù)據(jù)是用的pull也就是拉模型,通過(guò)HTTP協(xié)議去采集指標(biāo)焰枢,只要應(yīng)用系統(tǒng)能夠提供HTTP接口就可以接入監(jiān)控系統(tǒng)诗轻,相比于私有協(xié)議或二進(jìn)制協(xié)議來(lái)說(shuō)開(kāi)發(fā)斗埂、簡(jiǎn)單槽卫。

push方式

對(duì)于定時(shí)任務(wù)這種短周期的指標(biāo)采集赠叼,如果采用pull模式止喷,可能造成任務(wù)結(jié)束了馆类,Prometheus還沒(méi)有來(lái)得及采集,這個(gè)時(shí)候可以使用加一個(gè)中轉(zhuǎn)層弹谁,客戶端推數(shù)據(jù)到Push Gateway緩存一下乾巧,由Prometheus從push gateway pull指標(biāo)過(guò)來(lái)。(需要額外搭建Push Gateway预愤,同時(shí)需要新增job去從gateway采數(shù)據(jù))

組成及架構(gòu)

  • Prometheus server
    主要負(fù)責(zé)數(shù)據(jù)采集和存儲(chǔ)沟于,提供PromQL查詢語(yǔ)言的支持

  • 客戶端sdk
    官方提供的客戶端類庫(kù)有g(shù)o、java植康、scala旷太、python、ruby销睁,其他還有很多第三方開(kāi)發(fā)的類庫(kù)供璧,支持nodejs、php冻记、erlang等

  • Push Gateway
    支持臨時(shí)性Job主動(dòng)推送指標(biāo)的中間網(wǎng)關(guān)

  • PromDash
    使用rails開(kāi)發(fā)的dashboard睡毒,用于可視化指標(biāo)數(shù)據(jù)

  • exporters
    支持其他數(shù)據(jù)源的指標(biāo)導(dǎo)入到Prometheus,支持?jǐn)?shù)據(jù)庫(kù)冗栗、硬件演顾、消息中間件、存儲(chǔ)系統(tǒng)隅居、http服務(wù)器钠至、jmx等

  • alertmanager
    實(shí)驗(yàn)性組件、用來(lái)進(jìn)行報(bào)警

  • prometheus_cli
    命令行工具

  • 其他輔助性工具

架構(gòu)圖如下:

prometheus Architecture overview
prometheus Architecture overview

默認(rèn)配置

docker exec -it a9bd827a1d18 less /etc/prometheus/prometheus.yml

得到

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'codelab-monitor'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']
  • scrape_interval
    這里是指每隔15秒鐘去抓取數(shù)據(jù)(這里)

  • evaluation_interval
    指的是計(jì)算rule的間隔

Push Gateway

pushgateway有單獨(dú)的鏡像

docker pull prom/pushgateway

對(duì)于喜歡用push模式的應(yīng)用來(lái)說(shuō)胎源,可以專門搭建一個(gè)push gateway棉钧,來(lái)適配一下。

storage

prometheus使用了G家的LevelDB來(lái)做索引(PromSQL重度依賴LevelDB)乒融,對(duì)于大量的采樣數(shù)據(jù)有自己的存儲(chǔ)層掰盘,Prometheus為每個(gè)時(shí)序數(shù)據(jù)創(chuàng)建一個(gè)本地文件摄悯,以1024byte大小的chunk來(lái)組織。

磁盤文件

Prometheus在storage.local.path指定的路徑存儲(chǔ)文件愧捕,默認(rèn)為./data奢驯。關(guān)于chunk編碼有三種

  • type 0

第一代的編碼格式,simple delta encoding

  • type 1

目前默認(rèn)的編碼格式次绘,double-delta encoding

  • type 2

variable bit-width encoding瘪阁,facebook的時(shí)間序列數(shù)據(jù)庫(kù)Beringei采用的編碼方式

內(nèi)存使用

prometheus在內(nèi)存里保存了最近使用的chunks,具體chunks的最大個(gè)數(shù)可以通過(guò)storage.local.memory-chunks來(lái)設(shè)定邮偎,默認(rèn)值為1048576管跺,即1048576個(gè)chunk,大小為1G禾进。
除了采用的數(shù)據(jù)豁跑,prometheus還需要對(duì)數(shù)據(jù)進(jìn)行各種運(yùn)算,因此整體內(nèi)存開(kāi)銷肯定會(huì)比配置的local.memory-chunks大小要來(lái)的大泻云,因此官方建議要預(yù)留3倍的local.memory-chunks的內(nèi)存大小艇拍。

As a rule of thumb, you should have at least three times more RAM available than needed by the memory chunks alone

可以通過(guò)server的metrics去查看prometheus_local_storage_memory_chunks以及process_resident_memory_byte兩個(gè)指標(biāo)值。

  • prometheus_local_storage_memory_chunks

The current number of chunks in memory, excluding cloned chunks
目前內(nèi)存中暴露的chunks的個(gè)數(shù)

  • process_resident_memory_byte

Resident memory size in bytes
駐存在內(nèi)存的數(shù)據(jù)大小

  • prometheus_local_storage_persistence_urgency_score
    介于0-1之間宠纯,當(dāng)該值小于等于0.7時(shí)卸夕,prometheus離開(kāi)rushed模式。
    當(dāng)大于0.8的時(shí)候婆瓜,進(jìn)入rushed模式

  • prometheus_local_storage_rushed_mode
    1表示進(jìn)入了rushed mode快集,0表示沒(méi)有。進(jìn)入了rushed模式的話廉白,prometheus會(huì)利用storage.local.series-sync-strategy以及storage.local.checkpoint-interval的配置加速chunks的持久化个初。

storage參數(shù)

docker run -p 9090:9090 \
-v /tmp/prometheus-data:/prometheus-data \
prom/prometheus \
-storage.local.retention 168h0m0s \
-storage.local.max-chunks-to-persist 3024288 \
-storage.local.memory-chunks=50502740 \
-storage.local.num-fingerprint-mutexes=300960

storage.local.memory-chunks

設(shè)定prometheus內(nèi)存中保留的chunks的最大個(gè)數(shù),默認(rèn)為1048576蒙秒,即為1G大小

storage.local.retention

用來(lái)配置采用數(shù)據(jù)存儲(chǔ)的時(shí)間勃黍,168h0m0s即為24*7小時(shí)宵统,即1周

storage.local.series-file-shrink-ratio

用來(lái)控制序列文件rewrite的時(shí)機(jī)晕讲,默認(rèn)是在10%的chunks被移除的時(shí)候進(jìn)行rewrite,如果磁盤空間夠大马澈,不想頻繁rewrite瓢省,可以提升該值,比如0.3痊班,即30%的chunks被移除的時(shí)候才觸發(fā)rewrite勤婚。

storage.local.max-chunks-to-persist

該參數(shù)控制等待寫入磁盤的chunks的最大個(gè)數(shù),如果超過(guò)這個(gè)數(shù)涤伐,Prometheus會(huì)限制采樣的速率馒胆,直到這個(gè)數(shù)降到指定閾值的95%缨称。建議這個(gè)值設(shè)定為storage.local.memory-chunks的50%。Prometheus會(huì)盡力加速存儲(chǔ)速度祝迂,以避免限流這種情況的發(fā)送睦尽。

storage.local.num-fingerprint-mutexes

當(dāng)prometheus server端在進(jìn)行checkpoint操作或者處理開(kāi)銷較大的查詢的時(shí)候,采集指標(biāo)的操作會(huì)有短暫的停頓型雳,這是因?yàn)閜rometheus給時(shí)間序列分配的mutexes可能不夠用当凡,可以通過(guò)這個(gè)指標(biāo)來(lái)增大預(yù)分配的mutexes,有時(shí)候可以設(shè)置到上萬(wàn)個(gè)纠俭。

storage.local.series-sync-strategy

控制寫入數(shù)據(jù)之后沿量,何時(shí)同步到磁盤,有'never', 'always', 'adaptive'. 同步操作可以降低因?yàn)椴僮飨到y(tǒng)崩潰帶來(lái)數(shù)據(jù)丟失冤荆,但是會(huì)降低寫入數(shù)據(jù)的性能朴则。
默認(rèn)為adaptive的策略,即不會(huì)寫完數(shù)據(jù)就立刻同步磁盤钓简,會(huì)利用操作系統(tǒng)的page cache來(lái)批量同步佛掖。

storage.local.checkpoint-interval

進(jìn)行checkpoint的時(shí)間間隔,即對(duì)尚未寫入到磁盤的內(nèi)存chunks執(zhí)行checkpoint操作涌庭。

doc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芥被,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坐榆,更是在濱河造成了極大的恐慌拴魄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件席镀,死亡現(xiàn)場(chǎng)離奇詭異匹中,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)豪诲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門顶捷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人屎篱,你說(shuō)我怎么就攤上這事服赎。” “怎么了交播?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵重虑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我秦士,道長(zhǎng)缺厉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮提针,結(jié)果婚禮上命爬,老公的妹妹穿的比我還像新娘。我一直安慰自己辐脖,他們只是感情好遇骑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著揖曾,像睡著了一般落萎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炭剪,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天练链,我揣著相機(jī)與錄音奴拦,去河邊找鬼媒鼓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛错妖,可吹牛的內(nèi)容都是我干的绿鸣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暂氯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼潮模!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起痴施,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤擎厢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辣吃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體动遭,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年神得,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厘惦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哩簿,死狀恐怖宵蕉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卡骂,我是刑警寧澤国裳,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布形入,位于F島的核電站全跨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亿遂。R本人自食惡果不足惜浓若,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一渺杉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挪钓,春花似錦是越、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至馏予,卻和暖如春天梧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霞丧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工呢岗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛹尝。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓后豫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親突那。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挫酿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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