加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • APM簡介
    • 開源APM比較
    • Skywalking簡介
    • Skywalking使用示例
    • 如何選擇適合自己的APM?
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

實現(xiàn)分布式系統(tǒng)可視化監(jiān)控—Skywalking使用介紹

2023/09/20
3717
閱讀需 23 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

 

作者:李智慧,單位:中國移動智慧家庭運營中心

微服務(wù)架構(gòu)中,一個系統(tǒng)可能由幾十上百個微服務(wù)組成,當請求處理過程中發(fā)生異常時,如何快速定位到產(chǎn)生問題的服務(wù)?能否以可視化的方式看到請求經(jīng)過的鏈路?應(yīng)用性能管理(APM)系統(tǒng)可以幫我們解決這些問題。本文詳細介紹了APM的產(chǎn)生背景,理論基礎(chǔ)和實現(xiàn)案例,并以Skywalking為例講解了APM的核心功能。

APM簡介

1.1需求背景

在微服務(wù)大行其道的今天,一個大型系統(tǒng)可能包含上百個服務(wù)(甚至更多),隨著服務(wù)數(shù)量的增多,遇到問題后定位和分析的時間成本也相應(yīng)增加。例如遇到系統(tǒng)故障或者性能問題,在傳統(tǒng)三層架構(gòu)中,僅僅需要分析有限的幾個組件,如web服務(wù)器,應(yīng)用服務(wù)器數(shù)據(jù)庫。但是,如果問題發(fā)生在微服務(wù)架構(gòu)中,就需要調(diào)查大量的組件和服務(wù)器。此外,僅僅分析單個組件很難看到全局,當在微服務(wù)架構(gòu)中發(fā)生一個低可見度的問題時,采用傳統(tǒng)分析方式解決問題所需的時間也會成倍增加。

面對以上情況, 我們就需要一些可以幫助運維開發(fā)人員快速理解系統(tǒng)、定位問題、監(jiān)控系統(tǒng)性能的工具,這就是所謂的APM(Application Performance Monitoring,應(yīng)用性能管理)。

?什么是APM?

用最簡單的術(shù)語來說,APM是從業(yè)人員用來確保應(yīng)用程序的一致可用性、性能和響應(yīng)時間的工具。網(wǎng)站、移動應(yīng)用程序和業(yè)務(wù)應(yīng)用程序是監(jiān)控的典型用例。

APM區(qū)別于其他監(jiān)控系統(tǒng)的核心技術(shù)之一是分布式調(diào)用鏈追蹤,借助于這一功能,我們能在監(jiān)控頁面上看到一個請求從前端到底層服務(wù)的每一次調(diào)用,以及對應(yīng)的服務(wù)器地址,接口名,響應(yīng)時間,是否成功等信息。借助這一功能,當一個請求出現(xiàn)問題時,就可以快速發(fā)現(xiàn)產(chǎn)生問題的根源。

APM的功能遠不止于此,在當今高度連接的數(shù)字世界中,APM的監(jiān)控范圍已經(jīng)擴展到服務(wù)、流程、主機、日志、網(wǎng)絡(luò),當然還有訪問這些應(yīng)用程序的最終用戶。

1.2 理論基礎(chǔ)—調(diào)用鏈追蹤的實現(xiàn)原理

Google的Dapper是最早的APM系統(tǒng),Google利用Dapper系統(tǒng)幫助運維人員快速定位問題。相關(guān)論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》[1]發(fā)表后,很多公司和組織基于調(diào)用鏈追蹤的原理,設(shè)計出了各種優(yōu)秀的APM系統(tǒng)。這些APM系統(tǒng)不只包括調(diào)用鏈追蹤,還集成了性能監(jiān)控、日志收集、告警等功能,可以作為一個獨立的運維監(jiān)控系統(tǒng)來使用。

在《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》中,闡述了Dapper對整個調(diào)用過程的追蹤過程:

① 請求到來生成一個全局TraceID,通過TraceID可以串聯(lián)起整個調(diào)用鏈,一個TraceID代表一次請求。

② 除了TraceID外,還需要SpanID用于記錄調(diào)用父子關(guān)系。每個服務(wù)會記錄下parent id和span id,通過他們可以組織一次完整調(diào)用鏈的父子關(guān)系。

③ 一個沒有parent id的span成為root span,可以看成調(diào)用鏈入口。

④ 所有這些ID可用全局唯一的64位整數(shù)表示;

⑤ 整個調(diào)用過程中每個請求都要透傳TraceID和SpanID。

⑥ 每個服務(wù)將該次請求附帶的TraceID和附帶的SpanID作為parent id記錄下,并且將自己生成的SpanID也記錄下。

