分布式链路跟踪—SkyWalking

本文详细介绍了SkyWalking的应用性能管理功能,包括其逻辑架构和部署步骤,强调了在生产环境中使用MySQL作为数据存储的配置。此外,还提供了.NET Core微服务与SkyWalking集成的方法,包括安装依赖、配置SkyWalkingAgent和设置环境变量。通过示例展示了SkyWalking如何监控和诊断分布式系统的性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 基本介绍

在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的、小的模块或者重用已经有的模块来构建复杂的系统。随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题。

SkyWalking 是一款 APM(应用性能管理),包括了分布式追踪、性能指标分析、应用和服务依赖分析,用于追踪、监控和诊断大型分布式系统,尤其是容器和云原生下的微服务系统,解决分布式架构中复杂的服务定位和性能问题。

SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。整体架构图如下:
在这里插入图片描述
探针 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。
平台后端, 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
存储 通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统.

UI 一个基于接口高度定制化的 Web 系统,用户可以可视化查看和管理 SkyWalking 数据

2. 部署

2.1 安装

SkyWalking的官网地址如下:Apache SkyWalking
SkyWalking的github地址如下:GitHub - apache/skywalking: APM, Application Performance Monitoring System

SkyWalking 安装部署首先需要从官网下载安装包 Downloads | Apache SkyWalking,目前 SkyWalking 已经更新至v9.0.0版本,以下示例基于此版本。
在这里插入图片描述
下载下来的安装包是.tar.gz格式的,使用以下命令进行解压

tar -zxf apache-skywalking-apm-9.0.0.tar.gz 

在这里插入图片描述
进入解压后文件夹中的 bin 文件夹,可以看到启动文件
在这里插入图片描述
Linux 下执行 ./startup.sh 文件即可,下面可以看到 SkyWalking 后端和界面两个应用已经成功启动。
在这里插入图片描述
如果是 windows下,则执行 startup.bat 文件即可。

启动后,SkyWalking 默认占用8080, 10800, 11800, 12800端口,其中8080端口是 SkyWalking UI 的端口,可以通过以下地址查看:http://localhost:8080/
在这里插入图片描述
如果存在端口冲突,可以通过安装目录下的 webapp 文件夹中的 webapp.yml 文件修改
在这里插入图片描述
至此,SkyWalking 的基本部署就完成了。

2.2 配置数据存储

SkyWalking 默认存储使用 H2,H2 是嵌入式内存数据库,在开发测试中使用足够了,但在生产环境中应用不是很合适,所以 SkyWalking 运用于生产环境时,需要切换一下存储方式。

SkyWalking 支持多种存储,这里就不使用 elasticsearch 了,笔记本配置不大行,使用 MySql 作为演示。

修改 application.yml 文件,找到其中的 storage 节点,将 selector 中默认的 h2 修改为mysql,这样 skywalking 将应用下面 mysql 的存储配置。
在这里插入图片描述
修改 mysql 节点的配置,将数据库地址、用户名、密码等改成你实际的配置,其他的配置根据需要修改。其中 swtest 是 skywalking 对于的库名,需要先创建好数据库。
在这里插入图片描述
由于 SkyWalking 默认使用h2,没有 mysql 数据库驱动,所以需要下载相应的数据库驱动jar包。mysql 数据库驱动 jar 包从以下地址进行下载,根据所使用的 mysql 版本选择对于的jar包。
MySQL :: Download MySQL Connector/J (Archived Versions)
在这里插入图片描述
将 mysql 数据库驱动jar包拷贝到 SkyWalking 安装目录下的 oap-libs 文件夹下。
在这里插入图片描述
之后切换到 bin 文件夹下启动 SkyWalking 即可。SkyWalking 应用启动之后需要稍微等待一会,应用会初始化数据表。
在这里插入图片描述

3. .Net Core 集成 Skywalking

