DevOps工程師或SRE工程師,可能都知道Prometheus普羅米修斯。Prometheus于2012年由SoundCloud創(chuàng)建,目前已經(jīng)已發(fā)展為最熱門的分布式監(jiān)控系統(tǒng)。Prometheus完全開源的,被很多云廠商(架構(gòu))內(nèi)置,在這些廠商(架構(gòu))中,可以簡單部署Prometheus,用來監(jiān)控整個云基礎(chǔ)架構(gòu)設(shè)施。比如DigitalOcean或Docker都是普羅米修斯作為基礎(chǔ)監(jiān)控。 希臘神話中,普羅米修斯是最具智慧的神明之一,是泰坦巨神后代,其名字意思為'先見之明',那么以該名字命名的監(jiān)控系統(tǒng)究竟怎么樣呢?今天蟲蟲給大家講講這個以神之名命名的監(jiān)控系統(tǒng)。 普羅米修斯(Prometheus)介紹Prometheus是一個時間序列數(shù)據(jù)庫。但是,它不僅僅是一個時間序列數(shù)據(jù)庫。 它涵蓋了可以綁定的整個生態(tài)系統(tǒng)工具集及其功能。 Prometheus主要用于對基礎(chǔ)設(shè)施的監(jiān)控。包括服務(wù)器,數(shù)據(jù)庫,VPS,幾乎所有東西都可以通過Prometheus進(jìn)行監(jiān)控。Prometheus希望通過對Prometheus配置中定義的某些端點執(zhí)行的HTTP調(diào)用來檢索度量標(biāo)準(zhǔn)。 例如,如果我們以localhost:3000的Web應(yīng)用程序為例,你的應(yīng)用程序?qū)⒃谔囟║RL(例如localhost:3000/metrics)中將指標(biāo)公開為純文本。以該URL為起點,,在給定的有效期間隔期間,Prometheus將從該目標(biāo)中提取數(shù)據(jù)。 工作原理?如前所述,Prometheus由各種不同的組件組成。其監(jiān)控指標(biāo)可以從系統(tǒng)中提取到,可以通過不同的方式做到: 通過應(yīng)用程序給定監(jiān)控項,對給定的公開URL上Prometheus兼容的指標(biāo)。Prometheus將其定義為目標(biāo)并加入監(jiān)控系統(tǒng)。 通過使用云廠商內(nèi)置Prometheus程序,會定義好整個監(jiān)控項和監(jiān)控工具集擁。例如,可以 Linux機(jī)器監(jiān)控模版(節(jié)點導(dǎo)出器),數(shù)據(jù)庫的模版(SQL導(dǎo)出器或MongoDB導(dǎo)出器),以及HTTP代理或者負(fù)載程序的模版(例如HAProxy導(dǎo)出器)等這些模版直接就可以加入監(jiān)控并使用。 通過使用Pushgateway:應(yīng)用程序或作業(yè)不會直接公開指標(biāo)。某些應(yīng)用程序要么沒有合適的監(jiān)控模版(例如批處理作業(yè)),對他們選擇不能直接通過應(yīng)用程序公開這些指標(biāo)。如果我們忽略您可能使用Pushgateway的極少數(shù)情況,Prometheus是一個基于主動請求pull的監(jiān)控系統(tǒng)。 推方式和拉方式Prometheus與其他時間序列數(shù)據(jù)庫之間存在明顯差異:Prometheus主動篩選目標(biāo),以便從中檢索指標(biāo)。這與InfluxDB非常不同,InfluxDB是需要直接推送數(shù)據(jù)給它。 基于推和基于拉方式各有其優(yōu)劣之處。Prometheus使用主動拉方式主要的基于以下考慮: 實現(xiàn)集中控制:如果Prometheus向其目標(biāo)發(fā)起查詢,則整個配置在Prometheus服務(wù)器端完成,而不是在各個目標(biāo)上完成。Prometheus決定取值,以及取值的的頻率。 使用基于推的系統(tǒng),可能會導(dǎo)致向服務(wù)器發(fā)送過多數(shù)據(jù)的風(fēng)險,這時會使其服務(wù)器崩潰?;诶南到y(tǒng)能夠?qū)崿F(xiàn)速率控制,具有多級過期配置的靈活性,因此可以針對不同目標(biāo)實現(xiàn)多種速率。 存儲匯總的指標(biāo) Prometheus不是基于事件的系統(tǒng),這與其他時間序列數(shù)據(jù)庫不同。Prometheus并非旨在及時捕獲單個和時間事件(例如服務(wù)中斷),但它旨在收集有關(guān)的服務(wù)的預(yù)先匯總的指標(biāo)。具體而言,它不會從Web服務(wù)發(fā)送404錯誤消息以及錯誤的消息的具體內(nèi)容,而是對這些消息做處理、聚合過的指標(biāo)。這與其他在收集'原始消息'的時間序列數(shù)據(jù)庫之間的基本差異 生態(tài)系統(tǒng)Prometheus的主要功能仍然是時間序列數(shù)據(jù)庫。但是,在使用時間序列數(shù)據(jù)庫時,對它們實現(xiàn)了可視化、數(shù)據(jù)分析并通過自定義方式進(jìn)行告警。 Prometheus生態(tài)系統(tǒng)有功能豐富工具集: Alertmanager:Prometheus通過配置文件中定義的自定義規(guī)則將告警信息推送到Alertmanager。Alertmanager可以將其導(dǎo)出到多個端點,例如Pagerduty或Slack等。 數(shù)據(jù)可視化:與Grafana、Kibana等類似,可以直接在Web UI中可視化時間序列數(shù)據(jù)。輕松過濾查看了不通監(jiān)控目標(biāo)的信息。 服務(wù)發(fā)現(xiàn):Prometheus可以動態(tài)發(fā)現(xiàn)監(jiān)控目標(biāo),并根據(jù)需要自動廢棄目標(biāo)。這在云架構(gòu)中使用動態(tài)變更地址的容器時,尤為方便。 普羅米修斯技術(shù)原理和構(gòu)成關(guān)鍵值數(shù)據(jù)模型在開始使用Prometheus工具之前,了解數(shù)據(jù)模型非常重要。Prometheus使用鍵值對。鍵描述了測量值時將實際測量值存儲為數(shù)字的值。 注意:Prometheus并不會存儲原始信息,如日志文本,它存儲的是隨時間匯總的指標(biāo)。 一般來說鍵也就監(jiān)控度量。比如CPU使用百分比或內(nèi)存使用量等。但是,如果想要獲得有關(guān)指標(biāo)的更多詳細(xì)信息,該怎么辦?比如服務(wù)器CPU有四個核心,我們要想給它們分別設(shè)置指標(biāo)怎么做?對此,Prometheus有一個標(biāo)簽的概念。標(biāo)簽旨在通過向其添加其他字段來為指標(biāo)提供更詳細(xì)信息。你不需要簡單地描述CPU速率,你可以指定位于某個IP的核心CPU的CPU速率。也能通過標(biāo)簽過濾指標(biāo)并準(zhǔn)確檢索查找的內(nèi)容。 度量類型Prometheus的監(jiān)控指標(biāo)有四種基本的類型來描述: 計數(shù)器Counter 計數(shù)器可能是我們可以使用的最簡單的度量標(biāo)準(zhǔn)形式。就想它字面意思一樣,計數(shù)器是隨著時間的增長的計算元素。 比如,要計算服務(wù)器上的HTTP錯誤數(shù)或網(wǎng)站上的訪問次數(shù),這時候就使用計數(shù)器。 計數(shù)器的值只能增加或重置為0。計數(shù)器特別適合計算某個時段上某個事件的發(fā)生次數(shù),即指標(biāo)隨時間演變的速率。 Gauges Gauges用于處理可能隨時間減少的值。比如溫度本華,內(nèi)存變化等。Gauge類型的值可以上升和下降,可以是正值或負(fù)值。 如果系統(tǒng)每5秒發(fā)送一次指標(biāo),Prometheus每15秒抓取一次目標(biāo),那么這期間可能會丟失一些指標(biāo)。如果對這些指分析計算,則結(jié)果的準(zhǔn)確性會越來越低。 而使用計數(shù)器,每個值都會被匯總計算。 直方圖Histogram 直方圖是一種更復(fù)雜的度量標(biāo)準(zhǔn)類型。它為我們的指標(biāo)提供了額外信息,例如觀察值的總和及其數(shù)量,常用于跟蹤事件發(fā)生的規(guī)模。其值在具有可配置上限的存儲對象中聚合。使用直方圖可以用來: 計算平均值:因為它們表示值的總和除以記錄的值的數(shù)量。 計算值的小數(shù)測量:這是一個非常強(qiáng)大的工具,可以讓我們知道給定的集合中有多少值遵循給定的標(biāo)準(zhǔn)。在用于監(jiān)控比例或建立質(zhì)量指標(biāo)時,這非常有用。 比如,為了監(jiān)控性能指標(biāo),我們希望得到在有20%的服務(wù)器請求響應(yīng)時間超過300毫秒發(fā)送警告。對于涉及比例的指標(biāo)就可以考慮使用直方圖。 摘要Summary 摘要是對直方圖的擴(kuò)展。除了提供觀察的總和和計數(shù)之外,它們還提供滑動窗口上的分位數(shù)度量。分位數(shù)是將概率密度劃分為相等概率范圍的方法。 對比直方圖: 直方圖隨時間匯總值,給出總和和計數(shù)函數(shù),使得易于查看給定度量的變化趨勢。 而摘要則給出了滑動窗口上的分位數(shù)(即隨時間不斷變化)。 這對于獲得代表隨時間記錄的值的95%的值尤其方便。 實例計算隨著分布式架構(gòu)的不會發(fā)展完善和云解決方案的普及,現(xiàn)在的架構(gòu)不再是孤零零幾臺配置很高的IBM小機(jī)就可以搞定一起的時代了。 分布式的服務(wù)器復(fù)制和分發(fā)成了日常架構(gòu)的必備組件。我們舉一個經(jīng)典的Web架構(gòu),該架構(gòu)由2個HAProxy代理服務(wù)器,在3個后端Web服務(wù)器。在該實例中,我們要監(jiān)視Web服務(wù)器返回的HTTP錯誤的數(shù)量。 使用Prometheus語言,單個Web服務(wù)器單元稱為實例。該任務(wù)是計算所有實例的HTTP錯誤數(shù)量。 PromQL如果使用過基于InfluxDB的數(shù)據(jù)庫,你可能會熟悉InfluxQL?;蛘呤褂肨imescaleDB過的SQL語句。Prometheus也內(nèi)置了自己的SQL查詢語言,用于便捷和熟悉的方式從Prometheus查詢和檢索數(shù)據(jù),這個內(nèi)置的語言就是PromQL。 我們前面說過,Prometheus數(shù)據(jù)是用鍵值對表示的。PromQL也用相同的語法查詢和返回結(jié)果集。 使用Prometheus和PromQL,會處理兩種向量: 即時向量:表示在最近時間戳中跟蹤的指標(biāo)。 時間范圍向量:用于查看度量隨時間的演變,可以使用自定義時間范圍查詢Prometheus。結(jié)果是一個向量聚合所選期間記錄的值。 PromQL API公開了一組方便查詢數(shù)據(jù)操作的函數(shù)。用它可以實現(xiàn)排序,數(shù)學(xué)函計算(如導(dǎo)數(shù)或指數(shù)函數(shù)),統(tǒng)計預(yù)測計算(如Holt Winters函數(shù))等。 Instrumentation儀表化儀表化是Prometheus的一個重要組成部分。在從應(yīng)用程序檢索數(shù)據(jù)之前,必須要儀表化它們。Prometheus術(shù)語中的儀表化表示將客戶端類庫添加到應(yīng)用程序,以便它們向Prometheus吐出指標(biāo)??梢詫Υ蠖鄶?shù)主流的編程語言(比如Python,Java,Ruby,Go甚至Node或C#應(yīng)用程序)進(jìn)行儀表化。 在儀表化操作時,需要創(chuàng)建內(nèi)存對象(如儀表或計數(shù)器),可以在運行中增加或減少。然后選擇指標(biāo)公開的位置。Prometheus將從該位置獲取并存儲到時間序列數(shù)據(jù)庫。 Exporters模版對于自定義應(yīng)用程序,儀表化非常方便,它允許自定義公開的指標(biāo)以及其隨時間的變化方式。 對于一些廣泛使用的應(yīng)用程序,服務(wù)器或數(shù)據(jù)庫,Prometheus提供專門的應(yīng)用模版,可以使用它們來監(jiān)控目標(biāo)。 這些模版很多都用Docker鏡像,可以輕松配置以監(jiān)控目標(biāo)。他們會預(yù)設(shè)常用的的指標(biāo)和面板,可以幾分鐘內(nèi)就完成監(jiān)控配置。 常見的Exporters模版有: 數(shù)據(jù)庫模版:用于MongoDB數(shù)據(jù)庫,SQL服務(wù)器和MySQL服務(wù)器的配置。 HTTP模版:用于HAProxy,Apache或NGINX等web服務(wù)器和代理的配置。 Unix模版:用來使用構(gòu)建的節(jié)點導(dǎo)出程序監(jiān)視系統(tǒng)性能,可以實現(xiàn)完整的系統(tǒng)指標(biāo)的監(jiān)控。 告警在處理時間序列數(shù)據(jù)庫時,我們希望對數(shù)據(jù)進(jìn)行處理,并對結(jié)果給出反饋,而這部分工作有告警來實現(xiàn)。 告警在Grafana中非常常見,Prometheus也通過Alertmanager實現(xiàn)完成的告警系統(tǒng)。Alertmanager是一個獨立的工具,可以綁定到Prometheus并運行自定義Alertmanager。告警通過配置文件定義,定義有一組指標(biāo)定義規(guī)則組成,如果數(shù)據(jù)命中這些規(guī)則,則會觸發(fā)告警并將其發(fā)送到預(yù)定義的目標(biāo)。與Grafana類似,Prometheus的告警,可以通過email,Slack webhooks,PagerDuty和自定義HTTP目標(biāo)等。 普羅米修斯用例我們最后再說下Prometheus的用例,可以使用該系統(tǒng)的各行各業(yè)。 DevOps隨著為系統(tǒng),數(shù)據(jù)庫和服務(wù)器構(gòu)建,Prometheus的主要目標(biāo)顯然是針對DevOps行業(yè)。在該領(lǐng)域有很多的供應(yīng)商和眾多的解決方案。Prometheus無疑是一個理想的方案。在云基礎(chǔ)架構(gòu)下Prometheus的實例啟動并運行的非常簡便,還可以根據(jù)需要靈活的裝配所需的部件。這它成為器和分布式體系結(jié)構(gòu)的嚴(yán)重依賴容的工具棧的理想解決方案。在實例的創(chuàng)建速度與銷毀速度一樣快的容器的世界中,服務(wù)發(fā)現(xiàn)是每個DevOps棧必須要具備的。 醫(yī)療保健時下監(jiān)控解決方案不僅適用于IT專業(yè)人員。它們還用于支持大型行業(yè),為醫(yī)療保健行業(yè)提供彈性和可擴(kuò)展的架構(gòu)。隨著需求的增長越來越多,部署的IT架構(gòu)必須滿足這種需求。如果沒有可靠的方法來監(jiān)控整個基礎(chǔ)架構(gòu),可能會面臨服務(wù)大量中斷的風(fēng)險,而Prometheus可以為其保駕護(hù)航。opensource網(wǎng)站上提供了很這樣的實例。 金融服務(wù)業(yè)InfoQ會議中有了討論了將Prometheus用于金融機(jī)構(gòu)方案。Jamie Christian和Alan Strader介紹了他們?nèi)绾问褂肞rometheus監(jiān)控Northern Trust的基礎(chǔ)設(shè)施。 總結(jié)本文我們講了分布式監(jiān)控系統(tǒng)Prometheus的介紹,原理和用例,希望我們能熟悉這個工具,并在以后的架構(gòu)和實踐中使用它解決系統(tǒng)和應(yīng)用監(jiān)控的問題。 |
|