⑦ 要查看某次完整的調(diào)用則只要根據(jù)TraceID查出所有調(diào)用記錄,然后通過parent id和span id組織起整個調(diào)用父子關(guān)系。

1.3 統(tǒng)一規(guī)范—opentracing

當代分布式跟蹤系統(tǒng)(例如,Zipkin, Dapper, HTrace, X-Trace等)的實現(xiàn)方式各異,他們使用不兼容的API來實現(xiàn)各自的應(yīng)用需求。OpenTracing通過提供平臺無關(guān)、廠商無關(guān)的API,使得開發(fā)人員能夠方便的添加或修改追蹤系統(tǒng)的實現(xiàn)。OpenTracing[2]提供了用于運營支撐系統(tǒng)的和針對特定平臺的輔助程序庫。

OpenTracing是一個規(guī)范,它不是一個數(shù)據(jù)結(jié)構(gòu),能提供的是語義和概念。OpenTracing要涵蓋的是中間的一層,它是要實現(xiàn)的是一套API的套件。你需要按照OpenTracing的規(guī)范向用戶提供API,實現(xiàn)把數(shù)據(jù)下送到API的探針或者Tracer的探針。OpenTracing的主旨是在做手動埋點,程序的開發(fā)者要主動調(diào)用Tracing的API。

實現(xiàn)了OpenTracing規(guī)范的APM包括Zipkin,Pinpoint,Skywalking,Jaeger等。

開源APM比較

比較知名的開源APM包括:Zipkin[3],Pinpoint[4],Jaeger[5],Skywalking[6]等。以下是這些開源APM的橫向比較[7]。

圖1 開源APM橫向比較

綜合以上分析,Skywalking對代碼無侵入,集成成本低,支持trace查詢,監(jiān)控,告警等功能,最重要的是,對應(yīng)用吞吐量的影響最小,與我們所在項目的需求契合度最高,因此,我們選擇Skywalking進行部署和使用。

Skywalking簡介

Skywalking是一款國內(nèi)開源的應(yīng)用性能監(jiān)控工具,支持對分布式系統(tǒng)的監(jiān)控、跟蹤和診斷。以下是SkyWalking的一些主要功能和組件:

① 分布式跟蹤:SkyWalking跟蹤流經(jīng)多個服務(wù)的請求,提供對事務(wù)路徑的端到端可見性。它捕獲關(guān)于每個調(diào)用的詳細信息,包括延遲、錯誤和依賴關(guān)系。

② 指標分析:SkyWalking收集和分析應(yīng)用指標,如CPU使用率、內(nèi)存消耗和網(wǎng)絡(luò)流量。它提供了這些指標的實時監(jiān)控和可視化,幫助識別性能瓶頸和資源使用模式。

③ 服務(wù)網(wǎng)格支持: SkyWalking集成了流行的服務(wù)網(wǎng)格框架,如Istio和Envoy,允許用戶監(jiān)控和管理部署在服務(wù)網(wǎng)格環(huán)境中的微服務(wù)。

④ 告警和診斷:SkyWalking可以根據(jù)預定義的閾值或收集數(shù)據(jù)中檢測到的異常產(chǎn)生告警。它還提供了強大的診斷工具來幫助解決性能問題并分析根本原因。

⑤ 插件生態(tài)系統(tǒng):SkyWalking提供了一個基于插件的架構(gòu),允許用戶擴展其功能并與不同的技術(shù)集成,可支持多種各種數(shù)據(jù)庫、消息代理和中間件系統(tǒng)。

⑥ 可視化展示:SkyWalking提供了一個用戶友好的基于web的界面,用于可視化性能數(shù)據(jù)、生成報告和探索跟蹤細節(jié)。它提供了一套全面的指示板和圖表來幫助使用者理解系統(tǒng)行為。

⑦ 可擴展性和兼容性:SkyWalking設(shè)計用于處理大規(guī)模分布式系統(tǒng)。它支持水平可伸縮性,可以跨多個節(jié)點以分布式方式部署。它與云原生環(huán)境和容器編排平臺(如Kubernetes)兼容。

Skywalking 總體可以分為四部分(圖2):

① Skywalking Agent:使用Javaagent做字節(jié)碼植入,無侵入式的收集,并通過HTTP或者gRPC方式發(fā)送數(shù)據(jù)到Skywalking Collector。

② Skywalking Collector :鏈路數(shù)據(jù)收集器,對agent傳過來的數(shù)據(jù)進行整合分析處理并落入相關(guān)的數(shù)據(jù)存儲中。

③ Storage:Skywalking的存儲,時間更迭,sw已經(jīng)開發(fā)迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H2、作為存儲介質(zhì)進行數(shù)據(jù)存儲。

