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