Prometheus介紹

Prometheus

Prometheus是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合,起始是由SoundCloud公司開發(fā)的。成立于2012年夜惭,之后許多公司和組織接受和采用prometheus,他們便將它獨立成開源項目言秸,并且有公司來運作.該項目有非初尾妫活躍的社區(qū)和開發(fā)人員称杨,目前是獨立的開源項目匾竿,任何公司都可以使用它,2016年篱蝇,Prometheus加入了云計算基金會贺待,成為kubernetes之后的第二個托管項目.google SRE的書內(nèi)也曾提到跟他們BorgMon監(jiān)控系統(tǒng)相似的實現(xiàn)是Prometheus。現(xiàn)在最常見的Kubernetes容器管理系統(tǒng)中态兴,通常會搭配Prometheus進行監(jiān)控狠持。

特性

prometheus的主要特點

  • 自定義多維數(shù)據(jù)模型(時序列數(shù)據(jù)由metric名和一組key/value標(biāo)簽組成)
  • 非常高效的存儲 平均一個采樣數(shù)據(jù)占 ~3.5 bytes左右疟位,320萬的時間序列,每30秒采樣,保持60天撇寞,消耗磁盤大概228G礁芦。
  • 在多維度上靈活且強大的查詢語言(PromQl)
  • 不依賴分布式存儲,支持單主節(jié)點工作
  • 通過基于HTTP的pull方式采集時序數(shù)據(jù)
  • 可以通過push gateway進行時序列數(shù)據(jù)推送(pushing)
  • 可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
  • 多種可視化圖表及儀表盤支持

pull方式

Prometheus采集數(shù)據(jù)是用的pull也就是拉模型,通過HTTP協(xié)議去采集指標(biāo)得院,只要應(yīng)用系統(tǒng)能夠提供HTTP接口就可以接入監(jiān)控系統(tǒng)傻铣,相比于私有協(xié)議或二進制協(xié)議來說開發(fā)、簡單祥绞。

push方式

對于定時任務(wù)這種短周期的指標(biāo)采集非洲,如果采用pull模式鸭限,可能造成任務(wù)結(jié)束了,Prometheus還沒有來得及采集两踏,這個時候可以使用加一個中轉(zhuǎn)層败京,客戶端推數(shù)據(jù)到Push Gateway緩存一下,由Prometheus從push gateway pull指標(biāo)過來梦染。(需要額外搭建Push Gateway赡麦,同時需要新增job去從gateway采數(shù)據(jù))

prometheus適用于監(jiān)控所有時間序列的項目

目前其生態(tài)中已經(jīng)有很多exporter實現(xiàn),例如:

  • Node/system metrics exporter
  • AWS CloudWatch exporter
  • Blackbox exporter
  • Collectd exporter
  • Consul exporter
  • Graphite exporter
  • HAProxy exporter
  • InfluxDB exporter
  • JMX exporter
  • Memcached exporter
  • Mesos task exporter
  • MySQL server exporter
  • SNMP exporter
  • StatsD exporter

組成及架構(gòu)

Prometheus生態(tài)系統(tǒng)由多個組件組成帕识。其中許多組件都是可選的

  • Prometheus server

    主要負(fù)責(zé)數(shù)據(jù)采集和存儲泛粹,提供PromQL查詢語言的支持

  • 客戶端sdk官方提供的客戶端類庫:

    go、java肮疗、scala晶姊、python、ruby伪货,其他還有很多第三方開發(fā)的類庫帽借,支持nodejs、php超歌、erlang等

  • Push Gateway

    支持臨時性Job主動推送指標(biāo)的中間網(wǎng)關(guān)

  • PromDash

    使用rails開發(fā)的dashboard砍艾,用于可視化指標(biāo)數(shù)據(jù)

  • exporters

    支持其他數(shù)據(jù)源的指標(biāo)導(dǎo)入到Prometheus,支持?jǐn)?shù)據(jù)庫巍举、硬件脆荷、消息中間件、存儲系統(tǒng)懊悯、http服務(wù)器蜓谋、jmx等

  • alertmanager

    實驗性組件、用來進行報警

  • prometheus_cli

    命令行工具

  • 其他輔助性工具

