作者:張震
一. 簡介
SkyWalking 是一個開源可觀察性平臺,用於收集、分析、聚合和視覺化來自服務和雲原生基礎設施的資料。支援分散式追蹤、效能指標分析、應用和服務依賴分析等;它是一種現代 APM,專為雲原生、基於容器的分散式系統而設計。
本文整合的目標要達成,執行在Rainbond上的應用,通過開啟Rainbond的SkyWalking外掛,自動對接SkyWalking Server,靈活開啟APM,不需要時關閉外掛,實現即插即用的APM。
二. 整合架構
SkyWalking對服務進行監控時服需要在被監控服務中啟用agent服務,而SkyWalking agent需要配置到應用的啟動命令,雖然對應用程式碼無侵入,但配置過程需要侵入應用。Rainbond通過外掛實現對應用的無侵入,將SkyWalking的agent製作成Rainbond的 初始化型別外掛,在應用容器啟動之前將agent的jar包拷貝到應用容器,應用容器就能載入agent並連線SkyWalking Server,整個過程對應用容器無侵入,且擴充性強。對接其他APM也可以用類似方式,使用使用者通過替換外掛實現對接不同的APM工具。
下圖展示了在Rainbond中使用SkyWalking對應用進行監控的結構
三. Agent外掛實現原理
Rainbond外掛體系是相對於Rainbond應用模型的一部分,外掛主要用來實現應用容器擴充套件運維能力。由於運維工具的實現有較大的共性,因此外掛本身可以被複用。外掛必須繫結到應用容器時才具有執行時狀態,用以實現一種運維能力,比如效能分析外掛、網路治理外掛、初始化型別外掛。
具有執行時的外掛的執行環境與所繫結的元件從以下幾個方面保持一致:
- 網路空間 這個一個至關重要的特性,網路空間一致使外掛可以對元件網路流量進行旁路監聽和攔截,設定元件本地域名解析等。
- 儲存持久化空間 這個特性使得外掛與元件之間可以通過持久化目錄進行檔案交換。
- 環境變數 這個特性使得外掛可以讀取元件的環境變數。
SkyWalking與Rainbond融合的過程中,我們使用到了初始化型別外掛,顧名思義這是一個在應用容器啟動前能夠進行初始化動作的的外掛,其基本原理是利用 Kubernetes 的 init容器 實現的,Pod能夠包含多個容器,應用執行在這些容器裡面,同時Pod也能夠有一個或者多個先於應用容器啟動的init容器,只有init容器執行成功後才會執行應用容器,在Rainbond中開通了該型別外掛的元件會在應用容器啟動之前執行外掛中已定義的任務直至完成。所以只需定義在應用容器啟動前,使用初始化型別容器將agent所需資料拷貝至對應目錄下,這樣後續服務則可以直接使用這些資料。
四. 通過Rainbond一鍵安裝SkyWalking
我們已將SkyWalking製作為應用併發布至應用市場,使用者可基於開源應用商店一鍵安裝。
- 安裝 Rainbond;
- 在開源應用商店搜尋SkyWalking,點選安裝即可一鍵安裝;
3.安裝完成,後續可通過Rainbond管理和運維SkyWalking。
SkyWalking 服務端在架構上分為四個部分:探針服務、後端服務、儲存服務和 UI:
- 平臺後端(oap-server) 支援資料聚合、分析和流處理,包括跟蹤、指標和日誌。
- 儲存(elasticsearch-7.13.4) 通過開放/可插拔介面儲存SkyWalking 資料。支援 ElasticSearch、H2、MySQL、TiDB、InfluxDB。
- UI(skywalking-ui) 是高度可定製的基於 Web 的介面,允許 SkyWalking 終端使用者視覺化和管理 SkyWalking 資料。
- 探針(agent) 收集資料並根據 SkyWalking 要求重新格式化資料(不同的探針支援不同的來源)。
五. 使用SkyWalking對微服務進行監控
預先準備環境
- 擁有一套被監控服務,本文中示例應用為Spring Cloud微服務框架 Pig,我們已將Spring Cloud-pig製作為應用併發布至應用市場,使用者可基於應用市場一鍵安裝。
配置服務支援SkyWalking監控
- 部署外掛
在Rainbond團隊介面點選外掛後進入外掛介面,點選新建外掛,建立初始化型別外掛
原始碼地址:https://github.com/goodrain/skywalking-agent.git
外掛構建成功後即可使用,為pig服務的各元件開通此外掛即可。
- 掛載儲存
為pig服務的各元件掛載儲存,使其與外掛共享該儲存。
掛載路徑為/tmp/agent
,掛載型別為共享儲存;該儲存為初始化外掛及該元件提供共享儲存,共享同一份資料。
- 新增環境變數
為pig各元件新增環境變數。
變數解釋:
變數值 | 簡介 |
---|---|
-Dskywalking.agent.service_name=** | 在SkyWalking UI中展示的服務名 |
-Dskywalking.collector.backend_service=Host:Port | SkyWalking oap-server的訪問地址,用來接收skywalking trace資料 |
-javaagent:/tmp/agent/skywalking-agent.jar | 指定需要注入的jar包地址 |
新增環境變數以後更新元件即可生效。
- 建立依賴關係
將需要監控的各元件建立與SkyWalking oap-server服務的依賴關係,使其能夠通過127.0.0.1的地址連線oap-server,具體原理請參考服務間通訊;或者開啟oap-server的對外地址,在被監控端填寫該地址,則無需建立依賴關係。
訪問SkyWalking
訪問 skywalking-ui 對外埠,進入視覺化介面。
- 儀表盤
- 服務呼叫拓撲圖
六. 總結
基於Rainbond的外掛機制與SkyWalking結合,無需改變軟體自身執行環境,不需要向專案構建指令碼新增邏輯,實現SkyWalking能力即插即用。除此之外,Rainbond的外掛機制具有開放性,通過外掛機制對應用治理功能進行擴充套件,例如網路治理類、日誌收集類、資料備份類外掛,在對原應用邏輯無侵入的情況下,能夠通過網路治理類外掛對服務的效能進行分析,通過日誌外掛收集服務日誌,對接ELK等日誌收集系統;對於資料庫等元件而言,使用備份外掛對資料進行備份。
Rainbond是一個開源的雲原生應用管理平臺,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes叢集,提供企業級應用的全生命週期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續交付、應用運維、應用級多雲管理等。