天天看點

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

作者:張震

一. 簡介

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對應用進行監控的結構

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

三. Agent插件實作原理

Rainbond插件體系是相對于Rainbond應用模型的一部分,插件主要用來實作應用容器擴充運維能力。由于運維工具的實作有較大的共性,是以插件本身可以被複用。插件必須綁定到應用容器時才具有運作時狀态,用以實作一種運維能力,比如性能分析插件、網絡治理插件、初始化類型插件。

具有運作時的插件的運作環境與所綁定的元件從以下幾個方面保持一緻:

  • 網絡空間 這個一個至關重要的特性,網絡空間一緻使插件可以對元件網絡流量進行旁路監聽和攔截,設定元件本地域名解析等。
  • 存儲持久化空間 這個特性使得插件與元件之間可以通過持久化目錄進行檔案交換。
  • 環境變量 這個特性使得插件可以讀取元件的環境變量。

SkyWalking與Rainbond融合的過程中,我們使用到了初始化類型插件,顧名思義這是一個在應用容器啟動前能夠進行初始化動作的的插件,其基本原理是利用 Kubernetes 的

init容器

實作的,Pod能夠包含多個容器,應用運作在這些容器裡面,同時Pod也能夠有一個或者多個先于應用容器啟動的init容器,隻有init容器運作成功後才會運作應用容器,在Rainbond中開通了該類型插件的元件會在應用容器啟動之前運作插件中已定義的任務直至完成。是以隻需定義在應用容器啟動前,使用初始化類型容器将agent所需資料拷貝至對應目錄下,這樣後續服務則可以直接使用這些資料。

四. 通過Rainbond一鍵安裝SkyWalking

我們已将SkyWalking制作為應用并釋出至應用市場,使用者可基于開源應用商店一鍵安裝。

  1. 安裝 Rainbond ;
  2. 在開源應用商店搜尋SkyWalking,點選安裝即可一鍵安裝;
Rainbond通過插件整合SkyWalking,實作APM即插即用

3.安裝完成,後續可通過Rainbond管理和運維SkyWalking。

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

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團隊界面點選插件後進入插件界面,點選建立插件,建立初始化類型插件

源碼位址:

https://github.com/goodrain/skywalking-agent.git
Rainbond通過插件整合SkyWalking,實作APM即插即用

插件建構成功後即可使用,為pig服務的各元件開通此插件即可。

  • 挂載存儲

為pig服務的各元件挂載存儲,使其與插件共享該存儲。

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

挂載路徑為

/tmp/agent

,挂載類型為共享存儲;該存儲為初始化插件及該元件提供共享存儲,共享同一份資料。

  • 添加環境變量

為pig各元件添加環境變量。

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

變量解釋:

變量值 簡介
-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,實作APM即插即用
  • 服務調用拓撲圖
Rainbond通過插件整合SkyWalking,實作APM即插即用

六. 總結

基于Rainbond的插件機制與SkyWalking結合,無需改變軟體自身運作環境,不需要向項目建構腳本添加邏輯,實作SkyWalking能力即插即用。除此之外,Rainbond的插件機制具有開放性,通過插件機制對應用治理功能進行擴充,例如網絡治理類、日志收集類、資料備份類插件,在對原應用邏輯無侵入的情況下,能夠通過網絡治理類插件對服務的性能進行分析,通過日志插件收集服務日志,對接ELK等日志收集系統;對于資料庫等元件而言,使用備份插件對資料進行備份。

是一個開源的雲原生應用管理平台,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes叢集,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續傳遞、應用運維、應用級多雲管理等。

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