在接下的篇章中,我們將繼續探討 Grafana 團隊在各個監控領域所主導的開源專案,除了專注在可觀測性三本柱的各個領域之外,扮演將每個監控數據的收集任務輕鬆彈性組織起來的角色,顯得格外重要,想想看那些 Logs、Metrics、Traces 等監控數據,各有在其領域上的協議及格式,更別提我們的運行環境可能在 Kubernetes、Linux、Windows、Edge devises 上,很少有一套工具可以完全包辦一個監控領域上的數據收集工作,更何況是涵蓋到所有監控領域並兼容各種數據格式及客戶端應用。而身為監控領域的開源領頭團隊 Grafana,藉由在 Grafana Cloud 成熟且被大規模驗證過的心血,提出試圖統一所有領域監控數據傳遞者的全面解決方案「Graana Agent」,就讓我們來瞧瞧他的厲害之處吧!
根據官方對 Grafana Agent 的描述,它是一個內建多功能的開源遙測收集器,專為收集指標、日誌和追踪而設。Grafana Agent 使用經過實戰驗證的代碼,完全兼容 Prometheus、Loki 和 Tempo 的遙測技術堆棧。Grafana Agent 可以將指標轉發到任何與 Prometheus 兼容的端點,將日誌轉發到任何與 Loki 兼容的端點,並將追踪轉發到任何與 OpenTelemetry 兼容的端點。
Grafana Agent 計劃是在 Grafana Labs 啟動的,並在 2020 年 3 月正式宣布。Grafana Agent 採用 Apache 2.0 許可協議進行發布。
從簡單的幾句敘述中,我們足以看出 Grafana Agent 的長處及目標:「通過對指標、日誌和追踪使用相同的服務發現規則,簡化遙測數據收集」,原本需要各自設定的收集器服務,現在通通只需要一套就可以通通搞定,並且可以兼容擴充,發揮更大的上限。
Grafana Agent 在 Prometheus 可以藉由本身輕量級的代理模式進行對目標指標的抓取,並遠端寫入對應的後端儲存,這種代理模式同時解決了 Prometheus Server 上的幾個問題:
有些眼尖的同學看到這裡,心中一定都不約而同起了一個疑問:「怎麼感覺跟 Prometheus Agent 有八十幾趴相似?」 。沒錯,事實上 Grafana 團隊與 Prometheus 社群的開發一直離不開彼此,並且互相影響著對方。
Prometheus Agent 的誕生和 Grafana Agent 有著密不可分的關聯。在 2020 年,Grafana 團隊推出了名為 Grafana Agent 的工具,它是 Prometheus 專案分支出來的一個簡化版本,只專注於遠程寫入指標,而不涉及 TSDB,並且開始大規模的實施在 Grafana Cloud 上,得到正面的肯定。
這個設計受到了許多關注和興趣。為了滿足社區的需求,Prometheus 團隊在同年的 12 月舉行了一次開發者峰會,決定將 Grafana Agent 的功能整合到官方的 Prometheus 專案中。經過數月的討論和開發,2021 年 10 月,該功能正式被合併到 Prometheus v2.32 中。簡而言之,Grafana Agent 的設計和概念為 Prometheus 帶來了新的啟示,並促使它在其主要版本中加入了 Agent 概念的功能,這被認為是 CNCF 生態系中的一個遊戲規則改變者。
Grafana Agent 是一款不受供應商限制的、內建功能完整的遙測數據收集器。它的設計旨在靈活、高效能,並且與多種生態系統如 Prometheus 和 OpenTelemetry 相容。
得益於開源社群的活躍,逐漸演變出目前的三種 mode:
我們不需要只選用一種模式,對 Grafana Agent 我們可以依照實際需求混合使用。
到目前為止 Grafana Agent 共同存在著三種 mode,其中 Static mode Kubernetes operator 還在 Beta。
Flow模式被認為是 Grafana Agent 項目的未來。最終,Static mode 和 Static mode Kubernetes Operator 的所有功能都將添加到 Flow 模式中。此目標目前還處於早期階段,Loki、Tempo 等等的Helm 安裝包項目,目前還是預設是用 Static mode Kubernetes operator。
因為目前 Grafana Agent 功能已大致成形,但根據社群意願及判斷未來趨勢,還需要進行大量的整合作業,而官方根據目前這三種模式的應用場景給我們了選擇建議:
使用 Grafana Agent 前後我們可以很容易的對照:
Before | After | |
---|---|---|
Prometheus(Metrics) | Promethus(server/agent) … | Grafana Agent |
Grafana Mimir (Metrics) | Promethus(server/agent) … | Grafana Agent |
Grafana Loki(Logs) | filebeat / fluentd / promtail … | Grafana Agent |
Elastricsearch(Logs) | filebeat / fluentd / promtail … | Grafana Agent |
OpenTelemetry(Traces) | otel(collector/agent) / jaeger(collector/agent) / zipkin … | Grafana Agent |
Grafana Tempo(Traces) | otel(collector/agent) / jaeger(collector/agent) / zipkin … | Grafana Agent |
在了解了 Grafana Agent 的強大之處後,我們可以把它理解為所有遙測資料的收集者,所有我們以前用來傳遞、收集監控資料的任何媒介,都可以試著將它轉換成 Grafana Agent,此時重新審視你的監控系統架構,將會是前所未有的一目瞭然。
在這個章節,我們深入探討了 Grafana Agent。Grafana 團隊對它有著遠大的期望,不僅希望它是一個簡單的 Agent,更期待它成為跨平台、跨運作環境的監控整合工具,能減少監控系統建置和維護的複雜性,甚至有望成為業界的共同標準。Grafana Agent 也確實因應實際需求和社群的反饋,進行了多次的迭代和改進,充分展現了開源社群的力量。下一步,我們將深入 Grafana Agent 的內部運作,探索其在不同模式下的結構及運作細節,讓我們一起期待這精彩的實戰解析!
相關程式碼同步收錄在:
https://github.com/MikeHsu0618/grafana-stack-in-kubernetes/tree/main/day19
References
Introducing programmable pipelines with Grafana Agent Flow | Grafana Labs
Why we created a Prometheus Agent mode from the Grafana Agent | Grafana Labs