Prometheus 系列開篇:為什么要學(xué) Prometheus ?
首發(fā)于公眾號@陳樹義,用最簡單的語言,分享我的技術(shù)見解。
第一次接觸 Prometheus 是在去年,我工作了六年的時間點上。但現(xiàn)在看來,工作六年才知道 Prometheus 是有點晚了,因為 Prometheus 確實比較重要。個人感覺 Prometheus 在你 3-5 年之時就應(yīng)該了解,并且應(yīng)該掌握關(guān)于它的一整套知識,最終你應(yīng)該掌握:如何從零去搭建一套業(yè)務(wù)監(jiān)控系統(tǒng)!
說到 Prometheus,大多數(shù)人可能不太清楚它是做什么的。即使知道它是做監(jiān)控的,也不明白為什么要做監(jiān)控。這其中涉及到許多原因,我想主要有下面兩點原因。
第一,全局觀不足。 許多開發(fā)同學(xué)長期在一線開發(fā),局限于自己開發(fā)的需求上,對整個系統(tǒng)不了解,對整個系統(tǒng)業(yè)務(wù)不了解。只有當(dāng)你做了 leader 之后,你才會更關(guān)注系統(tǒng)的整體情況。而如果你當(dāng)了 leader,你會發(fā)現(xiàn)業(yè)務(wù)監(jiān)控系統(tǒng)是多么重要!(畢竟,你也不想半夜被電話吵醒,睡眼惺忪地打開電腦解決問題~)
第二,工作經(jīng)驗欠缺。 剛剛工作一兩年的同學(xué),對于 Java 整個知識體系還學(xué)得不夠全面。而 Prometheus 的監(jiān)控知識更多屬于進階的知識,自然會被排到更后面的位置。
除了前面說到的這兩個主要原因,其實也還有一些其他原因,例如:公司技術(shù)體系問題等等。
言歸正傳,那 Prometheus 到底是做什么的,為什么要學(xué)習(xí) Prometheus 呢?
什么是 Prometheus?
Prometheus(普羅米修斯)是古希臘的一個神明,名字的意思是「先見之明」。從它的名字可以看出,Prometheus 是做「先見之明」的監(jiān)控告警用途。維基百科簡單寫了它的作用:Prometheus is a free software application used for event monitoring and alerting(Prometheus 是用來監(jiān)控、報警的免費軟件)。
Prometheus 官網(wǎng)則是用「From metrics to insight」(用指標(biāo)洞察系統(tǒng)的意思)描述了 Prometheus 的用途。
看到這里我們大概知道 Prometheus 其實就是一個數(shù)據(jù)監(jiān)控解決方案,它能幫你簡單快速地搭建起一套可視化的監(jiān)控系統(tǒng)。 但這么說還是有點抽象,下面我舉幾個簡單的例子,幫助大家理解 Prometheus 究竟能做什么?
對于運維人員來說,他們需要監(jiān)控機器的 CPU、內(nèi)存、硬盤的使用情況,以此來保證運行在機器上的應(yīng)用的穩(wěn)定性。
對于研發(fā)人員來說,他們關(guān)注某個異常指標(biāo)的變化情況,從而來保證業(yè)務(wù)的穩(wěn)定運行。
對于產(chǎn)品或運營來說,他們更關(guān)心產(chǎn)品層面的事情,例如:某個活動參加人數(shù)的增長情況,活動積分的發(fā)放情況。
對于上面說到的這些功能,Prometheus 都能夠?qū)崿F(xiàn)。Prometheus 能根據(jù)這些收集的數(shù)據(jù)實現(xiàn)告警功能。
例如:運維希望在 CPU 達到 80% 的時候給值班的運維人員發(fā)送郵件,產(chǎn)品希望活動積分發(fā)放數(shù)量超過 10 萬的時候發(fā)送告警郵件。這些都可以通過 Prometheus 實現(xiàn)。
除了數(shù)據(jù)收集、告警功能之外,Prometheus 還有很多強大的功能,例如:強大的 ProQL 查詢、許多客戶端庫等。
因為 Prometheus 功能強大、構(gòu)建成本低,所以現(xiàn)在越來越多的公司都使用 Prometheus 作為其數(shù)據(jù)監(jiān)控的解決方案。
為什么要學(xué) Prometheus?
對于一直在一線開發(fā)的同學(xué)而言,你可能只需要把自己的需求做好、沒有 bug、順利上線,那么你的任務(wù)就完成了。但是如果你是一個 leader,那么你是對整個業(yè)務(wù)系統(tǒng)負(fù)責(zé),這個業(yè)務(wù)系統(tǒng)出了什么問題,都是你的責(zé)任。這個時候,你需要時刻關(guān)注這個系統(tǒng)是否正常運行。
對于流量不是很大的系統(tǒng)來說,出現(xiàn)幾分鐘的故障可能造成不了多少損失。但是對于像淘寶、美團、字節(jié)跳動這樣的巨無霸來說,宕機 1 分鐘損失的金額可能就是幾百萬!
所以弄清楚此時此刻系統(tǒng)的運行是否正常?各項業(yè)務(wù)指標(biāo)是否超過閾值?這些問題是每個經(jīng)驗豐富的研發(fā)人員所需要關(guān)注的事情!
那么如何監(jiān)控你的系統(tǒng)?如何得知系統(tǒng)目前是正常還是異常?甚至如何預(yù)知未來一段時間系統(tǒng)可能出問題?Prometheus 正是這么一套數(shù)據(jù)監(jiān)控解決方案。它能讓你隨時掌控系統(tǒng)的運行狀態(tài),快速定位出現(xiàn)問題的位置,快速排除故障。
只要按照 Prometheus 的方式來做,按部就班地學(xué)習(xí)和部署,我們就可以監(jiān)控機器的 CPU、內(nèi)存等資源的使用情況、Java 應(yīng)用的運行情況以及業(yè)務(wù)各項指標(biāo)的實時數(shù)據(jù)。
當(dāng)然有一些公司會自己使用 Kafaka 收集監(jiān)控數(shù)據(jù),并且存儲在 Hive 中,最終通過頁面聚合數(shù)據(jù),同樣能夠?qū)崿F(xiàn)數(shù)據(jù)監(jiān)控。但是這種解決方案需要開發(fā)人員掌握 Hive + Hadoop 等大數(shù)據(jù)框架,并且在前端展示上比較局限。
而通過 Prometheus 則可以直接部署使用,并且其與 Grafana 配套使用可以呈現(xiàn)出非常多樣化的圖表配置。對于中小規(guī)模的團隊來說,可以極大地減少成本,加快研發(fā)速度。
而對于個人來講,掌握 Prometheus 可以增加你當(dāng) leader 的競爭力。 畢竟如果一個研發(fā)對自己的系統(tǒng)運行狀況都不了解,那么他怎么做 leader,怎么帶領(lǐng)一個團隊往前沖呢?
總結(jié)
對于工作多年的研發(fā)人員,對自己負(fù)責(zé)的系統(tǒng)必須了然于胸。而要做到了然于胸,單靠一味的自信是不夠的,必須借助一套功能強大的業(yè)務(wù)監(jiān)控系統(tǒng)。Prometheus 作為這其中的翹楚,憑借其完善的功能、海量數(shù)據(jù)支持,可以讓我們較低成本地實現(xiàn)業(yè)務(wù)監(jiān)控。
參考資料
Prometheus - Monitoring system & time series database
普羅米修斯 - 維基百科,自由的百科全書
本文轉(zhuǎn)載自微信公眾號「陳樹義」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系陳樹義公眾號。