Migrera från .NET Application Insights SDK:er till Azure Monitor OpenTelemetry
Den här guiden innehåller stegvisa instruktioner för att migrera olika .NET-program från att använda Application Insights-programutvecklingspaket (SDK:er) till Azure Monitor OpenTelemetry.
Förvänta dig en liknande upplevelse med Azure Monitor OpenTelemetry-instrumentation som med Application Insights SDK:er. Mer information och en jämförelse av funktioner finns i versionstillstånd för funktioner.
- ASP.NET Core-migrering till Azure Monitor OpenTelemetry Distro. (
Azure.Monitor.OpenTelemetry.AspNetCore
NuGet-paket) - ASP.NET, konsol och WorkerService-migrering till Azure Monitor OpenTelemetry Exporter. (
Azure.Monitor.OpenTelemetry.Exporter
NuGet-paket)
Om du kommer igång med Application Insights och inte behöver migrera från det klassiska API:et läser du Aktivera Azure Monitor OpenTelemetry.
Förutsättningar
- Ett ASP.NET Core-webbprogram som redan har instrumenterats med Application Insights utan några anpassningar
- En version av .NET som stöds aktivt
Dricks
Vår produktgrupp söker aktivt feedback om den här dokumentationen. Ge feedback till otel@microsoft.com eller se avsnittet Support .
Ta bort Application Insights SDK
Kommentar
Innan du fortsätter med de här stegen bör du bekräfta att du har en aktuell säkerhetskopia av programmet.
Ta bort NuGet-paket
Microsoft.ApplicationInsights.AspNetCore
Ta bort paketet från .csproj
dotnet remove package Microsoft.ApplicationInsights.AspNetCore
Ta bort initieringskod och anpassningar
Ta bort alla referenser till Application Insights-typer i din kodbas.
Dricks
När du har tagit bort Application Insights-paketet kan du återskapa ditt program för att hämta en lista med referenser som måste tas bort.
Ta bort Application Insights från din
ServiceCollection
genom att ta bort följande rad:builder.Services.AddApplicationInsightsTelemetry();
Ta bort avsnittet
ApplicationInsights
från .appsettings.json
{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
Rensa och skapa
Kontrollera din bin-katalog för att verifiera att alla referenser till
Microsoft.ApplicationInsights.*
har tagits bort.Testa ditt program
Kontrollera att programmet inte har några oväntade konsekvenser.
Dricks
Vår produktgrupp söker aktivt feedback om den här dokumentationen. Ge feedback till otel@microsoft.com eller se avsnittet Support .
Aktivera OpenTelemetry
Vi rekommenderar att du skapar en utvecklingsresurs och använder dess anslutningssträng när du följer dessa instruktioner.
Planera att uppdatera anslutningssträng för att skicka telemetri till den ursprungliga resursen när du har bekräftat att migreringen har slutförts.
Installera Azure Monitor-distributionen
Vår Azure Monitor-distribution möjliggör automatisk telemetri genom att inkludera OpenTelemetry-instrumentationsbibliotek för insamling av spårningar, mått, loggar och undantag, och tillåter insamling av anpassad telemetri.
När du installerar Azure Monitor Distro får OpenTelemetry SDK som ett beroende.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Lägga till och konfigurera både OpenTelemetry och Azure Monitor
OpenTelemery SDK måste konfigureras vid programstart som en del av ,
ServiceCollection
vanligtvis iProgram.cs
.OpenTelemetry har begreppet tre signaler; Spårningar, mått och loggar. Azure Monitor Distro konfigurerar var och en av dessa signaler.
Program.cs
Följande kodexempel visar grunderna.
using Azure.Monitor.OpenTelemetry.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Call AddOpenTelemetry() to add OpenTelemetry to your ServiceCollection.
// Call UseAzureMonitor() to fully configure OpenTelemetry.
builder.Services.AddOpenTelemetry().UseAzureMonitor();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
}
}
Vi rekommenderar att du ställer in anslutningssträngen i en miljövariabel:
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Fler alternativ för att konfigurera anslutningssträngen beskrivs här: Konfigurera Application Insights-anslutningssträngen.
Dricks
Vår produktgrupp söker aktivt feedback om den här dokumentationen. Ge feedback till otel@microsoft.com eller se avsnittet Support .
Installera och konfigurera instrumentationsbibliotek
Instrumentationsbibliotek kan läggas till i projektet för automatisk insamling av telemetri om specifika komponenter eller beroenden.
Följande bibliotek ingår i distributionen.
Anpassa instrumentationsbibliotek
Azure Monitor Distro innehåller .NET OpenTelemetry-instrumentation för ASP.NET Core, HttpClient och SQLClient. Du kan anpassa dessa inkluderade instrumentationer eller manuellt lägga till extra instrumentation på egen hand med hjälp av OpenTelemetry-API:et.
Här följer några exempel på hur du anpassar instrumentationen:
Anpassa AspNetCoreTraceInstrumentationOptions
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
{
options.RecordException = true;
options.Filter = (httpContext) =>
{
// only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpContext.Request.Method);
};
});
Anpassa HttpClientTraceInstrumentationOptions
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<HttpClientTraceInstrumentationOptions>(options =>
{
options.RecordException = true;
options.FilterHttpRequestMessage = (httpRequestMessage) =>
{
// only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpRequestMessage.Method.Method);
};
});
Anpassa SqlClientInstrumentationOptions
Vi skapar SQLClient-instrumentationen i vårt paket medan den fortfarande är i betaversion. När den når en stabil version tar vi med den som en standardpaketreferens. Tills dess lägger du till paketreferensen till projektet och använder dess offentliga API för att anpassa SQLClient-instrumentationen OpenTelemetry.Instrumentation.SqlClient
.
dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.SetDbStatementForStoredProcedure = false;
});
});
Konfigurera Azure Monitor
Application Insights erbjöd många fler konfigurationsalternativ via ApplicationInsightsServiceOptions
.
Application Insights-inställning | OpenTelemetry Alternativ |
---|---|
AddAutoCollectedMetricExtractor | Ej tillämpligt |
ApplicationVersion | Ange "service.version" på Resurs |
ConnectionString | Se anvisningar om hur du konfigurerar anslutningssträngen. |
DependencyCollectionOptions | Saknas. Om du vill anpassa beroenden läser du de tillgängliga konfigurationsalternativen för tillämpliga instrumentationsbibliotek. |
DeveloperMode | Ej tillämpligt |
EnableActiveTelemetryConfigurationSetup | Ej tillämpligt |
EnableAdaptiveSampling | Saknas. Endast fast sampling stöds. |
EnableAppServicesHeartbeatTelemetryModule | Ej tillämpligt |
EnableAuthenticationTrackingJavaScript | Ej tillämpligt |
AktiveraAzureInstanceMetadataTelemetryModule | Ej tillämpligt |
EnableDependencyTrackingTelemetryModule | Se instruktioner för filtrering av spårningar. |
EnableDiagnosticsTelemetryModule | Ej tillämpligt |
EnableEventCounterCollectionModule | Ej tillämpligt |
EnableHeartbeat | Ej tillämpligt |
EnablePerformanceCounterCollectionModule | Ej tillämpligt |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | Se instruktioner för filtrering av spårningar. |
EndpointAddress | Använd ConnectionString. |
InstrumentationKey | Använd ConnectionString. |
RequestCollectionOptions | Saknas. Se Alternativ för OpenTelemetry.Instrumentation.AspNetCore. |
Ta bort anpassade konfigurationer
Följande scenarier är valfria och gäller endast för avancerade användare.
Om du har fler referenser till
TelemetryClient
, som kan användas för att manuellt registrera telemetri, bör de tas bort.Om du har lagt till någon anpassad filtrering eller berikning i form av en anpassad
TelemetryProcessor
ellerTelemetryInitializer
, bör de tas bort. De finns i dinServiceCollection
.builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
Ta bort JavaScript-kodfragment
Om du använde kodfragmentet som tillhandahålls av Application Insights .NET SDK måste det också tas bort. Fullständiga kodexempel på vad du vill ta bort finns i guiden aktivera telemetri på klientsidan för webbprogram.
Om du har lagt till JavaScript SDK för att samla in telemetri på klientsidan kan den också tas bort även om den fortsätter att fungera utan .NET SDK. Fullständiga kodexempel på vad du vill ta bort finns i registreringsguiden för JavaScript SDK.
Ta bort alla Visual Studio-artefakter
Om du använde Visual Studio för att registrera dig för Application Insights kan du ha fler filer kvar i projektet.
Properties/ServiceDependencies
-katalogen kan ha en referens till application insights-resursen.
Dricks
Vår produktgrupp söker aktivt feedback om den här dokumentationen. Ge feedback till otel@microsoft.com eller se avsnittet Support .
Vanliga frågor och svar
Det här avsnittet är till för kunder som använder telemetriinitierare eller processorer, eller skriver anpassad kod mot det klassiska Application Insights-API:et för att skapa anpassad telemetri.
Hur mappar SDK-API:et till OpenTelemetry-begrepp?
OpenTelemetry är ett leverantörsneutralt observerbarhetsramverk. Det finns inga Application Insights-API:er i OpenTelemetry SDK eller bibliotek. Innan du migrerar är det viktigt att förstå några av OpenTelemetrys begrepp.
I Application Insights hanterades all telemetri via en enda
TelemetryClient
ochTelemetryConfiguration
. I OpenTelemetry har var och en av de tre telemetrisignalerna (spårningar, mått och loggar) sin egen konfiguration. Du kan skapa telemetri manuellt via .NET-körningen utan externa bibliotek. Mer information finns i .NET-guiderna för distribuerad spårning, mått och loggning.Application Insights används
TelemetryModules
för att automatiskt samla in telemetri för ditt program. I stället använder OpenTelemetry Instrumentation-bibliotek för att samla in telemetri från specifika komponenter (till exempel AspNetCore för begäranden och HttpClient för beroenden).Application Insights används
TelemetryInitializers
för att utöka telemetri med ytterligare information eller för att åsidosätta egenskaper. Med OpenTelemetry kan du skriva en processor för att anpassa en specifik signal. Dessutom erbjuder många OpenTelemetry Instrumentation-bibliotek enEnrich
metod för att anpassa telemetrin som genereras av den specifika komponenten.Application Insights används
TelemetryProcessors
för att filtrera telemetri. En OpenTelemetry-processor kan också användas för att tillämpa filtreringsregler på en specifik signal.
Hur mappas Application Insights-telemetrityper till OpenTelemetry?
Den här tabellen mappar Application Insights-datatyper till OpenTelemetry-begrepp och deras .NET-implementeringar.
Azure Monitor-tabell | Application Insights DataType | OpenTelemetry DataType | .NET-implementering |
---|---|---|---|
customEvents | EventTelemetry | Saknas | Saknas |
customMetrics | MetricTelemetry | Mått | System.Diagnostics.Metrics.Meter |
beroenden | DependencyTelemetry | Intervall (klient, intern, konsument) | System.Diagnostics.Activity |
undantag | ExceptionTelemetry | Undantag | System.Exception |
begäranden | RequestTelemetry | Intervall (server, producent) | System.Diagnostics.Activity |
spårningar | TraceTelemetry | Loggar | Microsoft.Extensions.Logging.ILogger |
Följande dokument innehåller mer information.
- Grunderna för datainsamling i Azure Monitor Application Insights
- Application Insights-telemetridatamodell
- OpenTelemetry-begrepp
Hur mappar Application Insights-samplingsbegrepp till OpenTelemetry?
Application Insights erbjöd flera alternativ för att konfigurera sampling, men Azure Monitor Exporter eller Azure Monitor Distro erbjuder endast sampling med fast hastighet. Endast begäranden och beroenden (OpenTelemetry Traces) kan samplas.
Kodexempel som beskriver hur du konfigurerar sampling finns i vår guide Aktivera sampling
Hur mappas telemetriprocessorer och initierare till OpenTelemetry?
I Application Insights .NET SDK använder du telemetriprocessorer för att filtrera och ändra eller ta bort telemetri. Använd telemetriinitierare för att lägga till eller ändra anpassade egenskaper. Mer information finns i Dokumentation om Azure Monitor. OpenTelemetry ersätter dessa begrepp med aktivitets- eller loggprocessorer som berikar och filtrerar telemetri.
Filtrera spårningar
Om du vill filtrera telemetridata i OpenTelemetry kan du implementera en aktivitetsprocessor. Det här exemplet motsvarar Application Insights-exemplet för filtrering av telemetridata enligt beskrivningen i Azure Monitor-dokumentationen. Exemplet visar var misslyckade beroendeanrop filtreras.
using System.Diagnostics;
using OpenTelemetry;
internal sealed class SuccessfulDependencyFilterProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (!OKtoSend(activity))
{
activity.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
}
}
private bool OKtoSend(Activity activity)
{
return activity.Kind == ActivityKind.Client && activity.Status == ActivityStatusCode.Ok;
}
}
Om du vill använda den här processorn måste du skapa en TracerProvider
och lägga till processorn före AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Filtrera loggar
ILogger
implementeringar har en inbyggd mekanism för att tillämpa loggfiltrering.
Med den här filtreringen kan du styra loggarna som skickas till varje registrerad provider, inklusive OpenTelemetryLoggerProvider
. "OpenTelemetry" är aliaset för OpenTelemetryLoggerProvider
, som används för att konfigurera filtreringsregler.
I följande exempel definieras "Fel" som standard LogLevel
och "Varning" definieras som minimum LogLevel
för en användardefinierad kategori.
Dessa regler som definieras gäller endast för OpenTelemetryLoggerProvider
.
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
Mer information finns i OpenTelemetry .NET-dokumentationen om loggar.
Lägga till anpassade egenskaper i spårningar
I OpenTelemetry kan du använda aktivitetsprocessorer för att utöka telemetridata med fler egenskaper. Det liknar att använda telemetriinitierare i Application Insights, där du kan ändra telemetriegenskaper.
Som standard flaggar Azure Monitor Exporter alla HTTP-begäranden med en svarskod på 400 eller senare som misslyckade. Men om du vill behandla 400 som ett lyckat resultat kan du lägga till en berikande aktivitetsprocessor som anger lyckad aktivitet och lägger till en tagg för att inkludera fler telemetriegenskaper. Det liknar att lägga till eller ändra egenskaper med hjälp av en initierare i Application Insights enligt beskrivningen i Azure Monitor-dokumentationen.
Här är ett exempel på hur du lägger till anpassade egenskaper och åsidosätter standardbeteendet för vissa svarskoder:
using System.Diagnostics;
using OpenTelemetry;
/// <summary>
/// Custom Processor that overrides the default behavior of treating response codes >= 400 as failed requests.
/// </summary>
internal class MyEnrichingProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (activity.Kind == ActivityKind.Server)
{
int responseCode = GetResponseCode(activity);
if (responseCode >= 400 && responseCode < 500)
{
// If we set the Success property, the SDK won't change it
activity.SetStatus(ActivityStatusCode.Ok);
// Allow to filter these requests in the portal
activity.SetTag("Overridden400s", "true");
}
// else leave the SDK to set the Success property
}
}
private int GetResponseCode(Activity activity)
{
foreach (ref readonly var tag in activity.EnumerateTagObjects())
{
if (tag.Key == "http.response.status_code" && tag.Value is int value)
{
return value;
}
}
return 0;
}
}
Om du vill använda den här processorn måste du skapa en TracerProvider
och lägga till processorn före AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Hur gör jag för att spåra telemetri manuellt med OpenTelemetry?
Skicka spårningar – manuell
Spårningar i Application Insights lagras som RequestTelemetry
och DependencyTelemetry
. I OpenTelemetry modelleras spårningar som Span
att använda Activity
klassen.
OpenTelemetry .NET använder ActivitySource
klasserna och Activity
för spårning, som ingår i .NET-körningen. Den här metoden är distinkt eftersom .NET-implementeringen integrerar spårnings-API:et direkt i själva körningen. Paketet System.Diagnostics.DiagnosticSource
gör att utvecklare kan använda ActivitySource
för att skapa och hantera Activity
instanser. Den här metoden ger ett sömlöst sätt att lägga till spårning i .NET-program utan att förlita sig på externa bibliotek, med hjälp av de inbyggda funktionerna i .NET-ekosystemet. Mer detaljerad information finns i genomgången av distribuerade spårningsinstrument.
Så här migrerar du manuell spårning:
Kommentar
I Application Insights kan rollnamnet och rollinstansen anges på per telemetrinivå. Med Azure Monitor Exporter kan vi dock inte anpassa på per telemetrinivå. Rollnamnet och rollinstansen extraheras från OpenTelemetry-resursen och tillämpas på all telemetri. Läs det här dokumentet om du vill ha mer information: Ange namnet på molnrollen och molnrollinstansen.
DependencyTelemetry
Application Insights DependencyTelemetry
används för att modellera utgående begäranden. Så här konverterar du den till OpenTelemetry:
Application Insights-exempel:
DependencyTelemetry dep = new DependencyTelemetry
{
Name = "DependencyName",
Data = "https://www.example.com/",
Type = "Http",
Target = "www.example.com",
Duration = TimeSpan.FromSeconds(10),
ResultCode = "500",
Success = false
};
dep.Context.Cloud.RoleName = "MyRole";
dep.Context.Cloud.RoleInstance = "MyRoleInstance";
dep.Properties["customprop1"] = "custom value1";
client.TrackDependency(dep);
OpenTelemetry-exempel:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("DependencyName", ActivityKind.Client))
{
activity?.SetTag("url.full", "https://www.example.com/");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("http.request.method", "GET");
activity?.SetTag("http.response.status_code", "500");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Error);
activity?.SetEndTime(activity.StartTimeUtc.AddSeconds(10));
}
RequestTelemetry
Application Insights modellerar RequestTelemetry
inkommande begäranden. Så här migrerar du den till OpenTelemetry:
Application Insights-exempel:
RequestTelemetry req = new RequestTelemetry
{
Name = "RequestName",
Url = new Uri("http://example.com"),
Duration = TimeSpan.FromSeconds(10),
ResponseCode = "200",
Success = true,
Properties = { ["customprop1"] = "custom value1" }
};
req.Context.Cloud.RoleName = "MyRole";
req.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackRequest(req);
OpenTelemetry-exempel:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("RequestName", ActivityKind.Server))
{
activity?.SetTag("url.scheme", "https");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("url.path", "/");
activity?.SetTag("http.response.status_code", "200");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Ok);
}
Spårning av anpassade åtgärder
I Application Insights spårar du anpassade åtgärder med hjälp av StartOperation
och StopOperation
metoder. Uppnå det med hjälp av ActivitySource
och Activity
i OpenTelemetry .NET. För åtgärder med ActivityKind.Server
och ActivityKind.Consumer
genererar Azure Monitor Exporter RequestTelemetry
. För ActivityKind.Client
, ActivityKind.Producer
och ActivityKind.Internal
genererar DependencyTelemetry
den . Mer information om spårning av anpassade åtgärder finns i Dokumentation om Azure Monitor. Mer information om hur du använder ActivitySource
och Activity
i .NET finns i genomgångarna för .NET-distribuerade spårningsinstrumentation.
Här är ett exempel på hur du startar och stoppar en aktivitet för anpassade åtgärder:
using System.Diagnostics;
using OpenTelemetry;
var activitySource = new ActivitySource("Company.Product.Name");
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Start a new activity
using (var activity = activitySource.StartActivity("CustomOperation", ActivityKind.Server))
{
activity?.SetTag("customTag", "customValue");
// Perform your custom operation logic here
// No need to explicitly call Activity.Stop() because the using block automatically disposes the Activity object, which stops it.
}
Skicka loggar
Loggar i Application Insights lagras som TraceTelemetry
och ExceptionTelemetry
.
TraceTelemetry
I OpenTelemetry integreras loggning via ILogger
gränssnittet. Så här migrerar TraceTelemetry
du :
Application Insights-exempel:
TraceTelemetry traceTelemetry = new TraceTelemetry
{
Message = "hello from tomato 2.99",
SeverityLevel = SeverityLevel.Warning,
};
traceTelemetry.Context.Cloud.RoleName = "MyRole";
traceTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackTrace(traceTelemetry);
OpenTelemetry-exempel:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory
var logger = loggerFactory.CreateLogger<Program>();
// Use the logger instance to write a new log
logger.FoodPrice("tomato", 2.99);
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Warning, "Hello from `{name}` `{price}`.")]
public static partial void FoodPrice(this ILogger logger, string name, double price);
}
ExceptionTelemetry
Application Insights använder ExceptionTelemetry
för att logga undantag. Så här migrerar du till OpenTelemetry:
Application Insights-exempel:
ExceptionTelemetry exceptionTelemetry = new ExceptionTelemetry(new Exception("Test exception"))
{
SeverityLevel = SeverityLevel.Error
};
exceptionTelemetry.Context.Cloud.RoleName = "MyRole";
exceptionTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
exceptionTelemetry.Properties["customprop1"] = "custom value1";
client.TrackException(exceptionTelemetry);
OpenTelemetry-exempel:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory.
var logger = loggerFactory.CreateLogger<Program>();
try
{
// Simulate exception
throw new Exception("Test exception");
}
catch (Exception ex)
{
logger?.LogError(ex, "An error occurred");
}
Skicka mått
Mått i Application Insights lagras som MetricTelemetry
. I OpenTelemetry modelleras Meter
mått som System.Diagnostics.DiagnosticSource
från paketet.
Application Insights har både icke-föraggregering (TrackMetric()
) och föraggregering (GetMetric().TrackValue()
) mått-API:er. Till skillnad från OpenTelemetry har Application Insights ingen uppfattning om instrument. Application Insights har samma API för alla måttscenarier.
OpenTelemetry å andra sidan kräver att användarna först väljer rätt måttinstrument baserat på måttets faktiska semantik. Om avsikten till exempel är att räkna något (t.ex. antalet totala serverbegäranden som tagits emot osv.) ska OpenTelemetry Counter användas. Om avsikten är att beräkna olika percentiler (t.ex. P99-värdet för serverfördröjning) bör OpenTelemetry Histogram-instrument användas. På grund av den här grundläggande skillnaden mellan Application Insights och OpenTelemetry görs ingen direkt jämförelse mellan dem.
Till skillnad från Application Insights tillhandahåller OpenTelemetry inte inbyggda mekanismer för att berika eller filtrera mått. I Application Insights kan telemetriprocessorer och initiatorer användas för att ändra eller ta bort mått, men den här funktionen är inte tillgänglig i OpenTelemetry.
Dessutom har OpenTelemetry inte stöd för att skicka råmått direkt, eftersom det inte finns någon motsvarighet till de TrackMetric()
funktioner som finns i Application Insights.
Att migrera från Application Insights till OpenTelemetry innebär att ersätta alla Application Insights Metric API-användningar med OpenTelemetry-API:et. Det kräver förståelse för de olika OpenTelemetry-instrumenten och deras semantik.
Dricks
Histogrammet är den mest mångsidiga och närmaste motsvarigheten till Application Insights-API GetMetric().TrackValue()
:et. Du kan ersätta Application Insights Metric API:er med Histogram för att uppnå samma syfte.
Andra telemetrityper
CustomEvents
Stöds inte i OpenTelemetry.
Application Insights-exempel:
TelemetryClient.TrackEvent()
TillgänglighetTelemetri
Stöds inte i OpenTelemetry.
Application Insights-exempel:
TelemetryClient.TrackAvailability()
PageViewTelemetry
Stöds inte i OpenTelemetry.
Application Insights-exempel:
TelemetryClient.TrackPageView()
Kan jag hämta livemått för konsol- och arbetstjänstprogram?
Vi rekommenderar Azure Monitor OpenTelemetry Exporter för konsol- och arbetstjänstprogram, som inte innehåller livemått.
Nästa steg
Dricks
Vår produktgrupp söker aktivt feedback om den här dokumentationen. Ge feedback till otel@microsoft.com eller se avsnittet Support .
Support
- Öppna ett Azure Support ärende för Azure Support problem.
- För OpenTelemetry-problem kontaktar du OpenTelemetry .NET-communityn direkt.
- En lista över öppna problem som rör Azure Monitor Exporter finns på sidan GitHub-problem.