④ UI:Web可視化平臺,用來展示落地的數(shù)據(jù)。

圖2 skywalking整體架構(gòu)

通過在應(yīng)用程序中集成 SkyWalking Agent,就可以對接口、服務(wù)、數(shù)據(jù)庫、MQ等進行追蹤,將追蹤結(jié)果通過 HTTP 或 gRPC協(xié)議 發(fā)送到 SkyWalking Collecter,SkyWalking Collecter 經(jīng)過分析和聚合,將結(jié)果存儲到 Elasticsearch 或? H2等數(shù)據(jù)庫中,SkyWalking同時提供了一個 SkyWalking UI 的可視化界面,UI 以 GraphQL + HTTP 方式獲取存儲數(shù)據(jù)進行展示。

如果只是為了學習體驗SkyWalking,不必單獨安裝每一個組件,最新版本的Skywalking服務(wù)端支持AllInOne的安裝方式。只需要需要將安裝包解壓然后啟動,數(shù)據(jù)庫,Collector,UI等服務(wù)端組件就已經(jīng)安裝好了,可以直接登錄UI進行體驗,此時使用的是H2內(nèi)存數(shù)據(jù)庫,Skywalking重啟后數(shù)據(jù)會清空。被監(jiān)控的應(yīng)用需要集成skywalking agent,修改agent配置后重啟,以便將采集信息上報給服務(wù)端。

此外,skywaling的官方網(wǎng)站https://skywalking.apache.org/

還提供了在線體驗入口,打開網(wǎng)站,在頁面上點擊“Live demo”->“Go to native UI”,即可進入skywalking監(jiān)控頁面,查看當前監(jiān)控的應(yīng)用和日志信息。

目前使用Skywalking的公司包括華為,當當,小米等不下數(shù)十家公司。

Skywalking使用示例

面基于我們自己部署的Skywalking(9.4.0版本),介紹一下Skywalking的主要功能。

4.1 服務(wù)監(jiān)控

進入Skywalking首頁,點擊Service面板,呈現(xiàn)如下頁面。

圖3 Skywalking服務(wù)監(jiān)控-1

在頁面中可以看到,當前系統(tǒng)中有3個應(yīng)用組件被納入監(jiān)控,分別是ops,business,user。頁面中展示了每種應(yīng)用的負載,請求成功率,時延,和應(yīng)用性能指數(shù)(Apdex)。

點擊某個服務(wù),可以看到該服務(wù)的各種指標的趨勢圖以及告警信息,如下圖所示。

圖4 Skywalking服務(wù)監(jiān)控-2

Skywalking的告警規(guī)則可在配置文件中進行設(shè)置。

4.2 拓撲展示

Topology頁面中,可以看到Skywalking根據(jù)當前時間窗口的請求數(shù)據(jù)繪制的系統(tǒng)拓撲圖。如果在監(jiān)控時間段內(nèi)某個應(yīng)用沒有請求,則拓撲圖中不會顯示該應(yīng)用和其他應(yīng)用之間的調(diào)用關(guān)系。

圖5 Skywalking拓撲展示

在Topology頁面中,不僅顯示了被監(jiān)控的服務(wù),還顯示了與這些服務(wù)發(fā)生直接調(diào)用關(guān)系的對象或組件,例如User,agent::ui,服務(wù)器10.100.201.73:61616等。

4.3 調(diào)用鏈路追蹤

在Trace頁面中,可以根據(jù)traceid查看一次請求的完整調(diào)用過程。如下圖所示,在“追蹤ID”輸入框中輸入想要查詢的traceid并點擊搜索,側(cè)欄中會顯示出該traceid關(guān)聯(lián)的所有請求。點擊其中的一個請求,會在右側(cè)顯示請求從前端直到到存儲層的所有調(diào)用步驟、時延等。進一步地,還可以通過點擊具體的路徑,查看當前調(diào)用關(guān)聯(lián)的實例名,ip,端口,業(yè)務(wù)日志等信息。

圖6 Skywalking調(diào)用鏈追蹤

4.4 日志監(jiān)控

Skywalking支持通過log4j和logback配置將業(yè)務(wù)日志上報Skywalking到服務(wù)端,以便在UI中展示,配置方式參考文檔[8][9][10]。配置完成后,可在UI的Log頁面中看到業(yè)務(wù)日志。如下圖所示,

我們的Java程序通常使用logback或log4j框架打印業(yè)務(wù)日志,如果能夠?qū)⑦@些標識與skywalking的traceid進行關(guān)聯(lián),在某條告警日志出現(xiàn)時,就可以根據(jù)其中的traceid找到相應(yīng)的調(diào)用鏈。為此,Skywalking提供了低侵入的集成方式,讓我們可以在業(yè)務(wù)日志中打印traceid。