关于 .Net Core 微服务应用与 SkyWalking 的集成,我在之前的 Ocelot 网关演示代码的基础上进行,之前Ocelot 网关演示代码中有 OcelotGateWay 和 CustomService 两个 Web Api 应用,这里我先对 OcelotGateWay 进行集成,两个应用集成的步骤都是一样的,另一个只要重复一遍即可。

  1. 安装依赖包 SkyAPM.Agent.AspNetCore

    在vs中的程序包管理器控制台中执行以下命令:

    Add-AppPackage SkyAPM.Agent.AspNetCore
    

    或者直接在应用所在文件夹执行以下命令

    dotnet add package SkyAPM.Agent.AspNetCore
    
  2. 生成 SkyWalking Agent 配置文件

    SkyWalking Agent 程序需要一个 skyapm.json 配置文件,这个文件可以通过 SkyAMP-dotnet 的命令行工具生成,如下:

    ## 安装命令行工具
    dotnet tool install -g SkyAPM.DotNet.CLI
    
    ## 生成配置文件
    dotnet skyapm config {applicationName} {ip}:{port}
    

    请将上面命令中的 {applicationName} 替换为你实际的项目名称,这个名称后续将作为 skywalking 监控中的应用名称,将 {ip}和{port}替换为你实际部署 SkyWalking 的端口和地址,其中端口是指 SkyWalking GRpc 服务的端口,默认端口是 11800
    在这里插入图片描述
    注意检查以下添加后的 skyapm.json 文件的文件属性,将其设置为“如果较新则复制”。

    生成的配置文件如下:

    {
      "SkyWalking": {
        "ServiceName": "OcelotGateWay", // 当前应用的名称
        "Namespace": "", // 服务组
        "HeaderVersions": [
          "sw8"
        ],
        "Sampling": {
          "SamplePer3Secs": -1,
          "Percentage": -1.0
        },
        "Logging": {
          "Level": "Information",
          "FilePath": "logs\\skyapm-{Date}.log" // SkyWalking Agent日志位置
        },
        "Transport": {
          "Interval": 3000,
          "ProtocolVersion": "v8",
          "QueueSize": 30000,
          "BatchSize": 3000,
          "gRPC": {
            "Servers": "localhost:11800", // SkyWalking服务端地址
            "Timeout": 10000,
            "ConnectTimeout": 10000,
            "ReportTimeout": 600000,
            "Authentication": ""
          }
        }
      }
    }
    
  3. 设置环境变量

    SkyWalking Agent 对应用代码无任何侵入,无需在项目中增加任何配置代码,只需要设置一下环境变量即可。

    在测试的情况下,可以直接在 launchSettings.json 文件中添加环境变量:

    "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
    

    如果是正式环境部署,可以通过命令设置环境变量:

    windows:

    set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
    set SKYWALKING__SERVICENAME=sample_app
    

    Linux:

    export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
    export SKYWALKING__SERVICENAME=sample_app
    

    如果一台机器有多个应用需要 SkyWalking Aget 进行监控,可以将应用的名称用分号分隔。
    当然,可以通过代码在应用启动的时候设置环境变量,免去正式环境的额外配置。
    在这里插入图片描述
    CustomService 的集成和 OcelotGateWay 一样,安装上述步骤配置好之后,设置两个项目同时启动。

    通过 postman 调用网关,可以看到 SkyWalking Web UI 中已经获取到接口调用信息了
    在这里插入图片描述
    在这里插入图片描述
    通过 Trace 也可以清楚的看到,请求先到了 OcelotGateWay,OcelotGateWay 调用了 Nacos,然后再掉用了 CustomService 所在的 5000 端口,而 CustomService 也监控到了 Api 的调用。

    接下来,修改一下 WeatherForecas t接口手动抛出异常,模拟一下请求接口出错时的情形。

    [HttpGet]
    public IEnumerable<string> Get()
    {
        throw new Exception("error");
        //return new[] { "cutsomer service" };
    }
    

    在这里插入图片描述
    可以看到,Trace 将调用流程中出错的地方标记了出来了。

微服务系列文章:
上一篇:API网关—Ocelot之限流熔断
下一篇:分布式日志—Seq(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值