基于度量的開源監(jiān)控項(xiàng)目Prometheus最早推出于2012年,它是CNCF(原生云計(jì)算基金會,Cloud Native Computing Foundation)的成員。Prometheus的動態(tài)配置和查詢語言PromQL支持用戶編寫對告警的復(fù)雜查詢。CloudFlare提供CDN(內(nèi)容分發(fā)網(wǎng)絡(luò),Content Delivery Network)、分布式DNS和DDoS防御服務(wù),這意味著其架構(gòu)已擴(kuò)展到全球范圍。監(jiān)控這樣的架構(gòu)及網(wǎng)絡(luò)無疑是一件復(fù)雜的工作。在演講中,Bostock介紹了Prometheus在其中發(fā)揮的作用。在CloudFlare,前期部署的Nagios的職能已有87%被Prometheus所替代。
CloudFlare提供類似于Anycast所提供的CDN服務(wù)。Anycast DNS使得DNS查詢可以被最接近用戶的服務(wù)器所處理,Anycast HTTP使得內(nèi)容可以從距離用戶最近的服務(wù)提供。作為原始Web站點(diǎn)和用戶之間的中介,CloudFlare還檢查訪問者的流量中是否存在有威脅的模式。它提供了跨150個(gè)國家的116個(gè)數(shù)據(jù)中心,每秒處理500萬次HTTP請求,120萬次DNS請求,占全球因特網(wǎng)請求的10%。每個(gè)入網(wǎng)點(diǎn)(PoP,Point-Of-Presence)提供HTTP、DNS、DDoS防御和鍵值存儲服務(wù)。截至演講時(shí),有188臺運(yùn)行在生產(chǎn)環(huán)境中的Prometheus服務(wù)器需要監(jiān)控。

Prometheus是基于度量的,也就是說它采集時(shí)序度量,并基于度量構(gòu)建其余的特性。它工作于Pull模式下,每臺監(jiān)控服務(wù)器運(yùn)行一個(gè)稱作“exporter”的進(jìn)程,通過HTTP發(fā)布所采集的度量。CloudFlare為每個(gè)服務(wù)域部署了一個(gè)exporter,使用它們采集系統(tǒng)(例如CPU、內(nèi)存、TCP、磁盤等)、網(wǎng)絡(luò)(例如HTTP、Ping等)、本地匹配(錯(cuò)誤信息)和容器/命名空間的度量。其中,exporter使用了Google的開源項(xiàng)目cadvisor采集容器/命名空間的度量。Prometheus并不會永久地保存所有數(shù)據(jù),因?yàn)樗鼈?cè)重于“此時(shí)此地”(here-and-now)的監(jiān)控情況。數(shù)據(jù)不做下采樣,并在CloudFlare配置中保存15天。
在CloudFlare的核心數(shù)據(jù)中心,服務(wù)包括日志訪問、分析業(yè)務(wù),以及使用Marathon、Mesos、Chronos、Docker、Sentry、Ceph(用于存儲)、Kafka、Spark、Elasticsearch和Kibana等技術(shù)棧構(gòu)建的API。Prometheus在每個(gè)PoP通過exporter查詢服務(wù)器和服務(wù)獲取度量。每個(gè)PoP的高可用性是由使用多個(gè)Prometheus服務(wù)提供的。
Prometheus的報(bào)警管理稱為“Alertmanager”。CloudFlare的部署中包括一個(gè)Alermanager,由每個(gè)Prometheus服務(wù)器推送事件,并考慮了配置的高可用性。報(bào)警基于歷史數(shù)據(jù)做測試,確保服務(wù)的正確執(zhí)行的。Bosun等新興監(jiān)控工具也包括類似的特性。為提供更好的報(bào)警服務(wù),其它的一些特性還包括了描述性的名稱、簡單易用性和一些可使接收者立刻采取行動的信息。
CloudFlare團(tuán)隊(duì)使用jiralerts實(shí)現(xiàn)JIRA工單系統(tǒng)與Alertmanager的集成。JIRA可以用戶定制工作流,使得報(bào)警監(jiān)控中可以包括一些監(jiān)控工作流特定的用戶定制狀態(tài)。另一個(gè)稱為alertmanagere2s的工具接收報(bào)警,并將報(bào)警信息集成到Elasticsearch索引中,用于進(jìn)一步的檢索和分析。CloudFlare已為Alertmanger構(gòu)建了自己的儀表盤,稱為“unsee”。
那么Prometheus是如何監(jiān)控自身情況的?這有兩種實(shí)現(xiàn)方法。一種是混合方法,即在同一數(shù)據(jù)中心中,由一個(gè)Prometheus去監(jiān)控另一個(gè)Prometheus。另一種方法是自頂向下的方法,由頂層Prometheus服務(wù)器監(jiān)控位于數(shù)據(jù)中心層面的Prometheus服務(wù)器。
CloudFlare SRE團(tuán)隊(duì)的經(jīng)驗(yàn)是,盡早對環(huán)境和集群等的標(biāo)簽和組身份做標(biāo)準(zhǔn)化;其它一些經(jīng)驗(yàn)是關(guān)于如何創(chuàng)建可視化,以及從同行和利益相關(guān)者生成買入。經(jīng)驗(yàn)指出,團(tuán)隊(duì)的盡早參與將有助于服務(wù)與監(jiān)控系統(tǒng)的更快整合。而報(bào)警本身則需要多次迭代進(jìn)行調(diào)整和改進(jìn),這是一個(gè)開展中的過程。