Rainbond通過插件整合SkyWalking,實現APM即插即用

  • 2021 年 11 月 29 日
  • 筆記

作者:張震

一. 簡介

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製作為應用並發布至應用市場,用戶可基於開源應用商店一鍵安裝。

  1. 安裝 Rainbond;
  2. 在開源應用商店搜索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對微服務進行監控

預先準備環境

配置服務支援SkyWalking監控

  • 部署插件

在Rainbond團隊介面點擊插件後進入插件介面,點擊新建插件,創建初始化類型插件

源碼地址://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集群,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續交付、應用運維、應用級多雲管理等。