本文介绍通过OpenTelemetry .NET SDK将C#应用的Trace数据接入到日志服务的操作步骤。
前提条件
- 已创建Trace实例。更多信息,请参见创建Trace实例。
已安装.NET Framework开发环境。
说明本文中的接入方式支持除.NET Framework 3.5 SP1外的所有官方所支持的版本。更多信息,请参见.NET Core和.NET Framework。
操作步骤
添加依赖包。
dotnet add package OpenTelemetry --version 1.2.0-beta1 dotnet add package OpenTelemetry.Exporter.Console --version 1.2.0-beta1 dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol --version 1.2.0-beta1 dotnet add package OpenTelemetry.Extensions.Hosting --version 1.0.0-rc8 dotnet add package OpenTelemetry.Instrumentation.AspNetCore --version 1.0.0-rc8 dotnet add package Grpc.Core --version 2.36.4
运行代码。
如下代码中的变量需根据实际情况替换。关于变量的详细说明,请参见变量说明。
using System; using OpenTelemetry; using OpenTelemetry.Trace; using System.Diagnostics; using System.Collections.Generic; using OpenTelemetry.Resources; using Grpc.Core; namespace mydemo { class Program { private static readonly ActivitySource MyActivitySource = new ActivitySource( "MyCompany.MyProduct.MyLibrary"); static void Main(string[] args) { using var tracerProvider = Sdk.CreateTracerProviderBuilder() .SetSampler(new AlwaysOnSampler()) .AddSource("MyCompany.MyProduct.MyLibrary") .AddOtlpExporter(opt => { opt.Endpoint = new Uri("${endpoint}"); opt.Headers = "x-sls-otel-project=${project},x-sls-otel-instance-id=${instance},x-sls-otel-ak-id=${access-key-id},x-sls-otel-ak-secret=${access-key-secret}"; }) .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault() .AddAttributes(new Dictionary<string, object> { {"service.name", "${service}" }, {"service.version","${version}"}, {"service.host","${host}"}, {"service.namespace","${service.namespace}"} })) .Build(); using (var activity = MyActivitySource.StartActivity("SayHello")) { activity?.SetTag("foo", 1); activity?.SetTag("bar", "Hello, World!"); activity?.SetTag("baz", new int[] { 1, 2, 3 }); } Console.WriteLine("Hello World!"); } } }
表 1. 变量说明
变量
说明
示例
${service}
服务名。根据您的实际场景取值即可。
payment
${version}
服务版本号。建议按照va.b.c格式定义。
v0.1.2
${host}
主机名。
localhost
${endpoint}
日志服务Project的接入地址,格式为https://${project}.${region-endpoint}:Port,其中:
${project}:日志服务Project名称。
${region-endpoint}:日志服务Project所在地域的访问域名,支持公网和阿里云内网(经典网络、VPC)。更多信息,请参见服务入口。
Port:网络端口,固定为10010。
https://test-project.cn-hangzhou.log.aliyuncs.com:10010
${project}
日志服务Project名称。
test-project
${instance}
Trace服务实例ID。更多信息,请参见创建Trace实例。
instance-traces
${access-key-id}
阿里云账号AccessKey ID。
建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM用户向指定Project写入数据权限的具体操作,请参见授权。如何获取AccessKey的具体操作,请参见访问密钥。
LTAI4Fvyv****
${access-key-secret}
阿里云账号AccessKey Secret。
建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey。
HfJEw25sYldO***
${service.namespace}
服务归属的命名空间。
order