關(guān)于容器監(jiān)控烦粒,數(shù)人云之前給大家分享了《解惑|你是否為容器監(jiān)控操碎了心休溶?》,就有有Prometheus的身影扰她,那么它都有哪些優(yōu)缺點(diǎn)兽掰?近日發(fā)布的2.0版本又有哪些改進(jìn)?本文見分曉~
Prometheus解決了Devs如何監(jiān)控高動(dòng)態(tài)容器環(huán)境的問(wèn)題徒役,在本文中孽尽,F(xiàn)rederick Ryckbosch講述了使用Prometheus的優(yōu)點(diǎn)和缺點(diǎn),以及它到底有多大的伸縮性忧勿。
Prometheus是一個(gè)基于時(shí)間序列的數(shù)值數(shù)據(jù)的監(jiān)控解決方案杉女,這是一個(gè)開源項(xiàng)目,由前Google員工在SoundCloud啟動(dòng)鸳吸,他們希望監(jiān)控一個(gè)高度動(dòng)態(tài)的容器環(huán)境熏挎,因?yàn)閷?duì)傳統(tǒng)的監(jiān)控工具不甚滿意,所以開發(fā)出Prometheus晌砾,并在上面進(jìn)行工作坎拐。
在本文中,我們將討論P(yáng)rometheus的重要設(shè)計(jì)決策及其影響,將重點(diǎn)討論“ Digital Ocean”如何成功地將Prometheus擴(kuò)展到100萬(wàn)臺(tái)機(jī)器哼勇,以及在使用Coscale時(shí)如何利用Prometheus都伪。
Prometheus是如何工作的
要使用Prometheus監(jiān)控服務(wù),服務(wù)需要公開一個(gè)Prometheus端點(diǎn)积担,這端點(diǎn)是一個(gè)HTTP借口院溺,它公開了度量的列表和當(dāng)前的值。
Prometheus提供了廣泛的服務(wù)發(fā)現(xiàn)選項(xiàng)磅轻,以查找您的服務(wù)并從它們開始檢索度量數(shù)據(jù)。Prometheus服務(wù)器輪詢服務(wù)的指標(biāo)接口并存儲(chǔ)數(shù)據(jù)逐虚。
在Prometheus UI中聋溜,用戶可以在PromQL語(yǔ)言中編寫查詢以提取度量信息。
例如:
topk(3, sum(rate(container_cpu_time[5m]) by (app, proc)))
將返回最上面的3個(gè)CPU消費(fèi)服務(wù)叭爱。
告警可以在Alertmanager中配置撮躁,再次使用PromQL語(yǔ)言。Grafana 是一個(gè)流行的選項(xiàng)买雾,為Prometheus的指標(biāo)創(chuàng)建儀表盤把曼。
Prometheus的設(shè)計(jì)決策
這里從Prometheus的度量終點(diǎn)開始,這些端點(diǎn)定義度量標(biāo)準(zhǔn)和值漓穿,并通過(guò)HTTP公開嗤军,它們?yōu)槭謾C(jī)度量標(biāo)準(zhǔn)提供了一種標(biāo)準(zhǔn)化的方法,Prometheus度量遵循了度量2.0所指定的許多準(zhǔn)則:度量標(biāo)準(zhǔn)有名稱晃危、描述叙赚、維度和值。唯一缺少的是度量單位僚饭。
許多服務(wù)度暴露了Prometheus端點(diǎn)震叮,這使得收集它們非常容易,對(duì)沒(méi)有本地Prometheus端點(diǎn)的其他服務(wù)鳍鸵,則需要轉(zhuǎn)換器苇瓣。這意味著對(duì)于這些服務(wù),必須部署一個(gè)額外的Sidecar容器偿乖,以公開Prometheus格式的字表击罪。
在這里討論的第二個(gè)設(shè)計(jì)決定是拉力和推力,Prometheus調(diào)查服務(wù)的指標(biāo)贪薪,這意味著如果您想要使用Prometheus監(jiān)控的所有服務(wù)都應(yīng)該公開Prometheus度量端點(diǎn)外邓,Prometheus使用服務(wù)發(fā)現(xiàn),它與Kubernetes很好的集成在一起古掏,以找到所有的服務(wù)一旦它找到了所有服務(wù)损话,將通過(guò)輪詢其他Prometheus度量端點(diǎn)收集所有這些服務(wù)的指標(biāo)。
容器
Pull方法的優(yōu)點(diǎn)是不需要安裝代理,而且可以通過(guò)多個(gè)Prometheus實(shí)例來(lái)提取指標(biāo)丧枪。
而缺點(diǎn)同樣明顯:
對(duì)于Prometheus的使用者來(lái)說(shuō)光涂,所有的公制端點(diǎn)都必須是可達(dá)的,這意味著一個(gè)更加復(fù)雜的安全網(wǎng)絡(luò)配置拧烦。
在大型部署中忘闻,擴(kuò)展成為一個(gè)問(wèn)題,Prometheus建議采用一種基于推特的方法來(lái)收集短期的工作指標(biāo)恋博。
Prometheus的主要設(shè)計(jì)目標(biāo)之一是操作簡(jiǎn)單性齐佳。這樣,Prometheus就限制了監(jiān)控系統(tǒng)的可能失效模式數(shù)量债沮,遵循著一原則炼吴,Prometheus目前只局限于單個(gè)點(diǎn),因?yàn)榧簬?lái)了額外的操作復(fù)雜性疫衩,使用單個(gè)節(jié)點(diǎn)不那么復(fù)雜硅蹦,但是對(duì)可以由Prometheus監(jiān)控的度量指標(biāo)適量有著嚴(yán)格的限制。
Prometheus不解決的問(wèn)題
Prometheus并不打算解決幾個(gè)方面的問(wèn)題:
首先是對(duì)日志的支持:這兩個(gè)指標(biāo)和日志都是為用戶的應(yīng)用程序提供完全可見性的必要部分闷煤,但是已經(jīng)有大量的開源和閉源日志聚合器來(lái)管理日志童芹。
Prometheus也不提供持久的長(zhǎng)期存儲(chǔ)、異常檢測(cè)鲤拿、自動(dòng)水平縮放和用戶管理假褪,但從作者的客戶基礎(chǔ)上,看到在多數(shù)企業(yè)環(huán)境中都需要這些特性近顷。
Prometheus不是一個(gè)Dashboarding解決方案嗜价,它提供了一個(gè)簡(jiǎn)單的UI來(lái)進(jìn)行PromQL查詢,但它依賴于移植物的操作幕庐,增加了一些額外的設(shè)置復(fù)雜度久锥。
Prometheus與Digital Ocean
在2016年的PromCon演講中,來(lái)自Digital Ocean的Matthew Campbell解釋了它們?nèi)绾螌rometheus擴(kuò)展到100萬(wàn)臺(tái)的异剥,在演講當(dāng)中瑟由,他解釋了他們是怎樣從一個(gè)默認(rèn)的Prometheus裝置開始的,以及他們必須改變什么冤寿,才能讓它變得更大歹苦。
他們以每天數(shù)據(jù)中心的一臺(tái)Prometheus機(jī)開始,遇到了可伸縮性問(wèn)題督怜,并創(chuàng)建了更大的機(jī)器來(lái)運(yùn)行Prometheus殴瘦。一旦他們將機(jī)器按最大尺寸縮放,他們將系統(tǒng)保留時(shí)間減少到3天号杠,并決定放棄某些指標(biāo)蚪腋。這種方法只能到目前為止丰歌,因此他們決定根據(jù)節(jié)點(diǎn)標(biāo)簽進(jìn)一步提高他們的Prometheus,這種方法的困難在于屉凯,查詢變得更加困難立帖,他們最終實(shí)現(xiàn)了一個(gè)從多個(gè)碎片收集數(shù)據(jù)的Prometheus代理,他們無(wú)法用這種方法解決更大的問(wèn)題是碎片重新分配和過(guò)度供應(yīng)悠砚。
當(dāng)從1萬(wàn)個(gè)服務(wù)器擴(kuò)展到100萬(wàn)個(gè)虛擬機(jī)時(shí)晓勇,他們決定采取不同的方法,創(chuàng)建了一個(gè)“反向節(jié)點(diǎn)出口商”灌旧,它基本上是安裝在節(jié)點(diǎn)上的代理绑咱,并將數(shù)據(jù)推到一個(gè)中心點(diǎn),在后端方面枢泰,他們也做了重大的改變:保留了Prometheus API描融,但添加了一個(gè)Kafka集群,用于傳入的指標(biāo)和Cassandra的度量存儲(chǔ)宗苍,他們還介紹了采樣,這個(gè)項(xiàng)目被稱為Vulcan薄榛,可用作開源讳窟。
Vulcan所采取的方法看起來(lái)很像CoScale所采取的方法,還使用代理和可伸縮敞恋、高可用的后端丽啡。
CoScal在哪里合適?
我們相信有一個(gè)標(biāo)準(zhǔn)化的度量格式有很大的價(jià)值硬猫,這使得從不同類型的服務(wù)中心收集指標(biāo)變得很容易补箍,CoScale提供了一個(gè)Prometheus插件,它收集了在Prometheus格式中暴露的指標(biāo)啸蜜,這使得您可以輕松地從已啟動(dòng)的服務(wù)中獲得指標(biāo)坑雅。
但是仍然有很多服務(wù)沒(méi)有暴露出Prometheus端點(diǎn)。為這些服務(wù)部署一個(gè)轉(zhuǎn)換器非常麻煩衬横,CoScale有廣泛的插件裹粤,支持多種服務(wù)的本地度量機(jī)制;錄用日志蜂林、Api和其他線程的度量計(jì)數(shù)器遥诉。我們還提供了收集自定義指標(biāo)的不同選項(xiàng)。
CoScale提供了一個(gè)可擴(kuò)展的插件噪叙,包括一個(gè)代理和和一個(gè)可擴(kuò)展的矮锈、高可用的后端作為SaaS和On-Premise,CoScale提供了Metrics睁蕾,指標(biāo)苞笨,和事件存儲(chǔ)(短期和長(zhǎng)期),直觀的儀表盤,告警和異常檢測(cè)猫缭。
Prometheus 2.0
Prometheus 1.0于2016年7月發(fā)布葱弟,就在前幾天,Prometheus發(fā)布了2.0的版本猜丹,帶來(lái)了巨大的性能改進(jìn)芝加,并變得更容易操作,下面讓我們看看這個(gè)版本都有哪些方面的改進(jìn)射窒。
許多公司和組織都采用了Prometheus藏杖,這個(gè)項(xiàng)目很快就擁有了一大批的活躍粉絲(開發(fā)人員)以及技術(shù)社區(qū)。5月的時(shí)候就傳出Prometheus 2.0版本的前瞻預(yù)測(cè)脉顿,據(jù)說(shuō)會(huì)有一個(gè)很大的改進(jìn)是蝌麸,有新的存儲(chǔ)層,這意味著極大地提高了Kubernetes和其他分布式系統(tǒng)的監(jiān)控可伸縮性艾疟。
Prometheus有一個(gè)簡(jiǎn)單而健壯的操作模式来吩,然而,基礎(chǔ)設(shè)施領(lǐng)域也在逐步發(fā)展蔽莱,如Kubernetes何Mesos這樣的項(xiàng)目迅速地改變了應(yīng)用部署和管理的方式弟疆,受監(jiān)控的環(huán)境變得越來(lái)越動(dòng)態(tài)化。
Prometheus存儲(chǔ)子系統(tǒng)需要仔細(xì)配置預(yù)期負(fù)載盗冷,雖然在Prometheus 1.6中怠苔,自動(dòng)調(diào)諧能力讓其大為減輕,但用戶仍然會(huì)遇到一些不可避免的硬限制仪糖。
存儲(chǔ)
2017年柑司,事情逐步發(fā)生改變,最初作為一種新的锅劝,更高效的時(shí)間序列數(shù)據(jù)庫(kù)的實(shí)驗(yàn)攒驰,在實(shí)際的基準(zhǔn)測(cè)試中得到了驗(yàn)證,在過(guò)去的6個(gè)月當(dāng)中故爵,Prometheus的開發(fā)團(tuán)隊(duì)一直在忙著穩(wěn)定這個(gè)獨(dú)立的時(shí)間序列數(shù)據(jù)庫(kù)讼育,并將其重新整合到Prometheus本身,其結(jié)果上稠集,幾乎所有的維度上都有了改進(jìn)奶段,從而顯著地提高了Prometheus 2.0的性能,查詢延遲更為一致剥纷,特別是在高串?dāng)_的情況下痹籍,在不同的實(shí)際生產(chǎn)場(chǎng)景中,度量的資源消耗也顯著減少:
- 與Prometheus 1.8相比晦鞋,CPU使用率降低了20%-40%
- 與Prometheus 1.8相比蹲缠,磁盤空間使用減少到33%-50%
- 沒(méi)有太多查詢負(fù)載的磁盤I/O通常小于1%
在未來(lái)的幾年里棺克,它還可以處理現(xiàn)代計(jì)算環(huán)境日益增長(zhǎng)的動(dòng)態(tài)特性。
Staleness handling
此外线定,許多以小見大的變化使得Prometheus更加直觀娜谊,最值得注意的是Staleness處理,它是最古老和最需要路線圖的項(xiàng)目之一斤讥,隨著新的改進(jìn)纱皆,從這些目標(biāo)中消失的監(jiān)控目標(biāo)或系列已經(jīng)被明確跟蹤,這減少了人工查詢芭商,增強(qiáng)了告警響應(yīng)能力派草。
其他改進(jìn)
Prometheus 2.0還內(nèi)置了對(duì)整個(gè)數(shù)據(jù)庫(kù)快照備份的支持。
同時(shí)铛楣,還將記錄和告警規(guī)則從一個(gè)自定義格式遷移到無(wú)處不在的YAML格式近迁,這使得集成配置管理和模塊變得更加容易。
其他的變動(dòng)改進(jìn)請(qǐng)參看:https://prometheus.io/docs/prometheus/2.0/migration/
未來(lái)計(jì)劃
會(huì)將新的存儲(chǔ)子系統(tǒng)設(shè)計(jì)為可訪問(wèn)和可擴(kuò)展的簸州,這就需要將新特性直接集成到Prometheus中鉴竭,以及可以在它之上構(gòu)建的定制工具,簡(jiǎn)單而開放的存儲(chǔ)格式和庫(kù)也允許用戶輕松構(gòu)建自定義擴(kuò)展岸浑,比如動(dòng)態(tài)保留策略搏存,這使得存儲(chǔ)層能夠滿足廣泛的需求,而無(wú)需將復(fù)雜性引入到Prometheus本身中助琐,讓它專注于它的核心目標(biāo)祭埂。