一、APM介紹
二、分布式鏈路追蹤
三、Apache Skywalking(Incubator)簡(jiǎn)介
四、SkyWalking 原理架構(gòu)圖
五、SkyWalking 核心模塊
六、SkyWalking服務(wù)端安裝
七、Skywalking Agent安裝
八、Skywalking UI 管理后臺(tái)介紹
一、APM介紹
APM (Application Performance Management )應(yīng)用性能管理 ,通過(guò)各種探針采集并上報(bào)數(shù)據(jù),收集關(guān)鍵指標(biāo),同時(shí)搭配數(shù)據(jù)展示以實(shí)現(xiàn)對(duì)應(yīng)用程序性能管理和故障管理的系統(tǒng)化解決方案。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,這里主要介紹 SkyWalking ,它是一款優(yōu)秀的國(guó)產(chǎn) APM 工具,包括了分布式追蹤、性能指標(biāo)分析、應(yīng)用和服務(wù)依賴分析等。
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í)行過(guò)程指標(biāo)和服務(wù)之間鏈路調(diào)用情況的監(jiān)控 ,APM更有利于深入代碼找到請(qǐng)求響應(yīng)“慢”的根本問(wèn)題,與Zabbix之類的監(jiān)控是互補(bǔ)關(guān)系。
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
視頻教程:https://doc.iocoder.cn/video/
二、分布式鏈路追蹤
下圖是常見(jiàn)的微服務(wù)的框架,4 個(gè)實(shí)例,2 個(gè) MySQL、1 個(gè) Redis。實(shí)際上它有兩次完全不同的請(qǐng)求進(jìn)來(lái):有一次的一個(gè)請(qǐng)求會(huì)訪問(wèn) Redis,再去訪問(wèn) MySQL;另外一個(gè)可能走到另外的服務(wù)上,然后直接去 MySQL。整個(gè)分布式追蹤的目的是什么?是為了讓我們最終在頁(yè)面上、UI上、和數(shù)據(jù)上能夠復(fù)現(xiàn)這個(gè)過(guò)程。我們要拿到整個(gè)完整的鏈路,包括精確的響應(yīng)時(shí)間,訪問(wèn)的方法、訪問(wèn)的 circle,訪問(wèn)的 Redis 的 key等,這些是我們?cè)谧龇植际阶粉櫟臅r(shí)候需要展現(xiàn)的一個(gè)完整的信息。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
項(xiàng)目地址:https://gitee.com/zhijiantianya/yudao-cloud
視頻教程:https://doc.iocoder.cn/video/
三、Apache Skywalking(Incubator)簡(jiǎn)介
分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8s、Mesos)架構(gòu)而設(shè)計(jì)。
Apache Skywalking(Incubator)專門(mén)為微服務(wù)架構(gòu)和云原生架構(gòu)系統(tǒng)而設(shè)計(jì)并且支持分布式鏈路追蹤的APM系統(tǒng)。Apache Skywalking(Incubator)通過(guò)加載 探針-非侵入式 的方式收集應(yīng)用調(diào)用鏈路信息,并對(duì)采集的調(diào)用鏈路信息進(jìn)行分析,生成應(yīng)用間關(guān)系和服務(wù)間關(guān)系以及服務(wù)指標(biāo)。Apache Skywalking (Incubating)目前支持多種語(yǔ)言,其中包括Java,.Net Core,Node.js和Go語(yǔ)言。另外社區(qū)還發(fā)展出了一個(gè)叫OpenTracing的組織,旨在推進(jìn)調(diào)用鏈監(jiān)控的一些規(guī)范和標(biāo)準(zhǔn)工作。
Skywalking支持從6個(gè)可視化維度剖析分布式系統(tǒng)的運(yùn)行情況。
總覽視圖(Global view)是應(yīng)用和組件的全局視圖,其中包括組件和應(yīng)用數(shù)量,應(yīng)用的告警波動(dòng),慢服務(wù)列表以及應(yīng)用吞吐量;
拓?fù)鋱D(topology view)從應(yīng)用依賴關(guān)系出發(fā),展現(xiàn)整個(gè)應(yīng)用的拓?fù)潢P(guān)系;
應(yīng)用視圖從單個(gè)應(yīng)用的角度,展現(xiàn)應(yīng)用的上下游關(guān)系,TopN的服務(wù)和服務(wù)器,JVM的相關(guān)信息以及對(duì)應(yīng)的主機(jī)信息。
服務(wù)視圖關(guān)注單個(gè)服務(wù)入口的運(yùn)行情況以及此服務(wù)的上下游依賴關(guān)系,依賴度,幫助用戶針對(duì)單個(gè)服務(wù)的優(yōu)化和監(jiān)控;
追蹤(trace)展現(xiàn)了調(diào)用的單次請(qǐng)求經(jīng)過(guò)的所有埋點(diǎn)以及每個(gè)埋點(diǎn)的執(zhí)行時(shí)長(zhǎng);
告警視圖(alarm)根據(jù)配置閾值針對(duì)應(yīng)用、服務(wù)器、服務(wù)進(jìn)行實(shí)時(shí)告警。
四、SkyWalking 原理架構(gòu)圖
五、SkyWalking 核心模塊
SkyWalking采用組件式開(kāi)發(fā),易于擴(kuò)展,主要組件作用如下:
1. Skywalking Agent :鏈路數(shù)據(jù)采集tracing(調(diào)用鏈數(shù)據(jù))和metric(指標(biāo))信息并上報(bào),上報(bào)通過(guò)HTTP或者gRPC方式發(fā)送數(shù)據(jù)到Skywalking Collector。
2. Skywalking Collector :鏈路數(shù)據(jù)收集器,對(duì)agent傳過(guò)來(lái)的tracing和metric數(shù)據(jù)進(jìn)行整合分析通過(guò)Analysis Core模塊處理并落入相關(guān)的數(shù)據(jù)存儲(chǔ)中,同時(shí)會(huì)通過(guò)Query Core模塊進(jìn)行二次統(tǒng)計(jì)和監(jiān)控告警。
3. Storage :Skywalking的存儲(chǔ),支持以ElasticSearch、Mysql、TiDB、H2等主流存儲(chǔ)作為存儲(chǔ)介質(zhì)進(jìn)行數(shù)據(jù)存儲(chǔ),H2僅作為臨時(shí)演示單機(jī)用。
4. SkyWalking UI :Web可視化平臺(tái),用來(lái)展示落地的數(shù)據(jù),目前官方采納了RocketBot作為SkyWalking的主UI。
本文通過(guò)Docker容器安裝Skywalking,并示例整合apisix網(wǎng)關(guān)、Spring Boot微服務(wù)項(xiàng)目進(jìn)行APM(Application Performance Management)應(yīng)用性能管理,檢測(cè)從接口網(wǎng)關(guān)到微服務(wù)實(shí)例、再到數(shù)據(jù)庫(kù)、緩存等存儲(chǔ)層之間的鏈路追蹤。
六、SkyWalking服務(wù)端安裝
安裝環(huán)境:
操作系統(tǒng):CentOS7,配置為4核8G
Docker版本:Docker version 19.03.12, build 48a66213fe
安裝工具:docker-compose,版本:docker-compose version 1.26.2, build eefe0d31
skywalking版本:8.1.0
elasticsearch版本:7.5.0
1、創(chuàng)建目錄
mkdir-p/data/ent/skywalking cd/data/ent/skywalking
2、編寫(xiě)docker-compose.yml
vimdocker-compose.yml #添加以下內(nèi)容 version:'3.8' services: elasticsearch: image:docker.elastic.co/elasticsearch/elasticsearch:7.5.0 container_name:elasticsearch restart:always ports: -9200:9200 healthcheck: test:["CMD-SHELL","curl--silent--faillocalhost:9200/_cluster/health||exit1"] interval:30s timeout:10s retries:3 start_period:40s environment: -discovery.type=single-node -bootstrap.memory_lock=true -"ES_JAVA_OPTS=-Xms512m-Xmx512m" -TZ=Asia/Shanghai ulimits: memlock: soft:-1 hard:-1 skywalking-oap: image:apache/skywalking-oap-server:8.1.0-es7 container_name:skywalking-oap depends_on: -elasticsearch links: -elasticsearch restart:always ports: -11800:11800 -12800:12800 healthcheck: test:["CMD-SHELL","/skywalking/bin/swctl"] interval:30s timeout:10s retries:3 start_period:40s environment: TZ:Asia/Shanghai SW_STORAGE:elasticsearch7 SW_STORAGE_ES_CLUSTER_NODES:elasticsearch:9200 skywalking-ui: image:apache/skywalking-ui:8.1.0 container_name:skywalking-ui depends_on: -skywalking-oap links: -skywalking-oap restart:always ports: -28080:8080 environment: TZ:Asia/Shanghai SW_OAP_ADDRESS:skywalking-oap:12800
3、啟動(dòng)服務(wù)
#啟動(dòng)(docker和docker-compose的安裝不再詳介紹) docker-composeup-d
4、開(kāi)放端口
firewall-cmd--zone=public--add-port=11800/tcp--permanent firewall-cmd--zone=public--add-port=12800/tcp--permanent firewall-cmd--zone=public--add-port=28080/tcp--permanent firewall-cmd--reload
5、訪問(wèn)skywalking ui后臺(tái),訪問(wèn)地址為:http://服務(wù)器ip:28080
七、Skywalking Agent安裝
以java agent為例,下載skywalking項(xiàng)目,地址:https://www.apache.org/dyn/closer.cgi/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz
解壓下載后的文件,將agent文件夾復(fù)制至java項(xiàng)目下,執(zhí)行java項(xiàng)目時(shí),使用javaagent開(kāi)啟skywalking agent
java-javaagent:agent/skywalking-agent.jar=agent.service_name=sab-service,collector.backend_service=192.168.35.226:11800-jarsab-manager.war--spring.profiles.active=local_dev
其中,agent.service_name為要注冊(cè)到skywalking的服務(wù)名稱,collector.backend_service為skywalking grpc注冊(cè)地址。
啟動(dòng)無(wú)報(bào)錯(cuò),在skywalking ui后臺(tái)可查看服務(wù)是否已注冊(cè)成功到skywalking。
八、Skywalking UI 管理后臺(tái)介紹
1、首頁(yè)
儀表盤(pán):查看被監(jiān)控服務(wù)的運(yùn)行狀態(tài)
拓?fù)鋱D:以拓?fù)鋱D的方式展現(xiàn)服務(wù)直接的關(guān)系,并以此為入口查看相關(guān)信息
追蹤:以接口列表的方式展現(xiàn),追蹤接口內(nèi)部調(diào)用過(guò)程
性能剖析:?jiǎn)为?dú)端點(diǎn)進(jìn)行采樣分析,并可查看堆棧信息
告警:觸發(fā)告警的告警列表,包括實(shí)例,請(qǐng)求超時(shí)等。
自動(dòng)刷新:自動(dòng)刷新當(dāng)前數(shù)據(jù)內(nèi)容
2、儀表盤(pán)
**查看全局服務(wù)基本性能指標(biāo)**
第一欄:不同內(nèi)容主題的監(jiān)控面板,應(yīng)用/數(shù)據(jù)庫(kù)/容器等
第二欄:操作,包括編輯/導(dǎo)出當(dāng)前數(shù)據(jù)/導(dǎo)入展示數(shù)據(jù)/不同服務(wù)端點(diǎn)篩選展示
第三欄:不同緯度展示,服務(wù)/實(shí)例/端點(diǎn)
2.1、參數(shù)說(shuō)明
2.1.1 Global全局維度
第一欄:Global、Server、Instance、Endpoint不同展示面板,可以調(diào)整內(nèi)部?jī)?nèi)容
Services load:服務(wù)每分鐘請(qǐng)求數(shù)
Slow Services:慢響應(yīng)服務(wù),單位ms
Un-Health services(Apdex):Apdex性能指標(biāo),1為滿分。
Global Response Latency:百分比響應(yīng)延時(shí),不同百分比的延時(shí)時(shí)間,單位ms
Global Heatmap:服務(wù)響應(yīng)時(shí)間熱力分布圖,根據(jù)時(shí)間段內(nèi)不同響應(yīng)時(shí)間的數(shù)量顯示顏色深度
底部欄:展示數(shù)據(jù)的時(shí)間區(qū)間,點(diǎn)擊可以調(diào)整。
2.1.2 Service實(shí)例維度
Service Apdex(數(shù)字):當(dāng)前服務(wù)的評(píng)分
Service Apdex(折線圖):不同時(shí)間的Apdex評(píng)分
Successful Rate(數(shù)字):請(qǐng)求成功率
Successful Rate(折線圖):不同時(shí)間的請(qǐng)求成功率
Servce Load(數(shù)字):每分鐘請(qǐng)求數(shù)
Servce Load(折線圖):不同時(shí)間的每分鐘請(qǐng)求數(shù)
Service Avg Response Times:平均響應(yīng)延時(shí),單位ms
Global Response Time Percentile:百分比響應(yīng)延時(shí)
Servce Instances Load:每個(gè)服務(wù)實(shí)例的每分鐘請(qǐng)求數(shù)
Show Service Instance:每個(gè)服務(wù)實(shí)例的最大延時(shí)
Service Instance Successful Rate:每個(gè)服務(wù)實(shí)例的請(qǐng)求成功率
2.1.3 Instance實(shí)例維度
Service Instance Load:當(dāng)前實(shí)例的每分鐘請(qǐng)求數(shù)
Service Instance Successful Rate:當(dāng)前實(shí)例的請(qǐng)求成功率
Service Instance Latency:當(dāng)前實(shí)例的響應(yīng)延時(shí)
JVM CPU:jvm占用CPU的百分比
JVM Memory(Java Service):JVM內(nèi)存占用大小,單位MB
JVM GC Time:JVM垃圾回收時(shí)間,包含YGC和OGC
JVM GC Count:JVM垃圾回收次數(shù),包含YGC和OGC
JVM Thread Count(Java Service):JVM生成的線程數(shù)
CLR XX:類似JVM虛擬機(jī)參數(shù)
2.1.4 Endpoint端點(diǎn)維度
Endpoint Load in Current Service:每個(gè)端點(diǎn)的每分鐘請(qǐng)求數(shù)
Slow Endpoints in Current Service:每個(gè)端點(diǎn)的最慢請(qǐng)求時(shí)間,單位ms
Successful Rate in Current Service:每個(gè)端點(diǎn)的請(qǐng)求成功率
Endpoint Load:當(dāng)前端點(diǎn)每個(gè)時(shí)間段的請(qǐng)求數(shù)據(jù)
Endpoint Avg Response Time:當(dāng)前端點(diǎn)每個(gè)時(shí)間段的請(qǐng)求行響應(yīng)時(shí)間
Endpoint Response Time Percentile:當(dāng)前端點(diǎn)每個(gè)時(shí)間段的響應(yīng)時(shí)間占比
Endpoint Successful Rate:當(dāng)前端點(diǎn)每個(gè)時(shí)間段的請(qǐng)求成功率
3、拓?fù)鋱D
SkyWalking能夠根據(jù)獲取的數(shù)據(jù)自動(dòng)繪制服務(wù)之間的調(diào)用關(guān)系圖,并能識(shí)別常見(jiàn)的服務(wù)顯示在圖標(biāo)上。每條連線的顏色 反應(yīng)了服務(wù)之間的調(diào)用延遲 情況,可以非常直觀的看到服務(wù)與服務(wù)之間的調(diào)用狀態(tài),連線中間的點(diǎn)能點(diǎn)擊,可顯示兩個(gè)服務(wù)之間鏈路的平均響應(yīng)時(shí)間、吞吐率以及SLA等信息。
1:選擇不同的服務(wù)關(guān)聯(lián)拓?fù)?/p>
2:查看單個(gè)服務(wù)相關(guān)內(nèi)容
3:服務(wù)間連接情況
4:分組展示服務(wù)拓?fù)?/p>
4、追蹤
顯示請(qǐng)求的響應(yīng)內(nèi)部執(zhí)行情況,一個(gè)完整的請(qǐng)求都經(jīng)過(guò)了哪些服務(wù)、執(zhí)行了哪些代碼方法、每個(gè)方法的執(zhí)行時(shí)間、執(zhí)行狀態(tài)等詳細(xì)信息,快速定位代碼問(wèn)題。
可通過(guò)選擇服務(wù)、實(shí)例、狀態(tài)和端點(diǎn)名稱來(lái)搜索調(diào)用鏈路,
可以點(diǎn)擊標(biāo)記紅色的端點(diǎn),查看異常信息
5、性能剖析
新建需要分析的端點(diǎn),在左側(cè)列表顯示任務(wù)及對(duì)應(yīng)的采樣請(qǐng)求,右側(cè)顯示端點(diǎn)鏈路及每個(gè)端點(diǎn)的堆棧信息。
6、告警
不同維度告警列表,可分為服務(wù)、端點(diǎn)和實(shí)例。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7002瀏覽量
88938 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9123瀏覽量
85322 -
APM
+關(guān)注
關(guān)注
1文章
71瀏覽量
13008
原文標(biāo)題:分布式追蹤與監(jiān)控:Skywalking介紹
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論