天天看點

45-48 微服務鍊路追蹤元件Skywalking

45-48 微服務鍊路追蹤元件Skywalking

skywalking是什麼

分布式系統的應用程式性能監視

工具,專為微服務、雲原生架構和基于容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平台和應用性能管理系統,提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。

SkyWalking是本土開源的基于位元組碼注入的調用鍊分析,以及應用監控分析工具。特點是支援多種插件,UI功能較強,接入端無代碼侵入。

Skywalking主要功能特性

1、多種監控手段,可以通過語言探針和service mesh獲得監控的資料;

2、支援多種語言自動探針,包括 Java,.NET Core 和 Node.JS;

3、輕量高效,無需大資料平台和大量的伺服器資源;

4、子產品化,UI、存儲、叢集管理都有多種機制可選;

5、支援告警;

6、優秀的可視化解決方案;

Skywalking整體架構

45-48 微服務鍊路追蹤元件Skywalking

整個架構分成四部分:

1、上部分Agent :負責從應用中,收集鍊路資訊,發送給 SkyWalking OAP 伺服器;

2、下部分 SkyWalking OAP :負責接收Agent發送的Tracing資料資訊,然後進行分析(Analysis Core),存儲到外部存儲器(Storage),最終提供查詢(Query)功能;

3、右部分Storage:Tracing資料存儲,目前支援ES、MySQL、Sharding Sphere、TiDB、H2多種存儲器,目前采用較多的是ES,主要考慮是SkyWalking開發團隊自己的生産環境采用ES為主;

4、左部分SkyWalking UI:負責提供控制台,檢視鍊路等等;

SkyWalking支援三種探針:

● Agent – 基于ByteBuddy位元組碼增強技術實作,通過jvm的agent參數加載,并在程式啟動時攔截指定的方法來收集資料。

● SDK – 程式中顯式調用SkyWalking提供的SDK來收集資料,對應用有侵入。

● Service Mesh – 通過Service mesh的網絡代理來收集資料。

後端(Backend)

接受探針發送過來的資料,進行度量分析,調用鍊分析和存儲。後端主要分為兩部分:

● OAP(Observability Analysis Platform)- 進行度量分析和調用鍊分析的後端平台,并支援将資料存儲到各種資料庫中,如:ElasticSearch,MySQL,InfluxDB等。

● OAL(Observability Analysis Language)- 用來進行度量分析的DSL,類似于SQL,用于查詢度量分析結果和警報

SkyWalking 環境搭建部署

45-48 微服務鍊路追蹤元件Skywalking
  • skywalking agent和業務系統綁定在一起,負責收集各種監控資料
  • Skywalking oapservice是負責處理監控資料的,比如接受skywalking

    agent的監控資料,并存儲在資料庫中(本案例使用elasticsearch);接受skywalking

    webapp的前端請求,從資料庫查詢資料,并傳回資料給前端。Skywalking oapservice通常以叢集的形式存在。

  • skywalking webapp,前端界面,用于展示資料。
  • 用于存儲監控資料的資料庫,比如mysql、elasticsearch等

SkyWalking中三個概念

服務(Service) :表示對請求提供相同行為的一系列或一組工作負載,在使用Agent時,可以定義服務的名字;

服務執行個體(Service Instance) :上述的一組工作負載中的每一個工作負載稱為一個執行個體, 一個服務執行個體實際就是作業系統上的一個真實程序;

端點(Endpoint) :對于特定服務所接收的請求路徑, 如HTTP的URI路徑和gRPC服務的類名 + 方法簽名;

Skywalking跨多個微服務跟蹤

Skywalking跨多個微服務跟蹤,隻需要每個微服務啟動時添加javaagent參數即可。

Skywalking告警通知

skywalking告警的核心由一組規則驅動,這些規則定義在config/alarm-settings.yml檔案中,告警規則的定義分為三部分:

1、告警規則:它們定義了應該如何觸發度量警報,應該考慮什麼條件;

2、網絡鈎子(Webhook}:當警告觸發時,哪些服務終端需要被通知;

3、gRPC鈎子:遠端gRPC方法的主機和端口,告警觸發後調用;

為了友善,skywalking發行版中提供了預設的alarm-setting.yml檔案,包括一些規則,每個規則有英文注釋,可以根據注釋得知每個規則的作用:

  • 在最近10分鐘的3分鐘内服務平均響應時間超過1000ms
  • 最近10分鐘内,服務成功率在2分鐘内低于80%
  • 服務執行個體的響應時間在過去10分鐘的2分鐘内超過1000ms
  • 資料庫通路{name}的響應時間在過去10分鐘的2分鐘内超過1000ms

    隻要我們的服務請求符合alarm-setting.yml檔案中的某一條規則就會觸發告警。

Skywalking叢集部署

Skywalking叢集是将skywalking oap作為一個服務注冊到nacos上,隻要skywalking oap服務沒有全部當機,保證有一個skywalking oap在運作,就能進行跟蹤。

搭建一個skywalking oap叢集需要:

(1)至少一個Nacos(也可以把nacos叢集)

(2)至少一個ElasticSearch(也可以把es叢集)

(3)至少2個skywalking oap服務;

(4)至少1個UI(UI也可以叢集多個,用Nginx代理統一入口)