Migrowanie z zestawów SDK usługi Application Insights platformy .NET do usługi Azure Monitor OpenTelemetry
Ten przewodnik zawiera instrukcje krok po kroku dotyczące migrowania różnych aplikacji platformy .NET z używania zestawów SDK (Software Development Kit) usługi Application Insights do usługi Azure Monitor OpenTelemetry.
Oczekiwano podobnego środowiska instrumentacji OpenTelemetry usługi Azure Monitor, tak jak w przypadku zestawów SDK usługi Application Insights. Aby uzyskać więcej informacji i porównanie funkcji według funkcji, zobacz stan wydania funkcji.
- ASP.NET Migracja core do dystrybucji OpenTelemetry usługi Azure Monitor. (
Azure.Monitor.OpenTelemetry.AspNetCore
Pakiet NuGet) - ASP.NET, konsola i migracja usługi WorkerService do eksportera OpenTelemetry usługi Azure Monitor. (
Azure.Monitor.OpenTelemetry.Exporter
Pakiet NuGet)
Jeśli rozpoczynasz pracę z usługą Application Insights i nie musisz migrować z klasycznego interfejsu API, zobacz Włączanie usługi Azure Monitor OpenTelemetry.
Wymagania wstępne
- Aplikacja internetowa ASP.NET Core już instrumentowana za pomocą usługi Application Insights bez żadnych dostosowań
- Aktywnie obsługiwana wersja platformy .NET
Napiwek
Nasza grupa produktów aktywnie szuka opinii na temat tej dokumentacji. Prześlij opinię lub otel@microsoft.com zobacz sekcję Pomoc techniczna .
Usuwanie zestawu SDK usługi Application Insights
Uwaga
Przed wykonaniem tych kroków upewnij się, że masz bieżącą kopię zapasową aplikacji.
Usuwanie pakietów NuGet
Microsoft.ApplicationInsights.AspNetCore
Usuń pakiet z plikucsproj
.dotnet remove package Microsoft.ApplicationInsights.AspNetCore
Usuwanie kodu inicjowania i dostosowań
Usuń wszelkie odwołania do typów usługi Application Insights w bazie kodu.
Napiwek
Po usunięciu pakietu usługi Application Insights możesz ponownie skompilować aplikację, aby uzyskać listę odwołań, które należy usunąć.
Usuń usługę Application Insights z usługi
ServiceCollection
, usuwając następujący wiersz:builder.Services.AddApplicationInsightsTelemetry();
Usuń sekcję
ApplicationInsights
z plikuappsettings.json
.{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
Czyszczenie i kompilowanie
Sprawdź katalog bin, aby sprawdzić, czy wszystkie odwołania do
Microsoft.ApplicationInsights.*
zostały usunięte.Testowanie aplikacji
Sprawdź, czy aplikacja nie ma nieoczekiwanych konsekwencji.
Napiwek
Nasza grupa produktów aktywnie szuka opinii na temat tej dokumentacji. Prześlij opinię lub otel@microsoft.com zobacz sekcję Pomoc techniczna .
Włączanie funkcji OpenTelemetry
Zalecamy utworzenie zasobu programistycznego i użycie jego parametry połączenia podczas wykonywania tych instrukcji.
Zaplanuj zaktualizowanie parametry połączenia w celu wysłania danych telemetrycznych do oryginalnego zasobu po potwierdzeniu pomyślnej migracji.
Instalowanie dystrybucji usługi Azure Monitor
Nasza dystrybucja usługi Azure Monitor umożliwia automatyczne telemetrię, włączając biblioteki instrumentacji OpenTelemetry do zbierania śladów, metryk, dzienników i wyjątków oraz umożliwia zbieranie niestandardowych danych telemetrycznych.
Zainstalowanie dystrybucji usługi Azure Monitor powoduje, że zestaw OPENTelemetry SDK jest zależnością.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Dodawanie i konfigurowanie zarówno biblioteki OpenTelemetry, jak i usługi Azure Monitor
Zestaw OpenTelemery SDK należy skonfigurować podczas uruchamiania aplikacji w ramach
ServiceCollection
elementu , zazwyczaj w elemencieProgram.cs
.OpenTelemetry ma pojęcie trzech sygnałów; Ślady, metryki i dzienniki. Dystrybucja usługi Azure Monitor konfiguruje każdy z tych sygnałów.
Program.cs
W poniższym przykładzie kodu przedstawiono podstawy.
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();
}
}
Zalecamy ustawienie parametrów połączenia w zmiennej środowiskowej:
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Więcej opcji konfigurowania parametrów połączenia można znaleźć tutaj: Konfigurowanie parametrów połączenia usługi Application Insights.
Napiwek
Nasza grupa produktów aktywnie szuka opinii na temat tej dokumentacji. Prześlij opinię lub otel@microsoft.com zobacz sekcję Pomoc techniczna .
Instalowanie i konfigurowanie bibliotek instrumentacji
Biblioteki instrumentacji można dodać do projektu, aby automatycznie zbierać dane telemetryczne dotyczące określonych składników lub zależności.
Następujące biblioteki znajdują się w dystrybucji.
Dostosowywanie bibliotek instrumentacji
Dystrybucja usługi Azure Monitor obejmuje instrumentację platformy .NET OpenTelemetry dla platformy ASP.NET Core, HttpClient i SQLClient. Możesz dostosować te dołączone instrumentacje lub ręcznie dodać dodatkową instrumentację samodzielnie przy użyciu interfejsu API OpenTelemetry.
Oto kilka przykładów dostosowywania instrumentacji:
Dostosowywanie elementu 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);
};
});
Dostosowywanie elementu 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);
};
});
Dostosowywanie obiektów SqlClientInstrumentationOptions
Dostawca instrumentacji SQLClient w pakiecie jest nadal w wersji beta. Gdy osiągnie stabilną wersję, dołączymy ją jako standardowe odwołanie do pakietu. Do tego czasu, aby dostosować instrumentację SQLClient, dodaj OpenTelemetry.Instrumentation.SqlClient
odwołanie do pakietu do projektu i użyj jego publicznego interfejsu API.
dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.SetDbStatementForStoredProcedure = false;
});
});
Konfigurowanie usługi Azure Monitor
Usługa Application Insights oferuje wiele innych opcji konfiguracji za pośrednictwem programu ApplicationInsightsServiceOptions
.
Ustawienie usługi Application Insights | Alternatywa openTelemetry |
---|---|
AddAutoCollectedMetricExtractor | Nie dotyczy |
ApplicationVersion | Ustaw wartość "service.version" w obszarze Zasób |
ConnectionString | Zobacz instrukcje dotyczące konfigurowania parametrów połączenia. |
DependencyCollectionOptions | Nie dotyczy. Aby dostosować zależności, zapoznaj się z dostępnymi opcjami konfiguracji dla odpowiednich bibliotek instrumentacji. |
DeveloperMode | Nie dotyczy |
EnableActiveTelemetryConfigurationSetup | Nie dotyczy |
EnableAdaptiveSampling | Nie dotyczy. Obsługiwane jest tylko próbkowanie o stałej szybkości. |
EnableAppServicesHeartbeatTelemetryModule | Nie dotyczy |
EnableAuthenticationTrackingJavaScript | Nie dotyczy |
WłączAzureInstanceMetadataTelemetryModule | Nie dotyczy |
EnableDependencyTrackingTelemetryModule | Zobacz instrukcje dotyczące filtrowania śladów. |
EnableDiagnosticsTelemetryModule | Nie dotyczy |
EnableEventCounterCollectionModule | Nie dotyczy |
WłączHeartbeat | Nie dotyczy |
EnablePerformanceCounterCollectionModule | Nie dotyczy |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | Zobacz instrukcje dotyczące filtrowania śladów. |
EndpointAddress | Użyj parametru ConnectionString. |
InstrumentationKey | Użyj parametru ConnectionString. |
RequestCollectionOptions | Nie dotyczy. Zobacz Opcje OpenTelemetry.Instrumentation.AspNetCore. |
Usuwanie konfiguracji niestandardowych
Poniższe scenariusze są opcjonalne i mają zastosowanie tylko do użytkowników zaawansowanych.
Jeśli masz więcej odwołań do obiektu , którego można użyć do ręcznego
TelemetryClient
rejestrowania danych telemetrycznych, należy je usunąć.Jeśli dodano jakiekolwiek niestandardowe filtrowanie lub wzbogacanie w postaci niestandardowej
TelemetryProcessor
lubTelemetryInitializer
, należy je usunąć. Można je znaleźć w plikuServiceCollection
.builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
Usuwanie fragmentu kodu JavaScript
Jeśli użyto fragmentu kodu dostarczonego przez zestaw SDK platformy .NET usługi Application Insights, należy go również usunąć. Aby uzyskać pełne przykłady kodu, które należy usunąć, zapoznaj się z przewodnikiem dotyczącym włączania telemetrii po stronie klienta dla aplikacji internetowych.
Jeśli zestaw SDK języka JavaScript został dodany do zbierania danych telemetrycznych po stronie klienta, można go również usunąć, mimo że nadal działa bez zestawu SDK platformy .NET. Aby uzyskać pełne przykłady kodu, które należy usunąć, zapoznaj się z przewodnikiem dołączania dla zestawu SDK języka JavaScript.
Usuwanie wszystkich artefaktów programu Visual Studio
Jeśli do dołączenia do usługi Application Insights użyto programu Visual Studio, w projekcie może być pozostawionych więcej plików.
Properties/ServiceDependencies
katalog może mieć odwołanie do zasobu usługi Application Insights.
Napiwek
Nasza grupa produktów aktywnie szuka opinii na temat tej dokumentacji. Prześlij opinię lub otel@microsoft.com zobacz sekcję Pomoc techniczna .
Często zadawane pytania
Ta sekcja dotyczy klientów korzystających z inicjatorów lub procesorów telemetrii albo pisania niestandardowego kodu względem klasycznego interfejsu API usługi Application Insights w celu utworzenia niestandardowej telemetrii.
Jak mapowanie interfejsu API zestawu SDK na pojęcia openTelemetry?
OpenTelemetry to neutralna platforma obserwacji dostawcy. W zestawie OPENTelemetry SDK ani bibliotekach nie ma interfejsów API usługi Application Insights. Przed migracją ważne jest zrozumienie niektórych pojęć związanych z platformą OpenTelemetry.
W usłudze Application Insights wszystkie dane telemetryczne były zarządzane za pomocą jednego
TelemetryClient
elementu iTelemetryConfiguration
. W usłudze OpenTelemetry każda z trzech sygnałów telemetrii (ślady, metryki i dzienniki) ma własną konfigurację. Dane telemetryczne można tworzyć ręcznie za pośrednictwem środowiska uruchomieniowego platformy .NET bez bibliotek zewnętrznych. Aby uzyskać więcej informacji, zobacz przewodniki platformy .NET dotyczące śledzenia rozproszonego, metryk i rejestrowania.Usługa Application Insights używana
TelemetryModules
do automatycznego zbierania danych telemetrycznych dla aplikacji. Zamiast tego funkcja OpenTelemetry używa bibliotek instrumentacji do zbierania danych telemetrycznych z określonych składników (takich jak AspNetCore dla żądań i httpClient dla zależności).Usługa Application Insights służy
TelemetryInitializers
do wzbogacania danych telemetrycznych dodatkowymi informacjami lub zastępowania właściwości. Za pomocą funkcji OpenTelemetry można napisać procesor w celu dostosowania określonego sygnału. Ponadto wiele bibliotek instrumentacji OpenTelemetry oferuje metodęEnrich
dostosowywania telemetrii wygenerowanej przez ten konkretny składnik.Usługa Application Insights służy
TelemetryProcessors
do filtrowania danych telemetrycznych. Procesor OpenTelemetry może również służyć do stosowania reguł filtrowania na określonym sygnałie.
Jak typy telemetrii usługi Application Insights mapują się na metryę OpenTelemetry?
Ta tabela mapuje typy danych usługi Application Insights na pojęcia openTelemetry i ich implementacje platformy .NET.
Tabela usługi Azure Monitor | Typ danych usługi Application Insights | Typ danych OpenTelemetry | Implementacja platformy .NET |
---|---|---|---|
customEvents | EventTelemetry | Brak | Brak |
customMetrics | MetrykaTelemetria | Metryki | System.Diagnostics.Metrics.Meter |
zależności | DependencyTelemetry | Zakresy (klient, wewnętrzny, konsument) | System.Diagnostics.Activity |
wyjątki | WyjątekTelemetria | Wyjątki | System.Exception |
żądania | RequestTelemetry | Zakresy (serwer, producent) | System.Diagnostics.Activity |
traces | TraceTelemetry | Dzienniki | Microsoft.Extensions.Logging.ILogger |
Poniższe dokumenty zawierają więcej informacji.
- Podstawy zbierania danych usługi Azure Monitor Application Insights
- Model danych telemetrii usługi Application Insights
- Pojęcia dotyczące architektury OpenTelemetry
Jak pojęcia dotyczące próbkowania usługi Application Insights są mapowanie na metryę OpenTelemetry?
Chociaż usługa Application Insights oferuje wiele opcji konfigurowania próbkowania, eksporter usługi Azure Monitor lub dystrybucja usługi Azure Monitor oferuje tylko próbkowanie o stałej szybkości. Można próbkować tylko żądania i zależności (ślady OpenTelemetry).
Aby uzyskać przykłady kodu zawierające szczegółowe informacje na temat konfigurowania próbkowania, zobacz nasz przewodnik Włączanie próbkowania
Jak procesory telemetryczne i inicjatory mapują na bibliotekę OpenTelemetry?
W zestawie SDK platformy .NET usługi Application Insights użyj procesorów telemetrycznych, aby filtrować i modyfikować lub odrzucać dane telemetryczne. Użyj inicjatorów telemetrii, aby dodać lub zmodyfikować właściwości niestandardowe. Aby uzyskać więcej informacji, zobacz dokumentację usługi Azure Monitor. Funkcja OpenTelemetry zastępuje te pojęcia procesorami aktywności lub dzienników, które wzbogacają i filtrują dane telemetryczne.
Filtrowanie śladów
Aby filtrować dane telemetryczne w usłudze OpenTelemetry, można zaimplementować procesor działań. Ten przykład jest odpowiednikiem przykładu usługi Application Insights na potrzeby filtrowania danych telemetrycznych zgodnie z opisem w dokumentacji usługi Azure Monitor. W przykładzie pokazano, gdzie są filtrowane nieudane wywołania zależności.
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;
}
}
Aby użyć tego procesora, należy utworzyć TracerProvider
procesor i dodać go przed AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Filtrowanie dzienników
ILogger
implementacje mają wbudowany mechanizm stosowania filtrowania dzienników.
Dzięki temu filtrowaniu można kontrolować dzienniki wysyłane do każdego zarejestrowanego dostawcy, w tym .OpenTelemetryLoggerProvider
"OpenTelemetry" to alias dla OpenTelemetryLoggerProvider
elementu , używany podczas konfigurowania reguł filtrowania.
W poniższym przykładzie zdefiniowano wartość domyślną LogLevel
"Błąd", a także zdefiniowano "Ostrzeżenie" jako minimum LogLevel
dla kategorii zdefiniowanej przez użytkownika.
Te reguły zgodnie z definicją dotyczą tylko elementu OpenTelemetryLoggerProvider
.
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
Aby uzyskać więcej informacji, przeczytaj dokumentację platformy .NET openTelemetry dotyczącą dzienników.
Dodawanie właściwości niestandardowych do śladów
W usłudze OpenTelemetry można użyć procesorów działań, aby wzbogacić dane telemetryczne o więcej właściwości. Jest on podobny do używania inicjatorów telemetrii w usłudze Application Insights, gdzie można modyfikować właściwości telemetrii.
Domyślnie eksporter usługi Azure Monitor flaguje każde żądanie HTTP z kodem odpowiedzi 400 lub większym, jak niepowodzenie. Jeśli jednak chcesz traktować wartość 400 jako sukces, możesz dodać wzbogacający procesor działań, który ustawia powodzenie działania i dodaje tag w celu uwzględnienia większej liczby właściwości telemetrii. Podobnie jak dodawanie lub modyfikowanie właściwości za pomocą inicjatora w usłudze Application Insights zgodnie z opisem w dokumentacji usługi Azure Monitor.
Oto przykład dodawania właściwości niestandardowych i zastępowania domyślnego zachowania niektórych kodów odpowiedzi:
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;
}
}
Aby użyć tego procesora, należy utworzyć TracerProvider
procesor i dodać go przed AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Jak mogę ręcznie śledzić dane telemetryczne przy użyciu biblioteki OpenTelemetry?
Wysyłanie śladów — ręczne
Ślady w usłudze Application Insights są przechowywane jako RequestTelemetry
i DependencyTelemetry
. W usłudze OpenTelemetry ślady są modelowane jako Span
przy użyciu Activity
klasy .
Platforma .NET OpenTelemetry wykorzystuje ActivitySource
klasy i Activity
do śledzenia, które są częścią środowiska uruchomieniowego platformy .NET. Takie podejście jest charakterystyczne, ponieważ implementacja platformy .NET integruje interfejs API śledzenia bezpośrednio z samym środowiskiem uruchomieniowym. Pakiet System.Diagnostics.DiagnosticSource
umożliwia deweloperom ActivitySource
tworzenie wystąpień i zarządzanie nimi Activity
. Ta metoda zapewnia bezproblemowy sposób dodawania śledzenia do aplikacji platformy .NET bez polegania na bibliotekach zewnętrznych, stosując wbudowane możliwości ekosystemu platformy .NET. Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z przewodnikami instrumentacji śledzenia rozproszonego.
Oto jak przeprowadzić migrację śledzenia ręcznego:
Uwaga
W usłudze Application Insights można ustawić nazwę roli i wystąpienie roli na poziomie telemetrii. Jednak w przypadku eksportera usługi Azure Monitor nie możemy dostosować się na poziomie telemetrii. Nazwa roli i wystąpienie roli są wyodrębniane z zasobu OpenTelemetry i stosowane we wszystkich telemetrii. Przeczytaj ten dokument, aby uzyskać więcej informacji: Ustawianie nazwy roli chmury i wystąpienia roli w chmurze.
DependencyTelemetry
Usługa Application Insights DependencyTelemetry
służy do modelowania żądań wychodzących. Oto jak przekonwertować go na metryę OpenTelemetry:
Przykład usługi Application Insights:
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);
Przykład openTelemetry:
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
Usługa Application Insights RequestTelemetry
modeluje żądania przychodzące. Oto jak przeprowadzić migrację do biblioteki OpenTelemetry:
Przykład usługi Application Insights:
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);
Przykład openTelemetry:
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);
}
Niestandardowe śledzenie operacji
W usłudze Application Insights śledź operacje niestandardowe przy użyciu metod StartOperation
i .StopOperation
Osiągnij go przy użyciu platformy ActivitySource
.NET i Activity
w programie OpenTelemetry. W przypadku operacji za pomocą ActivityKind.Server
poleceń i ActivityKind.Consumer
eksporter usługi Azure Monitor generuje RequestTelemetry
wartość . W przypadku parametrów ActivityKind.Client
DependencyTelemetry
, ActivityKind.Producer
i ActivityKind.Internal
generuje wartość . Aby uzyskać więcej informacji na temat śledzenia operacji niestandardowych, zobacz dokumentację usługi Azure Monitor. Aby uzyskać więcej informacji na temat korzystania z platformy ActivitySource
.NET i Activity
na platformie .NET, zobacz przewodniki dotyczące instrumentacji śledzenia rozproszonego platformy .NET.
Oto przykład uruchamiania i zatrzymywania działania dla operacji niestandardowych:
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.
}
Wysyłanie dzienników
Dzienniki w usłudze Application Insights są przechowywane jako TraceTelemetry
i ExceptionTelemetry
.
TraceTelemetry
W programie OpenTelemetry rejestrowanie jest zintegrowane za pośrednictwem interfejsu ILogger
. Oto jak przeprowadzić migrację TraceTelemetry
:
Przykład usługi Application Insights:
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);
Przykład openTelemetry:
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);
}
WyjątekTelemetria
Usługa Application Insights używa ExceptionTelemetry
do rejestrowania wyjątków. Oto jak przeprowadzić migrację do biblioteki OpenTelemetry:
Przykład usługi Application Insights:
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);
Przykład openTelemetry:
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");
}
Wysyłanie metryk
Metryki w usłudze Application Insights są przechowywane jako MetricTelemetry
. W usłudze OpenTelemetry metryki są modelowane zgodnie Meter
z pakietem System.Diagnostics.DiagnosticSource
.
Usługa Application Insights ma interfejsy API metrykTrackMetric()
inne niż wstępne () i wstępne agregowanie (GetMetric().TrackValue()
). W przeciwieństwie do platformy OpenTelemetry usługa Application Insights nie ma pojęcia instrumentacja. Usługa Application Insights ma ten sam interfejs API dla wszystkich scenariuszy metryk.
Z drugiej strony funkcja OpenTelemetry wymaga od użytkowników uprzedniego wybrania odpowiedniego instrumentu metryki na podstawie rzeczywistej semantyki metryki. Jeśli na przykład intencją jest zliczenie czegoś (na przykład liczba odebranych żądań serwera itp.), należy użyć licznika OpenTelemetry. Jeśli intencją jest obliczenie różnych percentyli (takich jak wartość P99 opóźnienia serwera), należy użyć instrumentu Histogramu OpenTelemetry. Ze względu na tę podstawową różnicę między usługą Application Insights i usługą OpenTelemetry nie dokonano bezpośredniego porównania między nimi.
W przeciwieństwie do usługi Application Insights funkcja OpenTelemetry nie udostępnia wbudowanych mechanizmów wzbogacania ani filtrowania metryk. W usłudze Application Insights procesory telemetryczne i inicjatory mogą służyć do modyfikowania lub odrzucania metryk, ale ta funkcja nie jest dostępna w usłudze OpenTelemetry.
Ponadto funkcja OpenTelemetry nie obsługuje bezpośredniego wysyłania nieprzetworzonych metryk, ponieważ nie ma odpowiednika TrackMetric()
funkcji znalezionych w usłudze Application Insights.
Migracja z usługi Application Insights do usługi OpenTelemetry obejmuje zastąpienie wszystkich użycia interfejsu API metryk usługi Application Insights interfejsem API OpenTelemetry. Wymaga to zrozumienia różnych instrumentów OpenTelemetry i ich semantyki.
Napiwek
Histogram jest najbardziej wszechstronny i najbliżej interfejsu API usługi Application Insights GetMetric().TrackValue()
. Możesz zastąpić interfejsy API metryk usługi Application Insights histogramem, aby osiągnąć ten sam cel.
Inne typy telemetrii
CustomEvents
Nieobsługiwane w usłudze OpenTelemetry.
Przykład usługi Application Insights:
TelemetryClient.TrackEvent()
AvailabilityTelemetry
Nieobsługiwane w usłudze OpenTelemetry.
Przykład usługi Application Insights:
TelemetryClient.TrackAvailability()
PageViewTelemetry
Nieobsługiwane w usłudze OpenTelemetry.
Przykład usługi Application Insights:
TelemetryClient.TrackPageView()
Czy mogę uzyskać metryki na żywo dla aplikacji konsoli i usługi procesu roboczego?
Zalecamy eksportera OpenTelemetry usługi Azure Monitor dla aplikacji konsoli i usługi procesów roboczych, które nie zawierają metryk na żywo.
Następne kroki
Napiwek
Nasza grupa produktów aktywnie szuka opinii na temat tej dokumentacji. Prześlij opinię lub otel@microsoft.com zobacz sekcję Pomoc techniczna .
Pomoc techniczna
- W przypadku problemów z pomoc techniczna platformy Azure otwórz bilet pomoc techniczna platformy Azure.
- W przypadku problemów z usługą OpenTelemetry skontaktuj się bezpośrednio ze społecznością platformy .NET OpenTelemetry.
- Aby uzyskać listę otwartych problemów związanych z eksporterem usługi Azure Monitor, zobacz stronę Problemów z usługą GitHub.