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