skywalking是什麼
分布式系統的應用程式性能監視
工具,專為微服務、雲原生架構和基于容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平台和應用性能管理系統,提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。
SkyWalking是本土開源的基于位元組碼注入的調用鍊分析,以及應用監控分析工具。特點是支援多種插件,UI功能較強,接入端無代碼侵入。
Skywalking主要功能特性
1、多種監控手段,可以通過語言探針和service mesh獲得監控的資料;
2、支援多種語言自動探針,包括 Java,.NET Core 和 Node.JS;
3、輕量高效,無需大資料平台和大量的伺服器資源;
4、子產品化,UI、存儲、叢集管理都有多種機制可選;
5、支援告警;
6、優秀的可視化解決方案;
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 環境搭建部署
- 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代理統一入口)