Program.cs 是一个 WebApplication 使用 MySQLConnector 连接 MySQL 数据库操作,对应的 MySQL 服务请自行搭建,或直接购买云产品。dotnet new web
Microsoft.Extensions.Logging.Abstractions是 MySqlConnector所必需的包。dotnet add package MySqlConnector;dotnet add package Microsoft.Extensions.Logging.Abstractions;
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"}}}}
Program.csProgram.cs中使用 WebApplication 接口模拟使用 MySQLConnector 连接 MySQL 数据库操作。using MySqlConnector;var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapGet("/", () => "Hello World!");app.MapGet("/todo", () =>{string connectionString = "server=localhost;port=3306;User Id=root;password=;Database=MyDB";using (MySqlConnection myConnnect = new MySqlConnection(connectionString)){try{myConnnect.Open();using (MySqlCommand myCmd = new MySqlCommand("select * from MyTable", myConnnect)){using (MySqlDataReader reader = myCmd.ExecuteReader()){List<Int32> results = new List<Int32>();while (reader.Read()){// 假设我们只处理第一列的数据IDresults.Add(reader.GetInt32(0));}return "ids:" + string.Join(", ", results);}}}catch (Exception ex){Console.WriteLine($"数据库操作出错: {ex.Message}");return "数据库操作出错";}}});app.Run();
curl -L -O https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.shchmod -x otel-dotnet-auto-install.shsh ./otel-dotnet-auto-install.sh
chmod -x $HOME/.otel-dotnet-auto/instrument.shexport OTEL_TRACES_EXPORTER=otlp \\OTEL_METRICS_EXPORTER=none \\OTEL_LOGS_EXPORTER=none \\OTEL_SERVICE_NAME=<service-name> \\ # 此处<service-name>改为自定义服务名OTEL_EXPORTER_OTLP_PROTOCOL=grpc \\OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint> \\ # 此处替换成步骤1中获得的接入点OTEL_RESOURCE_ATTRIBUTES="token=<token>" # 此处替换成步骤1中获得的token. $HOME/.otel-dotnet-auto/instrument.sh
dotnet builddotnet run
http://localhost:8080http://localhost:8080/todo
https://localhost:8080/todo。在有正常流量的情况下,应用性能监控 > 应用列表 中将展示接入的应用。单击应用名称/ID 进入应用详情页,再选择实例分析,即可看到接入的应用实例。由于可观测数据的处理存在一定延时,如果接入后在控制台没有查询到应用或实例,请等待30秒左右。dotnet add package System.Diagnostics.DiagnosticSource
private static readonly ActivitySource RegisteredActivity = new ActivitySource("Examples.ManualInstrumentations.Registered");
using (var activity = RegisteredActivity.StartActivity("Main")){// 添加Activity Tagactivity?.SetTag("key", "3.1415");// 为 Activity 添加一个 Eventactivity?.AddEvent(new("something happened"));// 一些业务代码Thread.Sleep(1000);}
OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES,没有通过该配置注册的 ActivitySource 将不会接入上报。exportOTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES=Examples.ManualInstrumentations.Registered
dotnet add package OpenTelemetrydotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocoldotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Instrumentation.AspNetCore
tracerProvider并确保添加以下代码在您的程序开始处。var serviceName = "<service-name>"; // <service-name>替换成自定义服务名using var tracerProvider = Sdk.CreateTracerProviderBuilder().AddSource(serviceName).SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName).AddAttributes(new Dictionary<string, object>{["token"] = "<token>", // <token>替换成前置步骤中获得的 Token["host.name"] = "<host>" // <host>替换成自定义主机名})).AddOtlpExporter(opt =>{opt.Endpoint = new Uri("<endpoint>"); // <endpoint>替换成前置步骤中获得的接入点信息opt.Protocol = OtlpExportProtocol.Grpc;}).Build();
ActivitySource用于创建Activity。var MyActivitySource = new ActivitySource(serviceName);
ActivitySource创建好后,创建一个Activity。using var activity = MyActivitySource.StartActivity("SayHello");// 添加Activity Tagactivity?.SetTag("key", "3.1415");// 为 Activity 添加一个 Eventactivity?.AddEvent(new("something happened"));
dotnet builddotnet run
文档反馈