開發與維運

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

思維導圖

在這裡插入圖片描述

文章已收錄Github精選,歡迎Starhttps://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。
在這裡插入圖片描述
這篇文章就講到這裡了,感謝大家的閱讀。

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *