思維導圖

文章已收錄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。
這篇文章就講到這裡了,感謝大家的閱讀。
覺得有用就點個贊吧,你的點贊是我創作的最大動力~
拒絕做一條鹹魚,我是一個努力讓大家記住的程式員。我們下期再見!!!
能力有限,如果有什麼錯誤或者不當之處,請大家批評指正,一起學習交流!