通过SkyWalking上报.NET应用数据

通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用SkyWalking .NET Core SDK埋点并上报应用数据。

前提条件

获取接入点信息

新版控制台

  1. 登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心

  2. 开源框架区域单击SkyWalking卡片。

  3. 在弹出的SkyWalking面板中选择数据需要上报的地域。

    说明

    初次接入的地域将会自动进行资源初始化。

  4. 选择连接方式,然后复制接入点信息。

    若您的服务部署在阿里云上,且所属地域与选择的接入地域一致,推荐使用阿里云内网方式,否则选择公网方式。

    image.png

旧版控制台

  1. 登录可观测链路 OpenTelemetry 版控制台

  2. 在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。

  3. 在页面顶部选择需要接入的地域,然后在集群信息区域打开显示Token开关。

  4. 客户端采集工具区域单击SkyWalking

    相关信息列中,获取接入点信息。

    SkyWalking接入点信息

    说明

    如果应用部署于阿里云生产环境,则选择阿里云VPC网络接入点,否则选择公网接入点。

背景信息

SkyWalking是一款广受欢迎的国产APM(Application Performance Monitoring,应用性能监控)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统。

示例Demo

示例Demo仓库地址:SkyWalking Demo

用SkyWalking为.NET应用埋点

  1. 安装.NET Agent。

    进入项目根目录,并执行以下命令。

    # 安装.NET Agent
    dotnet add package SkyAPM.Agent.AspNetCore
    
    # 添加环境变量
    export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
    export SKYWALKING__SERVICENAME=<service-name>
  2. 配置.NET Agent属性。

    生成skyapm.json文件。

    • 方法1:使用skyapm命令行工具SkyAPM.DotNet.CLI生成属性配置文件。

    • dotnet tool install -g SkyAPM.DotNet.CLI
      
      # 环境变量设置,/path/to需要替换成您的.dotnet路径
      export PATH="$PATH:/path/to/.dotnet/tools/"             
      dotnet skyapm config <service-name> <endpoint>
    • 方法2:直接在项目根目录创建配置文件skyapm.json,并将以下内容复制到文件中。

    • {
        "SkyWalking": {
          "ServiceName": <service-name>,
          "Namespace": "",
          "HeaderVersions": [
            "sw8"
          ],
          "Sampling": {
            "SamplePer3Secs": -1,            
            "Percentage": -1.0,
            "LogSqlParameterValue": false
          },
          "Logging": {
            "Level": "Information",
            "FilePath": "logs/skyapm-{Date}.log"
          },
          "Transport": {
            "Interval": 3000,
            "ProtocolVersion": "v8",
            "QueueSize": 30000,
            "BatchSize": 3000,
            "gRPC": {
              "Servers": <endpoint>,
              "Authentication": <token>,
              "Timeout": 100000,
              "ConnectTimeout": 100000,
              "ReportTimeout": 600000
            }
          }
        }
      }

    属性说明:

    • 必填项

      • <service-name>:服务名称。

      • <endpoint>:前提条件中获取的接入点。

      • <token>:前提条件中获取的接入点鉴权令牌。

    • 可选项

      • SamplePer3Secs:每三秒采样数。

      • Percentage:采样百分比,例如10%采样则配置为10。

      • Logging:日志记录与调试。Level表示日志级别,FilePath表示日志文件保存的位置以及文件名称。

  3. 重启.NET项目。

    dotnet run
  1. 查看Agent本地日志记录。运行项目时,skyapm-<date>.log日志文件会在项目logs文件夹下生成,如果数据上报不成功,可以参考log文件进行调试和修改。

    image.png

参考信息

您可以参考以下命令从源码构建。

# 下载源代码
git clone https://github.com/SkyAPM/SkyAPM-dotnet.git

# 进入根目录
cd SkyAPM-dotnet/

# 切换到目标tag
git checkout [tagname]

git submodule init
git submodule update

dotnet restore

dotnet build src/SkyApm.Transport.Grpc.Protocol
dotnet build skyapm-dotnet.sln

常见问题

无法使用dotnet-skyapm工具创建skyapm.json配置文件,报错如下:image.png

  • 解决方法一(推荐):dotnet-skyapm的作用只有一个,即生成skyapm-dotnet agent的属性配置文件,您可以直接手动创建一个skyapm.json,并按照上文中的方式配置属性。

  • 解决方法二:使用dotnet 6.0。