全部產品
Search
文件中心

Application Real-Time Monitoring Service:通過SkyWalking上報.NET應用資料

更新時間:May 26, 2026

通過SkyWalking為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用SkyWalking .NET Core SDK埋點並上報應用資料。

前提條件

擷取存取點資訊

  1. 登入ARMS控制台,在左側導覽列單擊接入中心

  2. 服務端應用地區單擊SkyWalking卡片。

  3. 在彈出的SkyWalking面板中選擇資料需要上報的地區。

    說明

    初次接入的地區將會自動進行資源初始化。

  4. 選擇串連方式,然後複製存取點資訊。

    若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網方式,否則選擇公網方式。

    image.png

背景資訊

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檔案進行調試和修改。

    2023-07-27 10:04:08.396 +08:00 [skywalking-net-demo] [Information] SkyApm.InstrumentStartup : Initializing ...
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.RegisterService : Loaded instrument service [Skyxxx]
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.LogReportService : Loaded instrument service [Skxxx]
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.PingService : Loaded instrument service [SkyApm.xxx]
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.SegmentReportService : Loaded instrument servicexxx
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.CLRStatsService : Loaded instrument service [Skyxxx]
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Sampling.SimpleCountSamplingInterceptor : Loaded instruxxx
    2023-07-27 10:04:08.477 +08:00 [skywalking-net-demo] [Information] SkyApm.Transport.Grpc.ConnectService : Loaded instrument servicxxx
    2023-07-27 10:04:08.486 +08:00 [skywalking-net-demo] [Information] SkyApm.Transport.Grpc.ConnectionManager : Connected server[tracixxx]
    2023-07-27 10:04:08.486 +08:00 [skywalking-net-demo] [Information] SkyApm.Diagnostics.TracingDiagnosticProcessorObserver : Loaded dxxx
    2023-07-27 10:04:08.486 +08:00 [skywalking-net-demo] [Information] SkyApm.InstrumentStartup : Started SkyAPM .NET Core Agent.
    2023-07-27 10:04:13.512 +08:00 [skywalking-net-demo] [Information] SkyApm.Diagnostics.TracingDiagnosticProcessorObserver : Loaded dxxx
    2023-07-27 10:04:13.552 +08:00 [skywalking-net-demo] [Information] SkyApm.Diagnostics.TracingDiagnosticProcessorObserver : Loaded dxxx
    2023-07-27 10:04:13.605 +08:00 [skywalking-net-demo] [Information] SkyApm.Service.RegisterService : Reported Service Instance Propexxx
    2023-07-27 10:04:20.525 +08:00 [skywalking-net-demo] [Information] SkyApm.Transport.Grpc.V8.SegmentReporter : Report 14 trace segmexxx
    2023-07-27 10:04:20.534 +08:00 [skywalking-net-demo] [Error] SkyApm.Transport.Grpc.SegmentReporter : Report trace segment fail.
    Grpc.Core.RpcException: Status(StatusCode="Unimplemented", Detail="Method not found: skywalking.v3.LogReportService/collect")
       at SkyApm.Transport.Grpc.LoggerReporter.ReportAsync(IReadOnlyCollection`1 loggerRequests, CancellationToken cancellationToken)

參考資訊

您可以參考以下命令從源碼構建。

# 下載原始碼
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 config 命令建立skyapm.json設定檔時,如果缺少對應版本的 .NET 架構,會出現報錯。

dotnet skyapm config net-app 192.168.0.1:11800
You must install or update .NET to run this application.
App: /Users/whlongxi/.dotnet/tools/dotnet-skyapm
Architecture: arm64
Framework: 'Microsoft.NETCore.App', version '6.0.0' (arm64)
.NET location: /usr/local/share/dotnet
The following frameworks were found:
  7.0.9 at [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Learn about framework resolution:
https://aka.ms/dotnet/app-launch-failed
To install missing framework, download:
https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=6.0.0&arch=arm64&rid=osx.13-arm64
  • 解決方案一(推薦):dotnet-skyapm的作用只有一個,即產生skyapm-dotnet agent的屬性設定檔,您可以直接手動建立一個skyapm.json,並按照上文中的方式配置屬性。

  • 解決方案二:使用dotnet 6.0。