齊活了,Grafana 發(fā)布大規(guī)模持續(xù)性能分析開源數(shù)據(jù)庫 - Phlare
Grafana Phlare 是一個用于聚合 continuous profiling(持續(xù)分析)數(shù)據(jù)的開源軟件項目。Grafana Phlare 可以和 Grafana 完全集成,允許你與其他可觀察信號相關(guān)聯(lián)。
什么是 continuous profiling?
這個概念很有價值:Profiling 可以幫助你了解程序的資源使用情況,進而幫助你優(yōu)化其性能和成本。然而,向分布式云原生架構(gòu)的轉(zhuǎn)變使這變得更加復(fù)雜,從而產(chǎn)生了對持續(xù)分析的需求,其中有關(guān)資源使用情況的信息會在整個計算基礎(chǔ)設(shè)施中定期自動收集,然后壓縮并存儲為時間序列數(shù)據(jù),這使你可以可視化隨時間的變化并放大與感興趣的時間段相匹配的 profile 文件 — 例如,CPU 時間在其最高利用率期間所花費的時間。
就其帶來的價值而言,持續(xù)分析被稱為可觀測的第四大支柱(在metrics、logging 和 tracing 之后)。
在 Grafana Labs,我們開始研究使用持續(xù)分析來了解我們用于支持 Grafana Cloud 的軟件的性能,包括 Grafana Loki、Grafana Mimir、Grafana Tempo 和 Grafana。例如,如果我們對 Mimir 中的慢查詢進行分頁,我們可能會使用分析來了解該查詢在 Mimir 代碼庫中的哪個位置花費的時間最多。如果我們看到 Grafana 由于內(nèi)存不足錯誤而反復(fù)崩潰,我們將查看內(nèi)存配置文件以查看崩潰前哪個對象消耗的內(nèi)存最多。
雖然有用于存儲和查詢持續(xù)分析數(shù)據(jù)的開源項目,但經(jīng)過一些調(diào)查,我們努力找到一個滿足支持 Grafana Labs 所需級別的持續(xù)分析所需的可擴展性、可靠性和性能要求的項目。在全公司范圍的黑客馬拉松期間,一組工程師領(lǐng)導(dǎo)了該項目,該項目展示了與指標(biāo)、日志和追蹤連接時分析數(shù)據(jù)的價值,進一步增加了我們在所有環(huán)境中推出連續(xù)分析的渴望。
因此,我們決定著手創(chuàng)建一個用于持續(xù)分析遙測的數(shù)據(jù)庫,基于使我們的其他開源可觀察性后端 Loki、Tempo 和 Mimir 如此成功的設(shè)計原則:水平可擴展架構(gòu)和對象存儲的使用。
核心功能
Grafana Phlare 提供水平可擴展、高可用性、長期存儲和分析數(shù)據(jù)查詢。就像 Prometheus 一樣,只需一個二進制文件即可輕松安裝,無需其他依賴項。因為 Phlare 使用對象存儲,你可以存儲你需要的所有歷史記錄,而不會花很多錢。其原生多租戶和隔離功能集可以為多個獨立團隊或業(yè)務(wù)部門運行一個數(shù)據(jù)庫。Grafana Phlare 的核心功能如下所示:
- 易于安裝:使用其單體模式,只需一個二進制文件即可啟動并運行 Grafana Phlare,無需其他依賴項。在 Kubernetes 上,可以使用 Helm Chart 方式進行不同模式的部署。
- 水平可擴展性:可以在多臺機器上運行 Grafana Phlare,可以輕松擴展數(shù)據(jù)庫以處理工作負載生成的分析量。
- 高可用性:Grafana Phlare 復(fù)制傳入的 profiles 文件,確保在機器發(fā)生故障時不會丟失數(shù)據(jù)。這意味著你可以在不中斷 profiles 文件攝取和分析的情況下進行 rollout。
- 廉價、耐用的 profile 文件存儲:Grafana Phlare 使用對象存儲進行長期數(shù)據(jù)存儲,使其能夠利用這種無處不在、經(jīng)濟高效、高耐用性的技術(shù)。它兼容多種對象存儲實現(xiàn),包括 AWS S3、谷歌云存儲、Azure Blob 存儲、OpenStack Swift,以及任何與 S3 兼容的對象存儲。
- 原生多租戶:Grafana Phlare 的多租戶架構(gòu)使你能夠?qū)?shù)據(jù)和查詢與獨立的團隊或業(yè)務(wù)部門隔離開來,從而使這些組可以共享同一個數(shù)據(jù)庫。
架構(gòu)
Grafana Phlare 具有基于微服務(wù)的架構(gòu),該系統(tǒng)具有多個可水平擴展的微服務(wù),可以單獨和并行運行。Grafana Phlare 微服務(wù)稱為組件。Grafana Phlare 的設(shè)計將所有組件的代碼編譯為單個二進制文件。-target 參數(shù)控制單個二進制文件將作為哪些組件運行,這點和 Grafana Loki 的模式是一樣的。對于想快速體驗的用戶來說,Grafana Phlare 同樣也可以在單體模式下運行,所有組件在一個進程中同時運行。
Grafana Phlare 的大多數(shù)組件是無狀態(tài)的,不需要在進程重新啟動之間保留任何數(shù)據(jù)。一些組件是有狀態(tài)的,并依靠不容易丟失數(shù)據(jù)的存儲來防止進程重啟之間的數(shù)據(jù)丟失。Grafana Phlare 包括一組相互作用形成集群的組件:Distributor?、Ingester?、Querier。
單體模式
單體模式在單個進程中運行所有必需的組件,是默認的操作模式,你可以通過指定 -target=all? 參數(shù)來設(shè)置,單體模式是部署 Grafana Phlare 的最簡單方法,如果你想快速入門或想在開發(fā)環(huán)境中使用 Grafana Phlare,這將非常有用。要查看在 -target? 設(shè)置為 all 時運行的組件列表,請使用 -modules 標(biāo)志運行 Grafana Phlare:
微服務(wù)模式
在微服務(wù)模式下,組件部署在不同的進程中。擴展是按組件進行的,這允許在擴展和更細化的故障域方面具有更大的靈活性。微服務(wù)模式是生產(chǎn)部署的首選方法,但也是最復(fù)雜的。
在微服務(wù)模式下,調(diào)用每個 Grafana Phlare 進程,并將其 -target 參數(shù)設(shè)置為特定的 Grafana Phlare 組件(例如,-target=ingester 或 -target=distributor)。要獲得一個正常工作的 Grafana Phlare 實例,必須部署每個必需的組件。如果你想使用微服務(wù)模式部署 Grafana Phlare,那么非常建議使用 Kubernetes。
部署
我們這里還是以 Helm Chart 的方式部署在 Kubernetes 集群中,當(dāng)然前提是有一個可用的 Kubernetes 集群,并且配置好了 kubectl 和 helm。
首先我們創(chuàng)建一個名為 phlare-test 的命名空間,將整個應(yīng)用都部署在該命名空間之內(nèi):
然后添加 Phlare 的 Helm Chart 倉庫:
然后我們就可以使用 Helm 來進行安裝了。
如果你想以單體默認進行安裝,只需要執(zhí)行下面的命令即可一鍵安裝:
如果想以微服務(wù)模式安裝 Grafana Phlare,可以首先獲取官方提供的默認 values 配置文件:
我們需要使用上面的 values 文件來安裝 Grafana Phlare,也可以根據(jù)自己的集群實際情況調(diào)整配置,比如 ingester 配置的資源請求的 memory: 6Gi,cpu: 1,我這里集群資源不足,可以將其降低一些,將副本數(shù)都暫時設(shè)置成1(僅供測試),不然沒辦法調(diào)度成功。
然后使用下面的命令即可開始安裝:
部署完成后查看 Pod 狀態(tài)是否正常:
等到所有 Pod 的狀態(tài)變?yōu)?Running 或 Completed 表示部署完成了。
使用
然后接下來我們可以配置 Grafana 來查詢 profiles 數(shù)據(jù),這里我們在安裝 Phlare 的同一個 Kubernetes 集群中安裝 Grafana,同樣使用下面的命令一鍵安裝即可:
部署完成后整個 phlare-test 命名空間的 Pod 列表如下所示:
我們可以使用下面的命令在本地轉(zhuǎn)發(fā) Grafana 服務(wù):
然后在瀏覽器中打開 http://localhost:3000 即可訪問 Grafana 服務(wù)了。
在頁面左側(cè)點擊配置 -> 數(shù)據(jù)源來添加 profiles 的數(shù)據(jù)源,選擇 phlare 類型的數(shù)據(jù)源。
設(shè)置數(shù)據(jù)源的 URL 為 http://phlare-querier.phlare-test.svc.cluster.local.:4100/。
點擊 Save & Test 即可保存。數(shù)據(jù)源添加完成后應(yīng)該能夠在 Grafana Explore 中查詢到 profiles 文件,使用方法和 Loki 以及 Prometheus 幾乎一樣,如下所示我們可以查詢 Grafana 應(yīng)用的 CPU 的情況。
Phlare 與 Grafana 原生集成,使你可以將 profiles 數(shù)據(jù)與 metrics、logging 和 tracing 一起可視化,并全面了解整個堆棧。我們還在 Grafana 中添加了一個火焰圖面板,它允許你構(gòu)建儀表板,在 Grafana 中可視化的數(shù)百個不同數(shù)據(jù)源的數(shù)據(jù)旁邊顯示分析數(shù)據(jù)。
Phare 的 Helm Chart 使用默認配置,只要它們有正確的注解,它的代理就會抓取 Pod,該功能使用可能與 Prometheus 或 Grafna Agent 配置相似的 relabel_config 和 kubernetes_sd_config。
為了讓 Phlare 抓取 pod,你必須在 pod 中添加以下注解:
其中 phlare.grafana.com/port 應(yīng)該設(shè)置為你的 pod 為 /debug/pprof/ 端點提供服務(wù)的端口。請注意,phlare.grafana.io/scrape 和 phlare.grafana.io/port 的值必須用雙引號括起來,以確保它表示為字符串。
上面我們在安裝 Grafana 的時候就配置了這兩個注解,所以我們就可以使用 Phlare 來不斷的抓取 Grafana 應(yīng)用的 profiles 數(shù)據(jù)了,這也是為什么上面我們可以去過濾 Grafana 的 profiles 數(shù)據(jù)的原因。
參考鏈接
- https://github.com/grafana/phlare。
- https://grafana.com/blog/2022/11/02/announcing-grafana-phlare-oss-continuous-profiling-database/。