以OpenTelemetry方式接入
更新時間 2024-11-12 10:34:39
最近更新時間: 2024-11-12 10:34:39
分享文章
在監控c#應用之前,您需要通過客戶端將應用數據上報至APM服務端。本文介紹如何通過OpenTelemetry c# SDK上報c#應用數據。
前提條件
完成vpce接入。
背景信息
OpenTelemetry c# SDK提供了c#語言的分布式鏈路追蹤能力,您可以直接使用OTLP gRPC或者HTTP協議向APM服務端上報數據。
接入步驟
1、安裝依賴包
dotnet?add?package?OpenTelemetry.Exporter.Console
dotnet?add?package?OpenTelemetry.Extensions.Hosting
dotnet?add?package?OpenTelemetry.Instrumentation.AspNetCore
dotnet?add?package?OpenTelemetry.Exporter.OpenTelemetryProtocol
2、查看接入點信息
應用列表的接入指引會根據您所在資源池提供“通過 HTTP 上報數據”和“通過 gRPC 上報數據”的ENDPOINT(天翼云vpc網絡接入點)、鑒權TOKEN信息。
3、初始化SDK并設置exporters
1)使用http協議上報,修改Program.cs代碼如下
using?OpenTelemetry.Resources;
using?OpenTelemetry.Trace;
using?OpenTelemetry.Exporter;
//?Ideally,?you?will?want?this?name?to?come?from?a?config?file,?constants?file,?etc.
var?serviceName?=?"csharp-otel-simple-http";
var?serviceVersion?=?"1.0.0";
var?builder?=?WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
????.ConfigureResource(resource?=>?resource.AddService(
????????serviceName:?serviceName,
????????serviceVersion:?serviceVersion))
????.WithTracing(tracing?=>?tracing
????????.AddSource(serviceName)
????????.AddAspNetCoreInstrumentation()
????????.AddConsoleExporter()????????//在控制臺導出Trace數據,可選
????????.AddOtlpExporter(options?=>
????????{
????????????//使用HTTP協議上報
????????????options.Endpoint?=?new?Uri("<http_endpoint>");
????????????options.Headers?=?"x-ctg-authorization=<token>";
????????????options.Protocol?=?OtlpExportProtocol.HttpProtobuf;
????????}));
builder.Services.AddControllers();
var?app?=?builder.Build();
app.MapControllers();
app.Run();
2)使用grpc協議上報,修改Program.cs代碼如下
using?OpenTelemetry.Resources;
using?OpenTelemetry.Trace;
using?OpenTelemetry.Exporter;
//?Ideally,?you?will?want?this?name?to?come?from?a?config?file,?constants?file,?etc.
var?serviceName?=?"csharp-otel-simple-grpc";
var?serviceVersion?=?"1.0.0";
var?builder?=?WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
????.ConfigureResource(resource?=>?resource.AddService(
????????serviceName:?serviceName,
????????serviceVersion:?serviceVersion))
????.WithTracing(tracing?=>?tracing
????????.AddSource(serviceName)
????????.AddAspNetCoreInstrumentation()
????????.AddConsoleExporter()????????//在控制臺導出Trace數據,可選
????????.AddOtlpExporter(options?=>
????????{
????????????//使用gRPC協議上報
????????????options.Endpoint?=?new?Uri("<grpc_endpoint>");
????????????options.Headers?=?"x-ctg-authorization=<token>";
????????????options.Protocol?=?OtlpExportProtocol.Grpc;
????????}));
builder.Services.AddControllers();
var?app?=?builder.Build();
app.MapControllers();
app.Run();