通過OpenTelemetry為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用OpenTelemetry為.NET應用進行自動或手動埋點並上報資料。
前提條件
背景資訊
OpenTelemetry .NET支援自動埋點和手動埋點。
-
自動埋點
-
支援自動埋點的.NET / .NET Framework版本:
-
.NET SDK 6+
-
.NET Framework暫不支援自動埋點
-
-
支援的架構請參見OpenTelemetry官方文檔。
-
-
手動埋點和半自動埋點
-
支援的版本:
-
.NET ≥ 5.0
-
.NET Core ≥ 2.0
-
.NET Framework ≥ 4.6.1
-
-
支援的架構:
-
樣本Demo
範例程式碼倉庫地址:dotnet-demo
方法一:自動埋點
版本限制
-
.NET SDK 6+
-
.NET Framework暫不支援自動埋點
-
使用ASP.NET Core編寫Web應用。
-
建立Demo應用。
mkdir dotnet-simple-demo cd dotnet-simple-demo dotnet new web -
將Properties/launchSettings.json檔案中的內容替換成以下配置。
{ "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "http://localhost:8080", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } -
構建應用。
dotnet build
-
-
為應用配置自動埋點.
-
下載並執行OpenTelemetry .NET自動埋點安裝指令碼。
curl -L -O https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh ./otel-dotnet-auto-install.sh -
設定環境變數並運行OpenTelemetry .NET自動埋點指令碼。
請將
<serviceName>替換為您的服務名,請將<endpoint>和<token>替換為前提條件中擷取的存取點和鑒權Token。export OTEL_TRACES_EXPORTER=otlp \ OTEL_METRICS_EXPORTER=none \ OTEL_LOGS_EXPORTER=none \ OTEL_SERVICE_NAME=<serviceName> \ OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint> \ OTEL_EXPORTER_OTLP_HEADERS="Authentication=<token>" . $HOME/.otel-dotnet-auto/instrument.sh說明更多OpenTelemetry .NET自動埋點的環境變數配置,請參見OpenTelemetry .NET自動埋點環境變數。
-
-
運行並訪問應用。
-
運行應用。
dotnet run -
使用以下命令訪問應用,產生的調用鏈會自動上報至Managed Service for OpenTelemetry。
curl localhost:8080/
-
方法二:手動埋點
-
進入範例程式碼倉庫的dotnet-demo/opentelemetry-demo/manual-demo路徑,然後安裝手動埋點所需的OpenTelemetry相關依賴。
dotnet add package OpenTelemetry dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol dotnet add package OpenTelemetry.Exporter.Console # 可選,在控制台匯出資料 dotnet add package OpenTelemetry.Extensions.Hosting -
在OpentelemetryExporterDemo.cs檔案中建立OpenTelemetry TracerProvider,並添加基於HTTP協議的OtlpExporter,修改上報應用程式名稱和上報資料的Endpoint。
using System.Diagnostics; using OpenTelemetry; using OpenTelemetry.Trace; using OpenTelemetry.Resources; using OpenTelemetry.Exporter; namespace Demo { internal static class OpentelemetryExporterDemo { internal static void Run() { Console.WriteLine("otlp running"); // OpenTelemetry上報應用程式名稱 var serviceName = "otlp-test"; using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource(serviceName) .SetResourceBuilder( ResourceBuilder.CreateDefault().AddService(serviceName)) .AddOtlpExporter(opt => { // 根據前提條件中擷取的存取點資訊進行修改 opt.Endpoint = new Uri("<endpoint>"); // 使用HTTP協議上報資料 opt.Protocol = OtlpExportProtocol.HttpProtobuf; }) .AddConsoleExporter() // 可選,在控制台匯出資料 .Build(); for(int i = 0; i<10; i++) { var MyActivitySource = new ActivitySource(serviceName); using var activity = MyActivitySource.StartActivity("SayHello"); activity?.SetTag("bar", "Hello World"); } } } } -
修改Program.cs檔案內容,在Main方法中調用OpentelemetryExporterDemo。
using System.Diagnostics; using System.Net.Http; using OpenTelemetry; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace Demo { public class Otlp { public static void Main(string[] args) { OpentelemetryExporterDemo.Run(); } } } -
在當前路徑下運行以下命令。
dotnet run
方法三:半自動埋點
OpenTelemetry支援自動上傳數十種.NET架構Trace的資料,詳細的.NET架構列表請參見Supported Libraries。
-
進入範例程式碼倉庫的dotnet-demo/opentelemetry-demo/auto-demo路徑,建立ASP.NET Core應用(Web應用)。
請將代碼中的
<your-project-name>替換為實際的應用程式名稱。mkdir <your-project-name> cd <your-project-name> dotnet new mvc -
下載觀測.NET應用必備的OpenTelemetry依賴。
dotnet add package OpenTelemetry.Exporter.Console # 在控制台匯出採集的資料 dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol # 以OTLP協議匯出 -
下載自動埋點依賴。
下載為ASP.NET Core架構自動埋點的依賴,當應用收到HTTP請求時,會自動產生Span並上報。如需為其他架構自動埋點,請參考Supported Libraries下載對應依賴。
dotnet add package OpenTelemetry.Instrumentation.AspNetCore -
修改<your-project-name>/Program.cs檔案中的代碼。
-
在源檔案開頭匯入所需包。
using System.Diagnostics; using OpenTelemetry.Exporter; using OpenTelemetry.Resources; using OpenTelemetry.Trace; -
在源檔案末尾添加DiagnosticsConfig類。
請將代碼中的
<your-service-name>和<your-host-name>替換為實際的服務名和主機名稱。public static class DiagnosticsConfig { public const string ServiceName = "<your-service-name>"; public const string HostName = "<your-host-name>"; public static ActivitySource ActivitySource = new ActivitySource(ServiceName); } -
添加OpenTelemetry初始化代碼。
-
HTTP協議上報
請將以下代碼中的
<http_endpoint>替換成前提條件中擷取的存取點資訊。// ... builder.Services.AddOpenTelemetry() .WithTracing(tracerProviderBuilder => tracerProviderBuilder .AddSource(DiagnosticsConfig.ActivitySource.Name) .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault() .AddAttributes(new Dictionary<string, object> { {"service.name", DiagnosticsConfig.ServiceName}, {"host.name",DiagnosticsConfig.HostName} })) .AddAspNetCoreInstrumentation() .AddConsoleExporter() // 在控制台匯出Trace資料,可選 .AddOtlpExporter(opt => { // 使用HTTP協議上報 opt.Endpoint = new Uri("<http_endpoint>"); opt.Protocol = OtlpExportProtocol.HttpProtobuf; }) ); // ... -
使用gRPC協議上報
請將以下代碼中的
<grpc_endpoint>和<token>替換成前提條件中擷取的存取點資訊和Token。// ... builder.Services.AddOpenTelemetry() .WithTracing(tracerProviderBuilder => tracerProviderBuilder .AddSource(DiagnosticsConfig.ActivitySource.Name) .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault() .AddAttributes(new Dictionary<string, object> { {"service.name", DiagnosticsConfig.ServiceName}, {"host.name",DiagnosticsConfig.HostName} })) .AddAspNetCoreInstrumentation() .AddConsoleExporter() // 在控制台匯出Trace資料,可選 .AddOtlpExporter(opt => { // 使用gRPC協議上報 opt.Endpoint = new Uri("<grpc_endpoint>"); opt.Headers = "Authentication=<token>"; opt.Protocol = OtlpExportProtocol.Grpc; }) ); // ...
-
-
-
在終端執行以下命令運行專案。
dotnet run返回樣本:
在返回資訊中擷取URL,例如
http://localhost:5107。Building... info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5107 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /path/to/<your-project-name> -
在瀏覽器中訪問
http://localhost:5107,返回以下頁面則說明資料已上報至Managed Service for OpenTelemetry控制台。該頁面為 semi_auto_demo 應用的 ASP.NET Core 預設歡迎頁面,頂部導覽列顯示應用程式名稱 semi_auto_demo,頁面主體顯示 Welcome 標題。
查看監控資料
在可觀測鏈路 OpenTelemetry 版控制台的應用列表頁面選擇目標應用,查看鏈路資料。

