在 K8s 上構(gòu)建端到端的無侵入開源可觀測解決方案
Odigos(https://github.com/keyval-dev/odigos) 是一個(gè)開源的可觀測性控制平面,允許企業(yè)創(chuàng)建和維護(hù)他們的可觀測性管道,Odigos 允許應(yīng)用程序在幾分鐘內(nèi)提供追蹤、指標(biāo)和日志,重要的是無需修改任何代碼,完全無任何侵入性。
當(dāng)你的應(yīng)用程序在世界各地的數(shù)十個(gè)節(jié)點(diǎn)上的數(shù)百個(gè) pod 上運(yùn)行時(shí),很難全面了解整個(gè)應(yīng)用程序,對于需要跟蹤、管理和優(yōu)化這些環(huán)境的性能和可用性的團(tuán)隊(duì)來說,可觀測性就成為了關(guān)鍵的工作任務(wù)。
如果整合得當(dāng),可觀測性工具可以通過集中你的數(shù)據(jù)并提供對性能、使用情況和用戶行為等關(guān)鍵指標(biāo)提供更智能的洞察力來監(jiān)控和排查問題,可觀測性工具應(yīng)支持你使用的語言和框架,與你的容器平臺(tái)和你使用的其他工具輕松集成,包括任何通信或報(bào)警。問題是實(shí)施、維護(hù)和擴(kuò)展是持續(xù)的任務(wù),如果沒有適當(dāng)?shù)膱?zhí)行和持續(xù)的配置,可觀測性工具是有限的,很多時(shí)候還是無效的。
對于研發(fā)團(tuán)隊(duì)來說,在云上應(yīng)用可觀測性能力需要特定的技能組合,特別是考慮到向 OpenTelemetry & eBPF 的轉(zhuǎn)變。企業(yè)必須確保他們能夠在有限的、競爭激烈的人才庫中獲得特定的技能組合。學(xué)習(xí) SDK、添加自動(dòng)儀表(針對每種語言)、編寫代碼、部署和維護(hù)采集器--這些都需要大量的時(shí)間和知識(shí),而大多數(shù)組織并不具備這些條件。
為了解決這些集成問題,一些大型的可觀測性工具供應(yīng)商提供自己的代理,提供他們自己的定制解決方案。這樣做的問題是,通過使用專有格式攝取和存儲(chǔ)數(shù)據(jù)的專有代理,但是會(huì)和這些供應(yīng)商綁定在一起了。隨著企業(yè)越來越多地尋求與開源標(biāo)準(zhǔn)的兼容性,以及跨部門共享和訪問數(shù)據(jù)的能力,將數(shù)據(jù)鎖定在一個(gè)獨(dú)立的供應(yīng)商中會(huì)阻礙這些努力并增加成本。
Odigos 可觀測性控制平面提供了一個(gè)全面的、完全自動(dòng)化的解決方案,使各組織能夠在幾分鐘內(nèi)建立他們的可觀測性管道。Odigos 專注與第三方集成、開源、開放標(biāo)準(zhǔn),以及整體上更加綜合的方法,減少了結(jié)合多個(gè)可觀測性軟件平臺(tái)和開源軟件解決方案的復(fù)雜性。
Odigos 自動(dòng)檢測你集群中每個(gè)應(yīng)用程序的編程語言,并相應(yīng)地進(jìn)行自動(dòng)檢測。對于已編譯的語言(如 Go),使用 eBPF 來檢測應(yīng)用程序,對于虛擬機(jī)語言(如 Java)則使用 OpenTelemetry。此外,Odigos 創(chuàng)建的管道遵循最佳實(shí)踐,例如:將 API 密鑰持久化為 Kubernetes 的 Secret,使用最小的采集器鏡像,等等。安裝、配置和維護(hù)一個(gè)開源的、不可知的 Observabiity 控制平面的能力將使各種規(guī)模的組織有能力在任何時(shí)候采用適合他們的工具,并根據(jù)需要添加更多工具。
Odigos 使可觀測性變得簡單,人人都能使用。
使用
準(zhǔn)備
接下來我們將安裝一個(gè) bank-of-athnos(https://github.com/keyval-dev/bank-of-athnos) 應(yīng)用,這是一個(gè)由 Google 創(chuàng)建的銀行應(yīng)用程序示例,我們使用沒有任何檢測代碼的修改版本來演示 Odigos 如何自動(dòng)從應(yīng)用程序收集可觀察性數(shù)據(jù)。
當(dāng)然前提是需要一個(gè) Kubernetes 集群,如果是在本地開發(fā)環(huán)境強(qiáng)烈推薦使用 kind 來創(chuàng)建一個(gè)測試集群,只需要使用名 ??kind create cluster?
? 即可創(chuàng)建一個(gè)集群。有了集群后使用下面的命令部署測試應(yīng)用即可:
在進(jìn)入下一步之前,確保所有的 pod 都處于運(yùn)行狀態(tài)(可能需要一些時(shí)間)。
安裝 Odigos
接下來我們需要先安裝 Odigos,最簡單的方式是使用 Helm Chart 進(jìn)行安裝:
在 odigos-system 命名空間中的所有 pod 運(yùn)行后,通過運(yùn)行以下命令可以打開 Odigos UI:
然后我們就可以在瀏覽器中通過 http://localhost:3000 訪問 Odigos UI 了,正常可以看到如下所示的頁面:
有兩種方法可以選擇 Odigos 應(yīng)該使用哪些應(yīng)用程序進(jìn)行觀測:
- Opt out(推薦):檢測所有程序,包括每一個(gè)將要部署的新應(yīng)用,用戶仍然可以手動(dòng)標(biāo)記不被檢測的應(yīng)用程序。
- Opt in:只對用戶手動(dòng)選擇的應(yīng)用程序進(jìn)行檢測。
這里我們就選擇使用 Opt out 模式。
配置
接下來是告訴 Odigos 如何訪問我們自己的可觀測后端,Odigos 支持很多的后端服務(wù):
比如我們這里選擇自己托管的 Prometheus、Tempo、Loki 三個(gè)服務(wù),當(dāng)然也需要提前部署該 3 個(gè)服務(wù):
添加以下三個(gè)目的地:
Tempo:
- Name: tempo
- URL: http://observability-tempo.observability
Prometheus:要添加其他目的地,請從側(cè)欄中選擇目的地,然后單擊添加新目的地
- Name: prometheus
- URL: http://observability-prometheus-server.observability
Loki
- Name: loki
- URL: http://observability-loki.observability
選擇后等待幾秒鐘,讓 Odigos 完成部署所需的采集器并對目標(biāo)應(yīng)用程序進(jìn)行檢測。你可以通過運(yùn)行以下程序來監(jiān)控進(jìn)度
等待所有的 pods 都處于運(yùn)行狀態(tài)(特別是注意 transactionservice 應(yīng)用程序,它的啟動(dòng)時(shí)間很慢)。最后我們就可以在 Grafana 中探索我們的可觀測數(shù)據(jù),我們現(xiàn)在可以看到并將指標(biāo)與追蹤和日志數(shù)據(jù)關(guān)聯(lián)了起來。
同樣可以通過運(yùn)行端口轉(zhuǎn)發(fā)到你的 Grafana 實(shí)例。
并導(dǎo)航到 http://localhost:3100,輸入 admin 作為用戶名,對于密碼,輸入以下命令的輸出:
Service Graph
現(xiàn)在我們就可以查看微服務(wù)的 Service Graph 了。
- 點(diǎn)擊側(cè)邊欄的 Explorer
- 選擇 Tempo 作為數(shù)據(jù)源
- 選擇 Service Graph 標(biāo)簽
- 點(diǎn)擊 Run query 按鈕開始查詢
指標(biāo)
接著我們可以查看一些指標(biāo),從 service graph 中點(diǎn)擊 contacts 節(jié)點(diǎn)并選擇 Request rate:
就會(huì)出現(xiàn)如下所示的一個(gè)非常熟悉的圖表:
還有很多 Odigos 收集的指標(biāo)可以從 Prometheus 數(shù)據(jù)源輕松查詢,請查看此文檔(??https://odigos.io/docs/telemetry-types/?
?)以了解完整的清單 。
追蹤
再次點(diǎn)擊 Service Graph 中的 contacts 應(yīng)用,但這次選擇請求直方圖,為了將指標(biāo)和追蹤聯(lián)系起來,我們將使用一個(gè)叫做 exemplars 的功能,要顯示 exemplars,按照如下步驟:
- 打開 options 菜單。
- 打開 exemplars。
- 注意現(xiàn)在直方圖上增加了綠色的菱形。
將鼠標(biāo)懸停在其中一個(gè)添加的點(diǎn)上,點(diǎn)擊 Query With Tempo,應(yīng)該會(huì)出現(xiàn)類似于下面的追蹤數(shù)據(jù)。
在此 trace 中,可以準(zhǔn)確地看到整個(gè)請求的每個(gè)部分花費(fèi)了多少時(shí)間,深入其中一個(gè)部分將顯示其他信息,例如數(shù)據(jù)庫查詢。
日志
要進(jìn)一步調(diào)查具體操作,可以簡單地按下小文件圖標(biāo)查詢相關(guān)日志。按平衡器旁邊的文件圖標(biāo),顯示相關(guān)日志。
總結(jié)
我們已經(jīng)展示了僅使用開源解決方案提取和傳輸日志、追蹤和指標(biāo)是多么容易。此外,我們還能夠在幾分鐘內(nèi)從一個(gè)應(yīng)用程序中生成追蹤、指標(biāo)和日志數(shù)據(jù),現(xiàn)在也有能力在不同的信號之間進(jìn)行關(guān)聯(lián)。可以將指標(biāo)與追蹤和追蹤與日志相關(guān)聯(lián),現(xiàn)在擁有所有需要的數(shù)據(jù)來快速檢測和修復(fù)目標(biāo)應(yīng)用中的生產(chǎn)問題。