prometheus大多數(shù)組件都是用Go編寫的炭分,他們可以非常輕松的基于二進制文件部署和構(gòu)建

它的服務(wù)過程是這樣的 Prometheus Server 負(fù)責(zé)定時去目標(biāo)上抓取 metrics(指標(biāo)) 數(shù)據(jù)桃焕,每個抓取目標(biāo)需要暴露一個http服務(wù)的接口給它定時抓取。
Prometheus支持通過配置文件捧毛、kubernetes观堂、zookeeper、Consul呀忧、DNS SRV lookup等方式指定抓取目標(biāo)师痕。
Alertmanager 是獨立于Prometheus的一個組件,可以支持Prometheus的查詢語句編寫規(guī)則而账,提供十分靈活的報警方式胰坟。
Prometheus支持很多方式的圖表可視化,例如十分精美的Grafana泞辐,自帶的Promdash笔横,以及自身提供的模版引擎等等竞滓,還提供HTTP API的查詢方式,自定義所需要的輸出吹缔。
PushGateway這個組件是支持Client主動推送 metrics 到PushGateway虽界,而Prometheus只是定時去Gateway上抓取數(shù)據(jù)。

如果有使用過statsd的用戶涛菠,則會覺得這十分相似莉御,只是statsd是直接發(fā)送給服務(wù)器端,而Prometheus主要還是靠進程主動去抓取俗冻。

概念

Prometheus 的數(shù)據(jù)模型

Prometheus 從根本上所有的存儲都是按時間序列去實現(xiàn)的礁叔,相同的 metrics(指標(biāo)名稱) 和 label(一個或多個標(biāo)簽) 組成一條時間序列,不同的label表示不同的時間序列迄薄。為了支持一些查詢琅关,有時還會臨時產(chǎn)生一些時間序列存儲。

metrics name & label 指標(biāo)名稱和標(biāo)簽

每條時間序列是由唯一的 指標(biāo)名稱 和 一組 標(biāo)簽 (key=value)的形式組成讥蔽。

  • 指標(biāo)名稱

    一般是給監(jiān)測對像起一名字涣易,例如 http_requests_total 這樣,它有一些命名規(guī)則冶伞,可以包字母數(shù)字之類的的新症。通常是以應(yīng)用名稱開頭監(jiān)測對像數(shù)值類型單位這樣。例如:

      - push_total
      - userlogin_mysql_duration_seconds
      - app_memory_usage_bytes
    
  • 標(biāo)簽
    就是對一條時間序列不同維度的識別了响禽,例如 一個http請求用的是POST還是GET徒爹,它的endpoint是什么,這時候就要用標(biāo)簽去標(biāo)記了芋类。最終形成的標(biāo)識便是這樣了

      http_requests_total{method="POST",endpoint="/api/tracks"}
    

記住隆嗅,針對http_requests_total這個metrics name 無論是增加標(biāo)簽還是刪除標(biāo)簽都會形成一條新的時間序列。
查詢語句就可以跟據(jù)上面標(biāo)簽的組合來查詢聚合結(jié)果了侯繁。
如果以傳統(tǒng)數(shù)據(jù)庫的理解來看這條語句胖喳,則可以考慮 http_requests_total是表名,標(biāo)簽是字段贮竟,而timestamp是主鍵丽焊,還有一個float64字段是值了。(Prometheus里面所有值都是按float64存儲)

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

Counter

  • Counter 用于累計值坝锰,例如 記錄 請求次數(shù)粹懒、任務(wù)完成數(shù)重付、錯誤發(fā)生次數(shù)顷级。

  • 一直增加,不會減少确垫。

  • 重啟進程后弓颈,會被重置帽芽。

      例如:http_response_total{method="GET",endpoint="/api/tracks"} 10
      10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100
    

Gauge

  • Gauge 常規(guī)數(shù)值,例如 溫度變化翔冀、CPU,內(nèi)存,網(wǎng)絡(luò)使用變化导街。

  • 可變大,可變小纤子。

  • 重啟進程后搬瑰,會被重置

      例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
      memory_usage_bytes{host="master-01"} 30
      memory_usage_bytes{host="master-01"} 50
      memory_usage_bytes{host="master-01"} 80 < 抓取值
    

