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