68

SkyWalking-netcore 无入侵分布式追踪

 5 years ago
source link: http://beckjin.com/2018/10/28/skywalking-netcore-noinvade/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SkyWalking-netcore 最近更新的版本改成了无入侵的集成方式,主要思想应该是分离开发和监测,开发只管代码部分,监测的问题是代码程序之外的工作。

基于之前 SkyWalking 分布式追踪系统 的介绍,一些概念性的内容、环境搭建这里就不重复说明。以下介绍都是基于 Windows 环境的,如果是 macOS/Linux ,请参考 官方文档

安装 SkyWalking .NET Core Agent

首先通过以下命令安装 SkyWalking DotNet CLI

dotnet tool install -g SkyWalking.DotNet.CLI

CLI 安装成功之后,执行以下命令安装 Agent 到当前机器上

dotnet skywalking install

这一步的安装需要注意以下几项:

  1. 使用管理员权限运行 cmd;
  2. 必须切到 C 盘路径下执行命令;
  3. 如果出现 “Access to the path ‘06806e6c49431d12b85aaa5db07b8705d5b317’ is denied” 错误,请删除 “C:/Users/用户名/AppData/Local/Temp/skywalking.agent.aspnetcore” 后,重新执行;

最终输出 “ SkyWalking .NET Core Agent was successfully installed. ” 才代表成功。

创建项目

新建一个.NET Core API 项目 SkyWalking.Agent.Test,其他什么都不需要操作。

创建配置文件

在 SkyWalking.Agent.Test 项目根目录下创建连接 Collector Server 的配置文件,官方提供命令的创建方式,其实就是生成一个 skywalking.json 文件,我们也完全可以手动添加。

dotnet skywalking config [application_code] [collector_server]

application_code:应用名 (如:SkyWalking.Agent.Test)

collector_server: server 地址 (如:localhost:11800) ,SkyWalking 的环境搭建请参考 SkyWalking 分布式追踪系统

最终生成的 skywalking.json 如下,ApplicationCode 和 Transport.gRPC.Servers 是我们设置的:

{
  "SkyWalking": {
    "ApplicationCode": "SkyWalking.Agent.Test",
    "SpanLimitPerSegment": 300,
    "Sampling": {
      "SamplePer3Secs": -1
    },
    "Logging": {
      "Level": "Information",
      "FilePath": "logs\\SkyWalking-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      "PendingSegmentLimit": 30000,
      "PendingSegmentTimeout": 1000,
      "gRPC": {
        "Servers": "localhost:11800",
        "Timeout": 2000,
        "ConnectTimeout": 10000
      }
    }
  }
}

从源码中发现,配置的加载顺序是先加载默认配置( 可以进入 AddSkyWalkingDefaultConfig 查看源码,里面含 skywalking.json 所有默认配置项 ),然后加载 appsettings.json、skywalking.json,所有 skywalking.json 的默认配置完全可以先去掉,需要的时候再设置,更简洁点其实我们并需要 skywalking.json ,只需要使用 appsettings.json 就可以。

builder.AddSkyWalkingDefaultConfig();

builder.AddJsonFile("appsettings.json", true).AddJsonFile($"appsettings.{environmentProvider.EnvironmentName}.json", true);

builder.AddJsonFile("skywalking.json", true).AddJsonFile($"skywalking.{environmentProvider.EnvironmentName}.json", true);

简化版的配置如下,只需要在 appsettings.json 加入 SkyWalking 所需的配置项:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "SkyWalking": {
    "ApplicationCode": "SkyWalking.Agent.AspNetCore.Test",
    "Transport": {
      "gRPC": {
        "Servers": "localhost:11800"
      }
    }
  }
}

实际的开发项目我们可能并不直接使用 appsettings.json 来管理所有的配置,比如我们可能使用 consul、apollo 等注册中心来管理配置,所以个人感觉是需要支持注册中心方式,已提交 issue

启动项目

我们将使用命令行方式启动项目,在启动项目之前,有一些项目需要的环境变量需要设置一下( 如果通过VS启动,可以在 属性=> 调试 => 环境变量 进行设置 ):

// enable SkyWalking.Agent.AspNetCore
set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyWalking.Agent.AspNetCore
set DOTNET_ADDITIONAL_DEPS=%PROGRAMFILES%\dotnet\x64\additionalDeps\skywalking.agent.aspnetcore

dotnet run

启动成功后,我们可以先通过日志查看是否已成功连接 collector server,SkyWalking.Agent 的默认日志在项目根目录的 logs 文件夹下,如果发现最后显示 Connected collector server[localhost:11800] 就代表连接成功。

接下来我们可以访问 API 自带的默认接口 http://localhost:5000/api/values ,多请求几次,然后访问 http://localhost:8080/,我们的应用已经进入监控。

7BnQNvj.png!web

总结

最开始提到最新发布的版本提供无入侵的集成方式,从整个过程来看,主要分为以下几步:

  1. 将 Agent 安装到运行的机器;
  2. 修改项目配置文件,加入 SkyWalking 相关配置;
  3. 启动项目请设置 SkyWalking 需要的环境变量;

关于第二步,如果 collector server 本身是在 localhost 上运行的,那就连修改项目配置文件这一步都不需要,因为默认参数的 collector server 就是 localhost:11800,ApplicationCode 也是可以通过环境变量进行设置的(set SKYWALKING__APPLICATIONCODE=SkyWalking.Agent.AspNetCore.Test)

关于第三步,一般情况下公司可能会有 CI 工具,环境变量的设置可以在 CI 工具上完成。但问题又来了,如果没有 CI 工具或者 CI 工具的构建流程不能随意修改,那怎么办?基于这个问题,其实可以通过修改源码来实现,不过还是希望作者可以稍微调整支持一下,已提 issue

参考链接


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK