1-12、Spring Cloud Alibaba 鏈路追蹤

1. 鏈路追蹤概述

什么是鏈路追蹤

微服務(wù)架構(gòu)是通過業(yè)務(wù)來劃分服務(wù)的,使用 REST 調(diào)用。對外暴露的一個(gè)接口,可能需要很多個(gè)服務(wù)協(xié)同才能完成這個(gè)接口功能,如果鏈路上任何一個(gè)服務(wù)出現(xiàn)問題或者網(wǎng)絡(luò)超時(shí),都會形成導(dǎo)致接口調(diào)用失敗。隨著業(yè)務(wù)的不斷擴(kuò)張,服務(wù)之間互相調(diào)用會越來越復(fù)雜。

隨著服務(wù)的越來越多,對調(diào)用鏈的分析會越來越復(fù)雜。它們之間的調(diào)用關(guān)系也許如下:

面對以上情況,我們就需要一些可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時(shí)候,能夠快速定位和解決問題,這就是所謂的 APM(應(yīng)用性能管理)。

什么是 SkyWalking

目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking;Apache SkyWalking 是觀察性分析平臺和應(yīng)用性能管理系統(tǒng)。提供分布式追蹤、服務(wù)網(wǎng)格遙測分析、度量聚合和可視化一體化解決方案。

  • Skywalking Agent: 使用 JavaAgent 做字節(jié)碼植入,無侵入式的收集,并通過 HTTP 或者 gRPC 方式發(fā)送數(shù)據(jù)到 SkyWalking Collector。
  • SkyWalking Collector: 鏈路數(shù)據(jù)收集器,對 agent 傳過來的數(shù)據(jù)進(jìn)行整合分析處理并落入相關(guān)的數(shù)據(jù)存儲中。
  • Storage: SkyWalking 的存儲,時(shí)間更迭,SW 已經(jīng)開發(fā)迭代到了 6.x 版本,在 6.x 版本中支持以 ElasticSearch(支持 6.x)、Mysql、TiDB、H2、作為存儲介質(zhì)進(jìn)行數(shù)據(jù)存儲。
  • UI: Web 可視化平臺,用來展示落地的數(shù)據(jù)。

SkyWalking 功能特性

  • 多種監(jiān)控手段,語言探針和服務(wù)網(wǎng)格(Service Mesh)
  • 多語言自動探針,Java,.NET Core 和 Node.JS
  • 輕量高效,不需要大數(shù)據(jù)
  • 模塊化,UI、存儲、集群管理多種機(jī)制可選
  • 支持告警
  • 優(yōu)秀的可視化方案

2. SkyWalking 服務(wù)端配置

官方docker-compose

基于 Docker 安裝 ElasticSearch

官方推薦的方案是 ElasticSearch ,所以我們需要先安裝 ElasticSearch。

docker-compose.yml

version: '3.3'
services:
  elasticsearch:
    image: wutang/elasticsearch-shanghai-zone:6.3.2
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      cluster.name: elasticsearch

其中,9200 端口號為 SkyWalking 配置 ElasticSearch 所需端口號,cluster.name Elasticsearch集群名稱,運(yùn)行Skywalking需要與此名稱保持一致。

測試是否啟動成功

瀏覽器訪問 http://192.168.198.131:9200/ ,瀏覽器返回如下信息即表示成功啟動

2. 安裝SkyWalking

這里采用docker-compose的方式部署skywalking。部署所用的docker-compose.yml如下,skywalking-oap中掛載的配置文件volume來自于:https://github.com/apache/incubator-skywalking/tree/master/docker中的config目錄。
這里用的是最新版本6.1.0

skywalking文檔中也提示重要提示:請?jiān)赨I上選擇時(shí)區(qū),使其與OAP后端服務(wù)器的時(shí)區(qū)匹配。

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:6.8.0
    container_name: skywalking-es
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      discovery.type: single-node
      TZ: Asia/Shanghai
  oap:
    image: apache/skywalking-oap-server:6.1.0
    container_name: skywalking-oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    #前邊為外網(wǎng)端口號,后邊為容器應(yīng)用端口號
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      # 設(shè)置時(shí)區(qū)
      TZ: Asia/Shanghai
   # volumes:
   #   - /home/skywalking/apache-skywalking-apm-bin/config/application.yml
     # - ./config:/skywalking/config:ro
  ui:
    image: apache/skywalking-ui:6.1.0
    container_name: skywalking-ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 18080:8080
    #設(shè)置環(huán)境,配置覆蓋yml的配置
    environment:
      collector.ribbon.listOfServers: oap:12800

訪問 ip:18080 就可以登錄了
默認(rèn)的用戶名密碼為:admin/admin,登錄成功后,效果如下圖

由于使用Agent探針,所以需要下載SkyWalking。官方已經(jīng)為我們準(zhǔn)備好了編譯過的服務(wù)端版本,下載地址為 http://skywalking.apache.org/downloads/,這里我們需要下載 6.x releases 版本

配置 SkyWalking

下載完成后解壓縮,進(jìn)入 apache-skywalking-apm-incubating/config 目錄并修改 application.yml 配置文件

image

這里需要做三件事:

  • 注釋 H2 存儲方案
  • 啟用 ElasticSearch 存儲方案
  • 修改 ElasticSearch 服務(wù)器地址

Java Agent 服務(wù)器探針

參考官網(wǎng)給出的幫助 Setup java agent,我們需要使用官方提供的探針為我們達(dá)到監(jiān)控的目的,按照實(shí)際情況我們需要實(shí)現(xiàn)三種部署方式

  • IDEA 部署探針
  • Java 啟動方式部署探針(我們是 Spring Boot 應(yīng)用程序,需要使用 java -jar 的方式啟動應(yīng)用)
  • Docker 啟動方式部署探針(需要做到一次構(gòu)建到處運(yùn)行的持續(xù)集成效果,本章節(jié)暫不提供解決方案,到后面的實(shí)戰(zhàn)環(huán)節(jié)再實(shí)現(xiàn))

探針文件在 apache-skywalking-apm-incubating/agent 目錄下

IDEA 部署探針

繼續(xù)之前的案例項(xiàng)目,創(chuàng)建一個(gè)名為 hello-spring-cloud-external-skywalking 的目錄,并將 agent 整個(gè)目錄拷貝進(jìn)來

修改項(xiàng)目的 VM 運(yùn)行參數(shù),點(diǎn)擊菜單欄中的 Run -> EditConfigurations...,此處我們以 nacos-provider 項(xiàng)目為例,修改參數(shù)如下

-javaagent:D:\Workspace\Others\hello-spring-cloud-alibaba\hello-spring-cloud-external-skywalking\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=nacos-provider
-Dskywalking.collector.backend_service=192.168.198.131:11800
  • -javaagent:用于指定探針路徑
  • -Dskywalking.agent.service_name:用于重寫 agent/config/agent.config 配置文件中的服務(wù)名
  • -Dskywalking.collector.backend_service:用于重寫 agent/config/agent.config 配置文件中的服務(wù)地址

Java 啟動方式

java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=nacos-provider -Dskywalking.collector.backend_service=192.168.198.131:11800 -jar yourApp.jar

測試監(jiān)控

啟動 nacos-provider 項(xiàng)目,通過觀察日志可以發(fā)現(xiàn),已經(jīng)成功加載探針

訪問之前寫好的接口 http://localhost:9000/nacos-consumer-feign/echo/hi?token=123
之后再刷新 SkyWalking Web UI,你會發(fā)現(xiàn) Service 與 Endpoint 已經(jīng)成功檢測到了

至此,表示 SkyWalking 鏈路追蹤配置成功

訪問路徑:http://localhost:9000/nacos-consumer-feign/echo/hi?token=123

上圖中展示了服務(wù)在一定時(shí)間范圍內(nèi)的相關(guān)數(shù)據(jù),包括:

服務(wù)可用性指標(biāo) SLA
每分鐘平均響應(yīng)數(shù)
平均響應(yīng)時(shí)間
服務(wù)進(jìn)程 PID
服務(wù)所在物理機(jī)的 IP、Host、OS
運(yùn)行時(shí) CPU 使用率
運(yùn)行時(shí)堆內(nèi)存使用率
運(yùn)行時(shí)非堆內(nèi)存使用率
GC 情況

附:Maven Assembly 插件

什么是 Assembly Plugin

Assembly 插件目的是提供一個(gè)把工程依賴元素、模塊、網(wǎng)站文檔等其他文件存放到單個(gè)歸檔文件里。

Assembly 支持的歸檔文件類型

  • zip
  • tar.gz
  • tar.bz2
  • jar
  • dir
  • war

使用步驟

此處以將 SkyWalking 探針打包為 tar.gz 為例,為后期持續(xù)集成時(shí)構(gòu)建 Docker 鏡像做好準(zhǔn)備

POM

pom.xml 中增加插件配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <!-- 配置執(zhí)行器 -->
                <execution>
                    <id>make-assembly</id>
                    <!-- 綁定到 package 生命周期階段上 -->
                    <phase>package</phase>
                    <goals>
                        <!-- 只運(yùn)行一次 -->
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <finalName>skywalking</finalName>
                        <descriptors>
                            <!-- 配置描述文件路徑 -->
                            <descriptor>src/main/resources/assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

assembly.xml

創(chuàng)建 src/main/resources/assembly.xml 配置文件

<assembly>
    <id>6.0.0-Beta</id>
    <formats>
        <!-- 打包的文件格式,支持 zip、tar.gz、tar.bz2、jar、dir、war -->
        <format>tar.gz</format>
    </formats>
    <!-- tar.gz 壓縮包下是否生成和項(xiàng)目名相同的根目錄,有需要請?jiān)O(shè)置成 true -->
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <!-- 是否把本項(xiàng)目添加到依賴文件夾下,有需要請?jiān)O(shè)置成 true -->
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <!-- 將 scope 為 runtime 的依賴包打包 -->
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <!-- 設(shè)置需要打包的文件路徑 -->
            <directory>agent</directory>
            <!-- 打包后的輸出路徑 -->
            <outputDirectory></outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

打包

mvn clean package
mvn clean install
  • package:會在 target 目錄下創(chuàng)建名為 skywalking-6.0.0-Beta.tar.gz 的壓縮包
  • install:會在本地倉庫目錄下創(chuàng)建名為 hello-spring-cloud-external-skywalking-1.0.0-SNAPSHOT-6.0.0-Beta.tar.gz 的壓縮包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容