天天看點

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

思維導圖

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結
文章已收錄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的特點

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

比較重要的特點,我覺得是輕量高效,對代碼無侵入性。對于微服務,支援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的版本。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

第二步,解壓。找到config目錄下的application.yml檔案,然後修改配置。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

需要修改的配置内容如下:

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目錄下。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

第三步,啟動。在/bin目錄上一級,直接使用

./bin/startup.sh

啟動即可。啟動之後,可以使用

jps

指令檢視程序,可以看到這兩個java程式在運作狀态。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

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

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

可以看到mysql建了很多表。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

說明啟動成功了,打開配置對應的位址

http://192.168.0.109:8080/

,可以看到skywalking的web界面。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

三、整合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開發就這樣設定即可。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

接下來我按照這個配置,啟動一個Consumer工程和Provider工程,并且注冊到Nacos注冊中心。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

然後使用Consumer工程的接口調用Provider工程的接口,可以看到調用鍊的效果。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

非常清晰地看到服務之間調用的情況,耗時等等。其他還有很多功能就不一一介紹了,讀者可以自己探索一下。

四、談談架構設計

可能前面還有一些疑問,比如為什麼要設定GRPC的端口号,設定存儲倉庫為mysql,啟動之後有兩個java程序等等。不妨看看架構,一切問題都明白了。首先看官網的一張架構圖。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

可以看到主要有四個部分。

上面的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。

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結

這篇文章就講到這裡了,感謝大家的閱讀。

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

拒絕做一條鹹魚,我是一個努力讓大家記住的程式員。我們下期再見!!!

一篇文章帶你搞懂SkyWalking調用鍊追蹤架構思維導圖概述一、OpenTracing規範二、安裝部署三、整合SpringCloud工程四、談談架構設計總結
能力有限,如果有什麼錯誤或者不當之處,請大家批評指正,一起學習交流!