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