正文
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
这一步的安装需要注意以下几项:
-
使用管理员权限运行 cmd;
-
必须切到 C 盘路径下执行命令;
-
如果出现 “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/,我们的应用已经进入监控。