Histogram

Histogram 可以理解為柱狀圖的意思,常用于跟蹤事件發(fā)生(通常是請求持續(xù)時間或響應(yīng)大小)的規(guī)模控硼,例如:請求耗時泽论、響應(yīng)大小。它特別之處是可以對記錄的內(nèi)容進行分組卡乾,提供 count 和 sum 全部值的功能翼悴。

例如:{小于10=5次,小于20=1次幔妨,小于30=2次}鹦赎,count=7次,sum=7次的求和值

Summary

Summary和Histogram十分相似误堡,常用于跟蹤事件(通常是要求持續(xù)時間和響應(yīng)大小)發(fā)生的規(guī)模古话,例如:請求耗時、響應(yīng)大小锁施。同樣提供 count 和 sum 全部值的功能煞额。
例如:count=7次,sum=7次的值求值
它提供一個quantiles的功能沾谜,可以按%比劃分跟蹤的結(jié)果膊毁。例如:quantile取值0.95,表示取采樣值里面的95%數(shù)據(jù)基跑。

Jobs and Instances

在prometheus中婚温,任何被采集的目標(biāo)被稱為instance,通常對應(yīng)于單個進程,而相同類型(可擴展性和可靠性的復(fù)制)的instance集合被稱為Job媳否。例如:Api server job由4個復(fù)制instance組成:

- job: api-server
    - instance1: 1.2.3.4:5670
    - instance2: 1.2.3.4:5671
    - instance3: 5.6.7.8:5670
    - instance3: 5.6.7.8:5671

自動生成標(biāo)簽和時間序列

當(dāng)prometheus采集目標(biāo)時栅螟,它會自動附加某些標(biāo)簽,用于識別被采集的目標(biāo)篱竭。

  • job: 配置目標(biāo)所屬的job名稱
  • instance: 目標(biāo) HTTP URL<host>:<port>部分

如果任何一個標(biāo)簽已經(jīng)存在于采集的數(shù)據(jù)中力图,則此行為依賴honor_labels 配置選項。

對于每個被采集的instance,prometheus存儲如下的時間序列樣本:

  • up{job="<job-name>",instance="<instance-id>"}:1 如果實例處于health掺逼,為1吃媒,否則為0
  • scrape_duration_seconds{job="<job-name>",instance="<instance-id>"} 持續(xù)采集時間

“up”時間序列metric對于instance可用性監(jiān)控是有效的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赘那,隨后出現(xiàn)的幾起案子刑桑,更是在濱河造成了極大的恐慌,老刑警劉巖募舟,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祠斧,死亡現(xiàn)場離奇詭異,居然都是意外死亡拱礁,警方通過查閱死者的電腦和手機琢锋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呢灶,“玉大人吩蔑,你說我怎么就攤上這事√钐В” “怎么了烛芬?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飒责。 經(jīng)常有香客問我赘娄,道長,這世上最難降的妖魔是什么宏蛉? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任遣臼,我火速辦了婚禮,結(jié)果婚禮上拾并,老公的妹妹穿的比我還像新娘揍堰。我一直安慰自己,他們只是感情好嗅义,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布屏歹。 她就那樣靜靜地躺著,像睡著了一般之碗。 火紅的嫁衣襯著肌膚如雪蝙眶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天褪那,我揣著相機與錄音幽纷,去河邊找鬼。 笑死博敬,一個胖子當(dāng)著我的面吹牛友浸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偏窝,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼收恢,長吁一口氣:“原來是場噩夢啊……” “哼武学!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起派诬,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤劳淆,失蹤者是張志新(化名)和其女友劉穎链沼,沒想到半個月后默赂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡括勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年缆八,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疾捍。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡奈辰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乱豆,到底是詐尸還是另有隱情奖恰,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布宛裕,位于F島的核電站瑟啃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏揩尸。R本人自食惡果不足惜蛹屿,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岩榆。 院中可真熱鬧错负,春花似錦、人聲如沸勇边。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粒褒。三九已至油航,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怀浆,已是汗流浹背谊囚。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留执赡,地道東北人镰踏。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像沙合,于是被迫代替她去往敵國和親奠伪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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