以log4j框架為例,首先在程序中添加apm-toolkit-log4j-1.x依賴

<dependency>      <groupId>org.apache.skywalking</groupId>      <artifactId>apm-toolkit-log4j-1.x</artifactId>      <version>{project.release.version}</version>   </dependency>

然后修改layout配置

log4j.appender.CONSOLE.layout=org.apache.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternLayout

最后修改日志打印格式

log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n

其中%T即表示在日志中增加traceid字段。

logback的配置方法類似,具體可以參考Skywalking文檔[8][9][10]。

4.5 更多功能

Skywalking提供的功能遠不止上面演示的這些,想要了解更多功能,請參考官方文檔https://skywalking.apache.org/docs,以及在線演示系統(tǒng)http://demo.skywalking.apache.org/general

如何選擇適合自己的APM?

哪一款APM最適合自己?需要根據(jù)自己項目的實際情況進行選擇,以下是選型時需要考慮的一些因素:

(1)特性和功能

評估每個開源APM提供的特性和功能。例如,調(diào)用鏈追蹤的粒度、監(jiān)控指標、告警功能是否滿足自己的需求;

(2)性能與可擴展性

考慮每個APM的可擴展性和性能,是否具有水平可伸縮性,是否具有高效的數(shù)據(jù)存儲和檢索機制,當業(yè)務(wù)增長時APM的負載能力是否滿足需求,等等。

(3)支持的技術(shù)

檢查APM是否支持項目中使用的編程語言、框架和技術(shù)。

(4)與現(xiàn)有監(jiān)控系統(tǒng)的集成

了解APM與現(xiàn)有監(jiān)控和日志系統(tǒng)的集成方式,優(yōu)先選擇可以實現(xiàn)平滑數(shù)據(jù)對接,與當前系統(tǒng)兼容性好的平臺。

(5)安裝和使用的便利性

評估每個APM的安裝、配置和使用的便利性,用戶界面是否滿足需求,學習曲線是否合理,利用現(xiàn)有文檔和資源是否能夠快速入手。

(6)社區(qū)活躍度

一個活躍的社區(qū)可以為平臺提供支持、指導和定期更新。

參考文獻

[1]?Sigelman B H , Barroso L A , Burrows M ,et al.Dapper, a Large-Scale Distributed Systems Tracing Infrastructure[J].? 2010.

[2]?OpenTracing Specification Council. The OpenTracing Semantic .Specification[S/OL].http://opentracing.io/documentation/pages/spec.2017-03-19/2023-07-03.

[3]?Zipkin, zipkin官網(wǎng), 2023年3月10日, http://zipkin.io/.

[4]?pinpoint introduction, pinpoint官網(wǎng), 2023年7月3日, https://pinpoint-apm.gitbook.io/pinpoint/.

[5]?jaeger introduction, jaeger官網(wǎng), 2023年7月3日, https://www.jaegertracing.io/docs/.

[6]?SkyWalking 極簡入門,芋道源碼, 2020年4月19日,?https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/.

[7]?分布式調(diào)用鏈調(diào)研(pinpoint、skywalking、jaeger、zipkin等對比), CSDN, 2022年2月24日https://blog.csdn.net/muyimo/article/details/123123377.

[8]?application-toolkit-log4j-1.x, skywalking在線文檔, 2023年7月3日, https://skywalking.apache.org/docs/skywalking-java/v8.14.0/en/setup/service-agent/java-agent/application-toolkit-log4j-1.x/.

[9]?application-toolkit-log4j-2.x, skywalking在線文檔, 2023年7月3日, https://skywalking.apache.org/docs/skywalking-java/v8.14.0/en/setup/service-agent/java-agent/application-toolkit-log4j-2.x/.

[10] application-toolkit-logback-1.x, skywalking在線文檔, 2023年7月3日,https://skywalking.apache.org/docs/skywalking-java/v8.14.0/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/.

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
KSZ8721BLI 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48

ECAD模型

下載ECAD模型
$4.07 查看
KSZ9477STXI 1 Microchip Technology Inc IC ETHERNET SWITCH 7PORT 128TQFP

ECAD模型

下載ECAD模型
$18.04 查看
LAN8720A-CP 1 Microchip Technology Inc LAN8720A-CP

ECAD模型

下載ECAD模型
$1.43 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

移動Labs是中國移動的社交化新媒體平臺,是面向外部行業(yè)及產(chǎn)業(yè)鏈合作伙伴的信息發(fā)布、業(yè)務(wù)發(fā)展和產(chǎn)業(yè)推進門戶。