.NET Core Agent
熟悉java的朋友肯定知道java agent,当我看到java agent时我很是羡慕,我当时就想.net是否也有类似的功能,于是就搜索各种资料,结果让人很失望。当时根据 https://github.com/OpenSkywalking/skywalking-netcore 找到这个 https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/profiling-overview 可是不知道怎么用(求指教,听云的APM怎么做的?)。
新的希望
最近看到 https://github.com/OpenSkywalking/skywalking-netcore 更新了,看了一下,找到这个 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/platform-specific-configuration
动手测试
首先下载源码 https://github.com/aspnet/Docs/tree/master/aspnetcore/fundamentals/host/platform-specific-configuration/samples/2.x ,这里先介绍下《在 ASP.NET Core 中使用 IHostingStartup 从外部程序集增强应用》的三种方式
从 NuGet 包激活
- 使用 dotnet pack 命令编译 HostingStartupPackage 包。
- 将包的程序集名称 HostingStartupPackage 添加到 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 环境变量中。set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=HostingStartupPackage
- 编译并运行应用。 增强型应用中存在包引用(编译时引用)。 应用项目文件中的
指定包项目的输出 (../HostingStartupPackage/bin/Debug) 作为包源。 这允许应用使用该包而无需将包上传到 nuget.org。有关详细信息,请参阅 HostingStartupApp 项目文件中的说明。 - set ASPNETCORE_ENVIRONMENT=Development
- dotnet HostingStartupApp.dll 访问效果如下:
从类库激活
- 使用 dotnet build 命令编译 HostingStartupLibrary 类库。
- 将类库的程序集名称 HostingStartupLibrary 添加到 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 环境变量中。set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=HostingStartupLibrary
- bin - 通过将类库编译输出中的 HostingStartupLibrary.dll 文件复制到应用的 bin/Debug 文件夹,将类库程序集部署到应用。
- set ASPNETCORE_ENVIRONMENT=Development
- dotnet HostingStartupApp.dll 访问效果如下:
从运行时存储部署的程序集激活(重点,可以实现Automatic-Agent)
- StartupDiagnostics 项目使用 PowerShell 修改其 StartupDiagnostics.deps.json 文件。 默认情况下,Windows 7 SP1 和 Windows Server 2008 R2 SP1 及以后版本的 Windows 上安装有 PowerShell。 若要在其他平台上获取 PowerShell,请参阅安装 Windows PowerShell。
- 构建 StartupDiagnostics 项目。 构建项目后,会自动生成项目文件中的构建目标:
- 触发 PowerShell 脚本以修改 StartupDiagnostics.deps.json 文件。
- 将 StartupDiagnostics.deps.json 文件移动到用户配置文件的 additionalDeps 文件夹。
- 在承载启动目录的命令提示符处执行 dotnet store 命令,将程序集及其依赖项存储在用户配置文件的运行时存储中:
dotnet store --manifest StartupDiagnostics.csproj --runtime
对于 Windows,该命令使用 win7-x64 运行时标识符 (RID)。 为其他运行时提供承载启动时,请替换为正确的 RID。 - 设置环境变量:
- set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=StartupDiagnostics
- set DOTNET_ADDITIONAL_DEPS=%UserProfile%.dotnet\x64\additionalDeps\StartupDiagnostics\
- 运行示例应用
- 请求 /services 终结点以查看应用的注册服务。 请求 /diag 终结点以查看诊断信息。
/services
/diag
总结
用第三种方式就可以实现Automatic-Agent,在此感谢skywalking-netcore的付出.
这里可能没有将清楚agent的概念,还请大家自行补脑。
如有补充或错误请指出,谢谢!