一篇文章帶你搞懂SkyWalking調用鏈追蹤框架


https://developer.aliyun.com/article/776477

簡介: 介紹了Skywalking的作用,安裝方法,架構設計等等

思維導圖

在這里插入圖片描述

文章已收錄Github精選,歡迎Star:https://github.com/yehongzhi/learningSummary

概述

skywalking又是一個優秀的國產開源框架,2015年由個人吳晟(華為開發者)開源 , 2017年加入Apache孵化器。

skywalking是分布式系統的應用程序性能監視工具,專為微服務、雲原生架構和基於容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平台和應用性能管理系統。提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案(官網介紹)。

一、OpenTracing規范

OpenTracing是一種分布式系統鏈路跟蹤的設計原則、規范、標准。

類似JDBC的規范,主要為了提供一套標准的JDBC API。OpenTracing也是一樣,是為了統一提供一套鏈路追蹤的標准API,所制定的一種規范。

OpenTracing通過提供平台無關、廠商無關的API,使得開發人員能夠方便的添加(或更換)追蹤系統的實現。

類似於JDBC的規范由各個數據庫廠商實現一樣,OpenTracing規范也是有很多實現的產品,下面介紹一下落地的產品。

1.1 實現OpenTracing的產品

Jaeger:Jaeger是由Uber公司開源發布的,受到Dapper和OpenZipkin啟發。后端使用Go語言,前端(用戶界面)使用React 。優點是上傳采用的是udp傳輸,效率高速度快。缺點就是丟包,影響了整條調用鏈,而且不支持告警和JVM監控。

Zipkin:SpringCloud官方推薦,可以與SpringCloud有良好集成,實現方式是攔截請求,發送(http)數據到zipkin服務。缺點在於不支持告警,不支持JVM監控,通信方式使用Http請求向Zipkin上報信息,比較耗性能。

SkyWalking:國人(吳晟)開發,支持dubbo,SpringCloud,SpringBoot集成,代碼無侵入,通信方式采用GRPC,性能較好,實現方式是java探針,支持告警,支持JVM監控,支持全局調用統計等等,功能較完善。缺點是依賴較多,需要ElasticSearch,JDK環境,Nacos注冊中心等。

1.2 skywalking的特點

在這里插入圖片描述
比較重要的特點,我覺得是輕量高效,對代碼無侵入性。對於微服務,支持dubbo,SpringBoot,SpringCloud集成。

二、安裝部署

環境:CentOS 7.5,MySQL 5.7.26,Nacos 1.3.1(注冊中心),JDK 1.8,skywalking 8.1.0。

除了skywalking之外,其他需要用到的組件我就不介紹怎么安裝了,比較簡單。安裝skywalking其實很簡單,下面一步一步來講解。

第一步,下載。在官網下載即可,選擇8.1.0版本,如果要使用ES作為存儲倉庫,那就要選擇es7的版本。
在這里插入圖片描述
第二步,解壓。找到config目錄下的application.yml文件,然后修改配置。
在這里插入圖片描述
需要修改的配置內容如下:

cluster: selector: ${SW_CLUSTER:nacos} #單機模式 standalone: #使用nacos作為注冊中心 nacos: # 注冊到nacos的服務名 serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} #nacos服務端的地址 hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.0.105:8848} # Nacos Configuration namespace命名空間 namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"} core: selector: ${SW_CORE:default} default: #skywalking服務端的REST綁定的IP restHost: ${SW_CORE_REST_HOST:192.168.0.107} #skywalking服務端的REST調用的端口 restPort: ${SW_CORE_REST_PORT:12800} #skywalking服務端GRPC通信綁定的IP gRPCHost: ${SW_CORE_GRPC_HOST:192.168.0.107} #skywalking服務端GRPC通信綁定的端口 gRPCPort: ${SW_CORE_GRPC_PORT:11800} storage: #選擇使用mysql selector: ${SW_STORAGE:mysql} #默認使用h2,不會持久化,重啟skyWalking之前的數據會丟失 h2: driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource} url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db} user: ${SW_STORAGE_H2_USER:sa} metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000} #使用mysql作為持久化存儲的倉庫 mysql: properties: #數據庫連接地址 jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://192.168.0.107:3306/swtest"} #用戶名 dataSource.user: ${SW_DATA_SOURCE_USER:yehongzhi} #密碼 dataSource.password: ${SW_DATA_SOURCE_PASSWORD:Yehongzhi520.}

默認是web管理界面是8080端口,如果要修改端口號,可以修改webapp目錄下的webapp.yml。

#web管理界面的端口 server: port: 8080

第三步,添加mysql數據驅動包。因為在lib目錄下是沒有mysql數據驅動包的,所以修改完配置啟動是會報錯,啟動失敗的。為什么作者不提前在lib目錄下放一個數據驅動包呢,還要我們手動去添加。網上貌似沒有這個問題的討論,我的理解是因為框架不知道你用的是什么版本的mysql數據庫,所以不知道放什么版本的數據庫驅動包,使用者用的是什么版本的mysql,就自己放對應的數據庫驅動包。

我這里用的是5.7.26版本的mysql,所以我下載了一個8.0.17的驅動包,添加到/oap-libs目錄下。
在這里插入圖片描述
第三步,啟動。在/bin目錄上一級,直接使用./bin/startup.sh啟動即可。啟動之后,可以使用jps命令查看進程,可以看到這兩個java程序在運行狀態。

打開配置的Nacos控制台,可以看到服務列表注冊了名為“SkyWalking_OAP_Cluster”的服務。

可以看到mysql建了很多表。
在這里插入圖片描述
說明啟動成功了,打開配置對應的地址http://192.168.0.109:8080/,可以看到skywalking的web界面。
在這里插入圖片描述

三、整合SpringCloud工程

整合其實很簡單,不需要引入依賴,也不需要添加任何代碼,我們只需要在啟動jar包時配置參數即可。

-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=consumer -Dskywalking.collector.backend_service=192.168.0.109:11800 #解釋一下上面這三個參數的意思 #-javaagent:填的是skywalking-agent.jar的本地磁盤的路徑 #-Dskywalking.agent.service_name:在skywalking上顯示的服務名 #-Dskywalking.collector.backend_service:skywalking的collector服務的IP及端口

我們一般用IDEA開發就這樣設置即可。
在這里插入圖片描述
接下來我按照這個配置,啟動一個Consumer工程和Provider工程,並且注冊到Nacos注冊中心。
在這里插入圖片描述
然后使用Consumer工程的接口調用Provider工程的接口,可以看到調用鏈的效果。
在這里插入圖片描述
非常清晰地看到服務之間調用的情況,耗時等等。其他還有很多功能就不一一介紹了,讀者可以自己探索一下。

四、談談架構設計

可能前面還有一些疑問,比如為什么要設置GRPC的端口號,設置存儲倉庫為mysql,啟動之后有兩個java進程等等。不妨看看架構,一切問題都明白了。首先看官網的一張架構圖。
在這里插入圖片描述
可以看到主要有四個部分。

上面的Agent :負責從應用中,收集tracing(調用鏈數據)和metric(指標),發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數據,傳遞給SkyWalking OAP 服務器。

中間的SkyWalking OAP:負責接收 Agent 發送的 Tracing 和Metric的數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。

左邊的SkyWalking UI:負責提供web控制台,查看鏈路,查看各種指標,性能等等。

右邊的Storage:數據存儲。目前支持ES、MySQL、H2等多種存儲器。

總結

這篇文章就介紹到這里,這里僅僅只是入門,簡單使用Skywalking,實際上里面還有很多功能我沒有介紹,有興趣的同學可以按照上面的教程安裝部署,然后自己探索一下。

在現在微服務架構比較流行的環境下,如果沒有一個調用鏈追蹤框架,會導致很難排查線上服務調用的問題。skywalking是目前發展勢頭最快的技術框架的技術框架,因為對代碼是無侵入性的,所以目前很多公司都采用Skywalking。
在這里插入圖片描述
這篇文章就講到這里了,感謝大家的閱讀。

覺得有用就點個贊吧,你的點贊是我創作的最大動力~

拒絕做一條咸魚,我是一個努力讓大家記住的程序員。我們下期再見!!!
在這里插入圖片描述

能力有限,如果有什么錯誤或者不當之處,請大家批評指正,一起學習交流!

 
分享:
推薦關注:
· 手慢無!雲服務器免費領取,實時計算凈省3258元 · 有獎體驗!3分鍾完成任務,立領10元無門檻代金券! · 每周二看直播,學最新阿里開源技術 · 10萬人在學的雲原生技術公開課,免費領取你的知識好禮

版權聲明:本文內容由阿里雲實名注冊用戶自發貢獻,版權歸原作者所有,阿里雲開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM