美文网首页
12.Spring Cloud Alibaba 链路追踪

12.Spring Cloud Alibaba 链路追踪

作者: Zal哥哥 | 来源:发表于2020-09-22 22:56 被阅读0次

    1. 链路追踪概述

    什么是链路追踪

    微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

    image

    随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:

    image

    面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的 APM(应用性能管理)。

    什么是 SkyWalking

    目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking;Apache SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

    image
    • Skywalking Agent: 使用 JavaAgent 做字节码植入,无侵入式的收集,并通过 HTTP 或者 gRPC 方式发送数据到 SkyWalking Collector。
    • SkyWalking Collector: 链路数据收集器,对 agent 传过来的数据进行整合分析处理并落入相关的数据存储中。
    • Storage: SkyWalking 的存储,时间更迭,SW 已经开发迭代到了 6.x 版本,在 6.x 版本中支持以 ElasticSearch(支持 6.x)、Mysql、TiDB、H2、作为存储介质进行数据存储。
    • UI: Web 可视化平台,用来展示落地的数据。

    SkyWalking 功能特性

    • 多种监控手段,语言探针和服务网格(Service Mesh)
    • 多语言自动探针,Java,.NET Core 和 Node.JS
    • 轻量高效,不需要大数据
    • 模块化,UI、存储、集群管理多种机制可选
    • 支持告警
    • 优秀的可视化方案

    2. SkyWalking 服务端配置

    官方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集群名称,运行Skywalking需要与此名称保持一致。

    测试是否启动成功

    浏览器访问 http://192.168.198.131:9200/ ,浏览器返回如下信息即表示成功启动

    image

    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文档中也提示重要提示:请在UI上选择时区,使其与OAP后端服务器的时区匹配。

    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
        #前边为外网端口号,后边为容器应用端口号
        ports:
          - 11800:11800
          - 12800:12800
        environment:
          # 设置时区
          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
        #设置环境,配置覆盖yml的配置
        environment:
          collector.ribbon.listOfServers: oap:12800
    
    

    访问 ip:18080 就可以登录了
    默认的用户名密码为:admin/admin,登录成功后,效果如下图

    image

    由于使用Agent探针,所以需要下载SkyWalking。官方已经为我们准备好了编译过的服务端版本,下载地址为 http://skywalking.apache.org/downloads/,这里我们需要下载 6.x releases 版本

    配置 SkyWalking

    下载完成后解压缩,进入 apache-skywalking-apm-incubating/config 目录并修改 application.yml 配置文件

    image

    这里需要做三件事:

    • 注释 H2 存储方案
    • 启用 ElasticSearch 存储方案
    • 修改 ElasticSearch 服务器地址

    Java Agent 服务器探针

    参考官网给出的帮助 Setup java agent,我们需要使用官方提供的探针为我们达到监控的目的,按照实际情况我们需要实现三种部署方式

    • IDEA 部署探针
    • Java 启动方式部署探针(我们是 Spring Boot 应用程序,需要使用 java -jar 的方式启动应用)
    • Docker 启动方式部署探针(需要做到一次构建到处运行的持续集成效果,本章节暂不提供解决方案,到后面的实战环节再实现)

    探针文件在 apache-skywalking-apm-incubating/agent 目录下

    image

    IDEA 部署探针

    继续之前的案例项目,创建一个名为 hello-spring-cloud-external-skywalking 的目录,并将 agent 整个目录拷贝进来

    image

    修改项目的 VM 运行参数,点击菜单栏中的 Run -> EditConfigurations...,此处我们以 nacos-provider 项目为例,修改参数如下

    -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
    
    
    image
    • -javaagent:用于指定探针路径
    • -Dskywalking.agent.service_name:用于重写 agent/config/agent.config 配置文件中的服务名
    • -Dskywalking.collector.backend_service:用于重写 agent/config/agent.config 配置文件中的服务地址

    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
    
    

    测试监控

    启动 nacos-provider 项目,通过观察日志可以发现,已经成功加载探针

    image

    访问之前写好的接口 http://localhost:9000/nacos-consumer-feign/echo/hi?token=123
    之后再刷新 SkyWalking Web UI,你会发现 Service 与 Endpoint 已经成功检测到了

    image image

    至此,表示 SkyWalking 链路追踪配置成功

    image

    访问路径:http://localhost:9000/nacos-consumer-feign/echo/hi?token=123

    image image image image

    上图中展示了服务在一定时间范围内的相关数据,包括:

    服务可用性指标 SLA
    每分钟平均响应数
    平均响应时间
    服务进程 PID
    服务所在物理机的 IP、Host、OS
    运行时 CPU 使用率
    运行时堆内存使用率
    运行时非堆内存使用率
    GC 情况

    附:Maven Assembly 插件

    什么是 Assembly Plugin

    Assembly 插件目的是提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。

    Assembly 支持的归档文件类型

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

    使用步骤

    此处以将 SkyWalking 探针打包为 tar.gz 为例,为后期持续集成时构建 Docker 镜像做好准备

    POM

    pom.xml 中增加插件配置

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <!-- 配置执行器 -->
                    <execution>
                        <id>make-assembly</id>
                        <!-- 绑定到 package 生命周期阶段上 -->
                        <phase>package</phase>
                        <goals>
                            <!-- 只运行一次 -->
                            <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

    创建 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 压缩包下是否生成和项目名相同的根目录,有需要请设置成 true -->
        <includeBaseDirectory>false</includeBaseDirectory>
        <dependencySets>
            <dependencySet>
                <!-- 是否把本项目添加到依赖文件夹下,有需要请设置成 true -->
                <useProjectArtifact>false</useProjectArtifact>
                <outputDirectory>lib</outputDirectory>
                <!-- 将 scope 为 runtime 的依赖包打包 -->
                <scope>runtime</scope>
            </dependencySet>
        </dependencySets>
        <fileSets>
            <fileSet>
                <!-- 设置需要打包的文件路径 -->
                <directory>agent</directory>
                <!-- 打包后的输出路径 -->
                <outputDirectory></outputDirectory>
            </fileSet>
        </fileSets>
    </assembly>
    
    

    打包

    mvn clean package
    mvn clean install
    
    
    • package:会在 target 目录下创建名为 skywalking-6.0.0-Beta.tar.gz 的压缩包
    • install:会在本地仓库目录下创建名为 hello-spring-cloud-external-skywalking-1.0.0-SNAPSHOT-6.0.0-Beta.tar.gz 的压缩包

    链接:https://www.jianshu.com/p/f31a0c82123d

    相关文章

      网友评论

          本文标题:12.Spring Cloud Alibaba 链路追踪

          本文链接:https://www.haomeiwen.com/subject/gtrcektx.html