APM系統(tǒng)SkyWalking入門介紹
APM全稱Application Performance Management應(yīng)用性能管理,目的是通過各種探針采集數(shù)據(jù),收集關(guān)鍵指標(biāo),同時(shí)搭配數(shù)據(jù)呈現(xiàn)以實(shí)現(xiàn)對(duì)應(yīng)用程序性能管理和故障管理的系統(tǒng)化解決方案。
Zabbix、Premetheus、open-falcon等監(jiān)控系統(tǒng)主要關(guān)注服務(wù)器硬件指標(biāo)與系統(tǒng)服務(wù)運(yùn)行狀態(tài)等,而APM系統(tǒng)則更重視程序內(nèi)部執(zhí)行過程指標(biāo)和服務(wù)之間鏈路調(diào)用情況的監(jiān)控,APM更有利于深入代碼找到請(qǐng)求響應(yīng)“慢”的根本問題,與Zabbix之類的監(jiān)控是互補(bǔ)關(guān)系
目前市面上開源的APM系統(tǒng)主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是參考Google的Dapper實(shí)現(xiàn)的
CAT: 是由國(guó)內(nèi)美團(tuán)點(diǎn)評(píng)開源的,基于Java語言開發(fā),目前提供Java、C/C++、Node.js、Python、Go等語言的客戶端,監(jiān)控?cái)?shù)據(jù)會(huì)全量統(tǒng)計(jì),國(guó)內(nèi)很多公司在用,例如美團(tuán)點(diǎn)評(píng)、攜程、拼多多等,CAT跟下邊要介紹的Zipkin都需要在應(yīng)用程序中埋點(diǎn),對(duì)代碼侵入性強(qiáng),我們傾向于選擇對(duì)代碼無侵入的產(chǎn)品,所以淘汰了CAT
Zipkin: 由Twitter公司開發(fā)并開源,Java語言實(shí)現(xiàn),侵入性相對(duì)于CAT要低一點(diǎn),需要對(duì)web.xml之類的配置文件做修改,但依然對(duì)代碼有侵入,也沒有選擇
Pinpoint: 一個(gè)韓國(guó)團(tuán)隊(duì)開源的產(chǎn)品,運(yùn)用了字節(jié)碼增強(qiáng)技術(shù),只需要在啟動(dòng)時(shí)添加啟動(dòng)參數(shù)即可,對(duì)代碼無侵入,目前支持Java和PHP語言,底層采用HBase來存儲(chǔ)數(shù)據(jù),探針收集的數(shù)據(jù)粒度非常細(xì),但性能損耗大,因其出現(xiàn)的時(shí)間較長(zhǎng),完成度也很高,應(yīng)用的公司較多
SkyWalking: 國(guó)人開源的產(chǎn)品,主要開發(fā)人員來自于華為,2019年4月17日Apache董事會(huì)批準(zhǔn)SkyWalking成為頂級(jí)項(xiàng)目,支持Java、.Net、NodeJs等探針,數(shù)據(jù)存儲(chǔ)支持Mysql、Elasticsearch等,跟Pinpoint一樣采用字節(jié)碼注入的方式實(shí)現(xiàn)代碼的無侵入,探針采集數(shù)據(jù)粒度粗,但性能表現(xiàn)優(yōu)秀,且對(duì)云原生支持,目前增長(zhǎng)勢(shì)頭強(qiáng)勁,社區(qū)活躍,中文文檔沒有語言障礙
SkyWalking
SkyWalking是分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8S、Mesos)架構(gòu)而設(shè)計(jì)
SkyWalking是觀察性分析平臺(tái)和應(yīng)用性能管理系統(tǒng)。提供分布式追蹤、服務(wù)網(wǎng)格遙測(cè)分析、度量聚合和可視化一體化解決方案
SkyWalking是一個(gè)開源APM系統(tǒng),包括對(duì)Cloud Native體系結(jié)構(gòu)中的分布式系統(tǒng)的監(jiān)視,跟蹤,診斷功能。 核心功能如下。
服務(wù),服務(wù)實(shí)例,端點(diǎn)指標(biāo)分析
根本原因分析
服務(wù)拓?fù)鋱D分析
服務(wù),服務(wù)實(shí)例和端點(diǎn)依賴關(guān)系分析
檢測(cè)到慢速服務(wù)和端點(diǎn)
性能優(yōu)化
分布式跟蹤和上下文傳播
數(shù)據(jù)庫訪問指標(biāo)。 檢測(cè)慢速數(shù)據(jù)庫訪問語句(包括SQL語句)。
報(bào)警
SkyWalking支持從多種來源和多種格式收集遙測(cè)(跟蹤和度量)數(shù)據(jù),包括
SkyWalking格式的Java,.NET Core,NodeJS和PHP自動(dòng)儀器代理
SkyWalking格式的手動(dòng)儀器Go代理。
Istio遙測(cè)格式
由Istio控制的服務(wù)網(wǎng)格中的Envoy gRPC訪問日志服務(wù)(ALS)格式
特使指標(biāo)服務(wù)格式。
Zipkin v1 / v2格式。
Jaeger gRPC格式。
SkyWalking架構(gòu)
[圖片上傳失敗...(image-92156f-1580045804024)]
SkyWalking采用組件式開發(fā),易于擴(kuò)展,主要組件作用如下:
Skywalking Agent: 采集tracing(調(diào)用鏈數(shù)據(jù))和metric(指標(biāo))信息并上報(bào),上報(bào)通過HTTP或者gRPC方式發(fā)送數(shù)據(jù)到Skywalking Collector
Skywalking Collector : 鏈路數(shù)據(jù)收集器,對(duì)agent傳過來的tracing和metric數(shù)據(jù)進(jìn)行整合分析通過Analysis Core模塊處理并落入相關(guān)的數(shù)據(jù)存儲(chǔ)中,同時(shí)會(huì)通過Query Core模塊進(jìn)行二次統(tǒng)計(jì)和監(jiān)控告警
Storage: Skywalking的存儲(chǔ),支持以ElasticSearch、Mysql、TiDB、H2等作為存儲(chǔ)介質(zhì)進(jìn)行數(shù)據(jù)存儲(chǔ)
UI: Web可視化平臺(tái),用來展示落地的數(shù)據(jù),目前官方采納了RocketBot作為SkyWalking的主UI
SkyWalking界面

儀表盤主要包含Service Dashboard和Database Dashboard
Service Dashboard內(nèi)分別有Global、Service、Endpoint、Instance面板,展示了全局以及服務(wù)、端點(diǎn)、實(shí)例的詳細(xì)信息
Database Dashboard內(nèi)可以展示數(shù)據(jù)庫的響應(yīng)時(shí)間、響應(yīng)時(shí)間分布、吞吐量、SLA、慢SQL等詳細(xì)信息,便于直觀展示數(shù)據(jù)庫狀態(tài)

- 拓?fù)鋱D

SkyWalking能夠根據(jù)獲取的數(shù)據(jù)自動(dòng)繪制服務(wù)之間的調(diào)用關(guān)系圖,并能識(shí)別常見的服務(wù)顯示在圖標(biāo)上,例如圖上的kafka、H2服務(wù)
每條連線的顏色反應(yīng)了服務(wù)之間的調(diào)用延遲情況,可以非常直觀的看到服務(wù)與服務(wù)之間的調(diào)用狀態(tài),連線中間的點(diǎn)能點(diǎn)擊,可顯示兩個(gè)服務(wù)之間鏈路的平均響應(yīng)時(shí)間、吞吐率以及SLA等信息
- 追蹤面板

能夠顯示請(qǐng)求的代碼內(nèi)部執(zhí)行情況,一個(gè)完整的請(qǐng)求都經(jīng)過了哪些服務(wù)、執(zhí)行了哪些代碼方法、每個(gè)方法的執(zhí)行時(shí)間、執(zhí)行狀態(tài)等詳細(xì)信息,快速定位代碼問題
-
告警面板
image.png
