科技改變生活 · 科技引領(lǐng)未來
奇技指南隨著Openstack集群規(guī)模越來越大,監(jiān)控?cái)?shù)據(jù)呈現(xiàn)指數(shù)級增長,給后期計(jì)算、存儲(chǔ)資源擴(kuò)容帶來了極大的考驗(yàn)。如何穩(wěn)定、永久存儲(chǔ)監(jiān)控?cái)?shù)據(jù)、快速查詢熱數(shù)據(jù)與歷史數(shù)據(jù)一直是大規(guī)模云計(jì)算集群存在的問題,當(dāng)然Openstack社區(qū)的Ceilom
奇技指南
隨著 Openstack 集群規(guī)模越來越大,監(jiān)控?cái)?shù)據(jù)呈現(xiàn)指數(shù)級增長,給后期計(jì)算、存儲(chǔ)資源擴(kuò)容帶來了極大的考驗(yàn)。如何穩(wěn)定、永久存儲(chǔ)監(jiān)控?cái)?shù)據(jù)、快速查詢熱數(shù)據(jù)與歷史數(shù)據(jù)一直是大規(guī)模云計(jì)算集群存在的問題,當(dāng)然Openstack 社區(qū)的 Ceilometer 、Gnocchi、Aodh項(xiàng)目也未能很好解決我們目前存在的問題,在這里作者將介紹CNCF大殺器, Thanos + Prometheus TP組合(PS:并不是銀彈)在Openstack與ceph集群中的概念和使用,將對以上問題作出有效的答復(fù)。
英國游戲技術(shù)公司 Improbable 開源了他們的Prometheus 高可用解決方案。主頁上簡單易懂一段英文介紹如下:Open source, highly available Prometheus setup with long term storage capabilities。開源,高可用性的Prometheus 設(shè)置,并提供長期存儲(chǔ)能力。
Compact
Compac提供數(shù)據(jù)降準(zhǔn)和壓縮功能,主要負(fù)責(zé)針對S3存儲(chǔ)中的對象進(jìn)行壓縮,可以將歷史數(shù)據(jù)中的Block合并壓縮成大文件對象。實(shí)際上降準(zhǔn)壓縮并未節(jié)省任何空間,而且會(huì)在原始的Block增加2個(gè)塊,但是在查詢歷史數(shù)據(jù)時(shí)會(huì)提升查詢速度。最后注意的是,由于進(jìn)程運(yùn)行時(shí)對中間數(shù)據(jù)進(jìn)行處理,故本地需要足夠的磁盤空間,隨著數(shù)據(jù)增多空間需求越來越大,目前我們預(yù)留300GB 本地空間用作壓縮中間數(shù)據(jù)的處理,并每三天進(jìn)行一次壓縮。
Querier
查詢組件通過實(shí)現(xiàn)Pormetheus HTTP v1 API功能,組件接收到HTTP的PromSQL 查詢請求后負(fù)責(zé)將數(shù)據(jù)查詢和匯集。它是一個(gè)無狀態(tài)的服務(wù),支持水平擴(kuò)展。
SideCar
此組件需要和Pormetheus 實(shí)例一起部署,它主要起到兩個(gè)作用,第一代理Querier 組件對本地Prometheus數(shù)據(jù)讀取;第二是將Prometheus 本地監(jiān)控?cái)?shù)據(jù)通過對象存儲(chǔ)接口上傳到對象存儲(chǔ)中。最后sidecar 會(huì)監(jiān)視Prometheus的本地存儲(chǔ),若發(fā)現(xiàn)有新的監(jiān)控?cái)?shù)據(jù)保存到磁盤,會(huì)將這些監(jiān)控?cái)?shù)據(jù)上傳至對象存儲(chǔ)。
Store
Store 主要提供查詢歷史數(shù)據(jù)功能,當(dāng)Querier組件調(diào)用Stroe 接口,Stroe 再通過對象存儲(chǔ)接口獲取數(shù)據(jù),并將存儲(chǔ)數(shù)據(jù)轉(zhuǎn)換成Querier所需的數(shù)據(jù)格式。
Bucket
用于檢查對象存儲(chǔ)中的數(shù)據(jù)命令,通常作為獨(dú)立命令運(yùn)行并幫助我們進(jìn)行故障排查,支持通過Web UI 查看目前Buket的數(shù)量。
Check
通過Thanos check 可以檢查和驗(yàn)證Pormetheus Rules 是否正確,實(shí)現(xiàn)函數(shù)如下。
//定義檢查Rules函數(shù) func checkRules(logger log.Logger, filename string) (int, errors.MultiError) { //記錄日志,返回檢測的文件名稱和詳細(xì)的日志信息 level.Info(logger).Log("msg", "checking", "filename", filename) checkErrors := errors.MultiError{} b, err := //讀取Rules文件 ioutil.ReadFile(filename) if err != nil { checkErrors.Add(err) return 0, checkErrors } //由于rules 格式需要純Yaml格式,需要驗(yàn)證Yaml 格式是否正確 var rgs ThanosRuleGroups if err := yaml.UnmarshalStrict(b, &rgs); err != nil { checkErrors.Add(err) return 0, checkErrors } // We need to convert Thanos rules to Prometheus rules so we can use their validation. promRgs := thanosRuleGroupsToPromRuleGroups(rgs) if errs := promRgs.Validate(); errs != nil { for _, e := range errs { checkErrors.Add(e) } return 0, checkErrors } numRules := 0 for _, rg := range rgs.Groups { numRules += len(rg.Rules) } //函數(shù)結(jié)尾返回檢查的rules 數(shù)量和錯(cuò)誤的數(shù)量及錯(cuò)誤信息 return numRules, checkErrors }
由于Thanos Store 啟動(dòng)時(shí)會(huì)加載可以訪問的數(shù)據(jù),他會(huì)在本地磁盤或者內(nèi)存中加載少量的對象存儲(chǔ)的塊信息,隨著時(shí)間的推移會(huì)造成本地磁盤和內(nèi)存的爆滿,導(dǎo)致集群異常,并引入如下多個(gè)問題。大量查詢緩慢導(dǎo)致內(nèi)存暴增并出現(xiàn)Store OOM。前期我們使用POD 方式部署Thanos集群,由于POD改變后IP發(fā)生變化,導(dǎo)致集群腦裂并崩潰,最后無法查詢歷史數(shù)據(jù)。考慮到Stroe組件比較消耗資源,我們將其轉(zhuǎn)移到物理機(jī)上,Sidecar 和Pormetheus放入POD 當(dāng)中。由于早期的版本性能比較差,我們將版本也進(jìn)行了升級,并啟用壓縮功能。
啟用壓縮功能后:
9月28日至11月07日產(chǎn)生的監(jiān)控?cái)?shù)據(jù)量:
目前集成監(jiān)控場景如下:
Thanos 方案本身對于Prometheus 沒有任何強(qiáng)勢侵入,并增強(qiáng)了Prometheus的短板。最后Thanos 依賴于對象存儲(chǔ)系統(tǒng),這部分的資源盡量要考慮。目前線上包含了約40+套 Openstack,70+ 套的Ceph集群,約10000 +的OSD 節(jié)點(diǎn)數(shù)量,每天約產(chǎn)生約50G 監(jiān)控?cái)?shù)據(jù)。
Thanos 幫忙解決了哪些問題
關(guān)于360技術(shù):360技術(shù)是360技術(shù)團(tuán)隊(duì)打造的技術(shù)分享公眾號(hào),每天推送技術(shù)干貨內(nèi)容,更多技術(shù)信息歡迎關(guān)注“360技術(shù)”微信公眾號(hào)
李夕一
版權(quán)所有 未經(jīng)許可不得轉(zhuǎn)載
增值電信業(yè)務(wù)經(jīng)營許可證備案號(hào):遼ICP備14006349號(hào)
網(wǎng)站介紹 商務(wù)合作 免責(zé)聲明 - html - txt - xml