Migrar de SDKs do .NET Application Insights para o OpenTelemetry do Azure Monitor
Este guia fornece instruções passo a passo para migrar vários aplicativos .NET do uso de SDKs (kits de desenvolvimento de software) do Application Insights para o OpenTelemetry do Azure Monitor.
Espere uma experiência semelhante com a instrumentação do OpenTelemetry do Azure Monitor e com os SDKs do Application Insights. Para obter mais informações e uma comparação de recursos por recursos, consulte estado de lançamento dos recursos.
- ASP.NET Migração do Core para a Distribuição OpenTelemetry do Azure Monitor. (
Azure.Monitor.OpenTelemetry.AspNetCore
pacote NuGet) - ASP.NET, console e migração do WorkerService para o Exportador do OpenTelemetry do Azure Monitor. (
Azure.Monitor.OpenTelemetry.Exporter
pacote NuGet)
Se você estiver começando a usar o Application Insights e não precisar migrar da API Clássica, consulte Habilitar o OpenTelemetry do Azure Monitor.
Pré-requisitos
- Um aplicativo Web ASP.NET Core já instrumentado com o Application Insights sem personalizações
- Uma versão com suporte ativo do .NET
Dica
Nosso grupo de produtos está buscando ativamente feedback sobre esta documentação. Forneça comentários para otel@microsoft.com ou consulte a seção Suporte.
Remover o SDK do Application Insights
Observação
Antes de continuar com essas etapas, você deve confirmar se tem um backup atual do seu aplicativo.
Remover pacotes NuGet
Remova a embalagem
Microsoft.ApplicationInsights.AspNetCore
docsproj
.dotnet remove package Microsoft.ApplicationInsights.AspNetCore
Remover código de inicialização e personalizações
Remova todas as referências a tipos do Application Insights em sua base de código.
Dica
Depois de remover o pacote do Application Insights, você pode recompilar seu aplicativo para obter uma lista de referências que precisam ser removidas.
Remova o Application Insights do
ServiceCollection
excluindo a seguinte linha:builder.Services.AddApplicationInsightsTelemetry();
Remova a seção
ApplicationInsights
do seuappsettings.json
.{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
Limpar e construir
Inspecione o diretório bin para validar se todas as referências a
Microsoft.ApplicationInsights.*
foram removidas.Teste seu aplicativo
Verifique se seu aplicativo não tem consequências inesperadas.
Dica
Nosso grupo de produtos está buscando ativamente feedback sobre esta documentação. Forneça comentários para otel@microsoft.com ou consulte a seção Suporte.
Habilitar OpenTelemetry
Recomendamos criar um recurso de desenvolvimento e usar sua cadeia de conexão ao seguir estas instruções.
Planeje atualizar a cadeia de conexão para enviar telemetria ao recurso original depois de confirmar que a migração foi bem-sucedida.
Instalar a distribuição do Azure Monitor
Nossa distribuição do Azure Monitor permite a telemetria automática incluindo bibliotecas de instrumentação OpenTelemetry para coletar rastreamentos, métricas, logs e exceções, e permite coletar telemetria personalizada.
A instalação da distribuição do Azure Monitor traz o SDK do OpenTelemetry como uma dependência.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Adicionar e configurar o OpenTelemetry e o Azure Monitor
O SDK do OpenTelemery deve ser configurado na inicialização do aplicativo como parte do seu
ServiceCollection
, normalmente noProgram.cs
.O OpenTelemetry tem um conceito de três sinais; Rastreamentos, métricas e logs. A distribuição do Azure Monitor configura cada um desses sinais.
Module.vb
O exemplo de código a seguir demonstra as noções básicas.
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();
}
}
Recomendamos definir sua cadeia de conexão em uma variável de ambiente:
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Mais opções para configurar a cadeia de conexão são detalhadas aqui: Configurar a cadeia de conexão do Application Insights.
Dica
Nosso grupo de produtos está buscando ativamente feedback sobre esta documentação. Forneça comentários para otel@microsoft.com ou consulte a seção Suporte.
Instalar e configurar bibliotecas de instrumentação
Bibliotecas de instrumentação podem ser adicionadas ao seu projeto para coletar automaticamente a telemetria sobre componentes ou dependências específicos.
As bibliotecas a seguir são incluídas na Distribuição.
Personalizando bibliotecas de instrumentação
A distribuição do Azure Monitor inclui instrumentação do .NET OpenTelemetry para ASP.NET Core, HttpClient e SQLClient. Você pode personalizar essas instrumentações incluídas ou adicionar manualmente instrumentação extra por conta própria usando a API OpenTelemetry.
Aqui estão alguns exemplos de como personalizar a instrumentação:
Personalizando 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);
};
});
Personalizando 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);
};
});
Personalizando SqlClientInstrumentationOptions
Fornecemos a instrumentação SQLClient em nosso pacote enquanto ele ainda está em beta. Quando ele atinge uma versão estável, nós o incluímos como uma referência de pacote padrão. Até lá, para personalizar a instrumentação SQLClient, adicione a referência do pacote OpenTelemetry.Instrumentation.SqlClient
ao seu projeto e use sua API pública.
dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.SetDbStatementForStoredProcedure = false;
});
});
Configurar o Azure Monitor
O Application Insights oferecia muito mais opções de configuração por meio do ApplicationInsightsServiceOptions
.
Configuração do Application Insights | Alternativa ao OpenTelemetry |
---|---|
AddAutoCollectedMetricExtractor | N/D |
ApplicationVersion | Definir "service.version" em Recurso |
ConnectionString | Consulte instruções sobre como configurar a cadeia de conexão. |
DependencyCollectionOptions | N/D Para personalizar dependências, examine as opções de configuração disponíveis para bibliotecas de instrumentação aplicáveis. |
DeveloperMode | N/D |
EnableActiveTelemetryConfigurationSetup | N/D |
EnableAdaptiveSampling | N/D Há suporte apenas para amostragem de taxa fixa. |
EnableAppServicesHeartbeatTelemetryModule | N/D |
EnableAuthenticationTrackingJavaScript | N/D |
EnableAzureInstanceMetadataTelemetryModule | N/D |
EnableDependencyTrackingTelemetryModule | Consulte as instruções sobre como filtrar rastreamentos. |
EnableDiagnosticsTelemetryModule | N/D |
EnableEventCounterCollectionModule | N/D |
EnableHeartbeat | N/D |
EnablePerformanceCounterCollectionModule | N/D |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | Consulte as instruções sobre como filtrar rastreamentos. |
EndpointAddress | Use ConnectionString. |
InstrumentationKey | Use ConnectionString. |
RequestCollectionOptions | N/D Consulte Opções OpenTelemetry.Instrumentation.AspNetCore. |
Remover configurações personalizadas
Os cenários a seguir são opcionais e se aplicam apenas a usuários avançados.
Se você tiver mais referências ao
TelemetryClient
, que pode ser usado para registrar manualmente a telemetria, elas devem ser removidas.Se você adicionou qualquer filtragem ou enriquecimento personalizado na forma de um
TelemetryProcessor
ouTelemetryInitializer
personalizado, eles devem ser removidos. Eles podem ser encontrados em seuServiceCollection
.builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
Remover snippet de JavaScript
Se você usou o Snippet fornecido pelo SDK do .NET do Application Insights, ele também deverá ser removido. Para obter exemplos de código completos sobre o que remover, examine o guia habilitar a telemetria do lado do cliente para aplicativos Web.
Se você adicionou o SDK do JavaScript para coletar a telemetria do lado do cliente, ele também poderá ser removido, embora continue funcionando sem o SDK do .NET. Para obter exemplos de código completos sobre o que remover, examine o guia de integração do SDK do JavaScript.
Remover todos os artefatos do Visual Studio
Se você usou o Visual Studio para integrar ao Application Insights, poderá ter mais arquivos restantes em seu projeto.
Properties/ServiceDependencies
diretório pode ter uma referência ao recurso do Application Insights.
Dica
Nosso grupo de produtos está buscando ativamente feedback sobre esta documentação. Forneça comentários para otel@microsoft.com ou consulte a seção Suporte.
Perguntas frequentes
Esta seção é para clientes que usam inicializadores ou processadores de telemetria ou escrevem código personalizado na API clássica do Application Insights para criar telemetria personalizada.
Como a API do SDK é mapeada para os conceitos do OpenTelemetry?
OpenTelemetry é uma estrutura de observabilidade neutra do fornecedor. Não há APIs do Application Insights no SDK ou nas bibliotecas do OpenTelemetry. Antes de migrar, é importante entender alguns dos conceitos do OpenTelemetry.
No Application Insights, toda a telemetria era gerenciada por meio de um único
TelemetryClient
eTelemetryConfiguration
. No OpenTelemetry, cada um dos três sinais de telemetria (Traces, Metrics e Logs) tem sua própria configuração. Você pode criar telemetria manualmente por meio do runtime do .NET sem bibliotecas externas. Para obter mais informações, consulte os guias do .NET sobre rastreamento distribuído, métricas e registro em log.O Application Insights usou
TelemetryModules
para coletar automaticamente a telemetria para seu aplicativo. Em vez disso, o OpenTelemetry usa bibliotecas de instrumentação para coletar telemetria de componentes específicos (como AspNetCore para solicitações e HttpClient para dependências).O Application Insights usou
TelemetryInitializers
para enriquecer a telemetria com informações adicionais ou para substituir propriedades. Com o OpenTelemetry, você pode escrever um Processador para personalizar um sinal específico. Além disso, muitas bibliotecas do OpenTelemetry Instrumentation oferecem um métodoEnrich
para personalizar a telemetria gerada por esse componente específico.O Application Insights usou
TelemetryProcessors
para filtrar a telemetria. Um Processador OpenTelemetry também pode ser usado para aplicar regras de filtragem em um sinal específico.
Como os tipos de telemetria do Application Insights são mapeados para o OpenTelemetry?
Esta tabela mapeia os tipos de dados do Application Insights para conceitos do OpenTelemetry e suas implementações do .NET.
Tabela do Azure Monitor | DataType do Application Insights | DataType do OpenTelemetry | Implementação do .NET |
---|---|---|---|
customEvents | EventTelemetry | N/D | N/D |
customMetrics | MetricTelemetry | Métricas | System.Diagnostics.Metrics.Meter |
dependencies | DependencyTelemetry | Intervalos (Cliente, Interno, Consumidor) | System.Diagnostics.Activity |
exceptions | ExceptionTelemetry | Exceções | System.Exception |
solicitações | RequestTelemetry | Intervalos (Servidor, Produtor) | System.Diagnostics.Activity |
traces | TraceTelemetry | Logs | Microsoft.Extensions.Logging.ILogger |
Os documentos a seguir fornecem mais informações.
- Noções básicas da Coleta de Dados do Application Insights do Azure Monitor
- Modelo de dados do Application Insights Telemetry
- Conceitos do OpenTelemetry
Como os conceitos de amostragem do Application Insights são mapeados para o OpenTelemetry?
Embora o Application Insights ofereça várias opções para configurar a amostragem, o Exportador do Azure Monitor ou a Distribuição do Azure Monitor oferece apenas amostragem de taxa fixa. Somente Solicitações e Dependências (Rastreamentos de OpenTelemetry) podem ser amostrados.
Para obter exemplos de código detalhando como configurar a amostragem, consulte nosso guia Habilitar amostragem
Como os processadores e inicializadores de telemetria são mapeados para o OpenTelemetry?
No SDK do .NET do Application Insights, use processadores de telemetria para filtrar e modificar ou descartar a telemetria. Use inicializadores de telemetria para adicionar ou modificar propriedades personalizadas. Para obter mais informações, consulte a documentação Azure Monitor. O OpenTelemetry substitui esses conceitos por processadores de atividade ou log, que enriquecem e filtram a telemetria.
Filtrando rastreamentos
Para filtrar dados de telemetria no OpenTelemetry, você pode implementar um processador de atividade. Este exemplo é equivalente ao exemplo do Application Insights para filtrar dados de telemetria, conforme descrito na documentação do Azure Monitor. O exemplo ilustra onde as chamadas de dependência malsucedidas são filtradas.
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;
}
}
Para usar este processador, você precisa criar um TracerProvider
e adicionar o processador antes de AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Filtrando logs
Implementações ILogger
tem um mecanismo interno para aplicar a filtragem de log.
Essa filtragem permite controlar os logs enviados para cada provedor registrado, incluindo o OpenTelemetryLoggerProvider
. "OpenTelemetry" é o alias para OpenTelemetryLoggerProvider
, usado na configuração de regras de filtragem.
O exemplo a seguir define "Erro" como o LogLevel
padrão e também define "Aviso" como o LogLevel
mínimo para uma categoria definida pelo usuário.
Essas regras, conforme definidas, aplicam-se apenas ao OpenTelemetryLoggerProvider
.
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
Para obter mais informações, leia a documentação do OpenTelemetry .NET sobre logs.
Adicionando propriedades personalizadas a rastreamentos
No OpenTelemetry, você pode usar processadores de atividade para enriquecer os dados de telemetria com mais propriedades. É semelhante ao uso de inicializadores de telemetria no Application Insights, em que você pode modificar as propriedades de telemetria.
Por padrão, o Exportador do Azure Monitor sinaliza qualquer solicitação HTTP com um código de resposta de 400 ou superior como falha. No entanto, se você quiser tratar 400 como um sucesso, poderá adicionar um processador de atividade enriquecedor que define o sucesso na atividade e adiciona uma marca para incluir mais propriedades de telemetria. É semelhante a adicionar ou modificar propriedades usando um inicializador no Application Insights, conforme descrito na documentação do Azure Monitor.
Aqui está um exemplo de como adicionar propriedades personalizadas e substituir o comportamento padrão para determinados códigos de resposta:
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;
}
}
Para usar este processador, você precisa criar um TracerProvider
e adicionar o processador antes de AddAzureMonitorTraceExporter
.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Como faço para rastrear manualmente a telemetria usando o OpenTelemetry?
Envio de rastreamentos - Manual
Os rastreamentos no Application Insights são armazenados como RequestTelemetry
e DependencyTelemetry
. No OpenTelemetry, os rastreamentos são modelados como Span
usando a classe Activity
.
O OpenTelemetry .NET utiliza as classes ActivitySource
e Activity
para rastreamento, que fazem parte do runtime do .NET. Essa abordagem é distinta porque a implementação do .NET integra a API de rastreamento diretamente ao próprio runtime. O pacote System.Diagnostics.DiagnosticSource
permite que os desenvolvedores usem ActivitySource
para criar e gerenciar instâncias Activity
. Esse método fornece uma maneira perfeita de adicionar rastreamento a aplicativos .NET sem depender de bibliotecas externas, aplicando os recursos internos do ecossistema .NET. Para obter informações mais detalhadas, consulte as instruções passo a passo da instrumentação de rastreamento distribuído.
Veja como migrar o rastreamento manual:
Observação
No Application Insights, o nome da função e a instância da função podem ser definidos em um nível por telemetria. No entanto, com o Exportador do Azure Monitor, não podemos personalizar em um nível por telemetria. O nome da função e a instância da função são extraídos do recurso OpenTelemetry e aplicados em toda a telemetria. Leia este documento para obter mais informações: Defina o nome da função de nuvem e a instância da função de nuvem.
DependencyTelemetry
O Application Insights DependencyTelemetry
é usado para modelar solicitações de saída. Veja como convertê-lo para OpenTelemetry:
Exemplo do 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);
Exemplo de 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
O Application Insights RequestTelemetry
modela as solicitações de entrada. Veja como migrá-lo para o OpenTelemetry:
Exemplo do 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);
Exemplo de 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);
}
Acompanhamento de operações personalizadas
No Application Insights, acompanhe as operações personalizadas usando os métodos StartOperation
e StopOperation
. Consiga isso usando ActivitySource
e Activity
no OpenTelemetry .NET. Para operações com ActivityKind.Server
e ActivityKind.Consumer
, o Exportador do Azure Monitor gera RequestTelemetry
. Para ActivityKind.Client
, ActivityKind.Producer
e ActivityKind.Internal
, ele gera DependencyTelemetry
. Para obter mais informações sobre o acompanhamento de operações personalizadas, consulte a documentação do Azure Monitor. Para obter mais informações sobre como usar ActivitySource
e Activity
no .NET, consulte as instruções passo a passo da instrumentação de rastreamento distribuído do ..
Veja um exemplo de como iniciar e interromper uma atividade para operações personalizadas:
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.
}
Enviando logs
Os logs no Application Insights são armazenados como TraceTelemetry
e ExceptionTelemetry
.
TraceTelemetry
No OpenTelemetry, o registro é integrado por meio da interface ILogger
. Veja como migrar TraceTelemetry
:
Exemplo do 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);
Exemplo de 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);
}
ExceptionTelemetry
O Application Insights usa ExceptionTelemetry
para registrar exceções. Veja como migrar para o OpenTelemetry:
Exemplo do 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);
Exemplo de 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");
}
Métricas de envio
As métricas no Application Insights são armazenadas como MetricTelemetry
. No OpenTelemetry, as métricas são modeladas como Meter
do pacote System.Diagnostics.DiagnosticSource
.
O Application Insights tem APIs de métrica não pré-agregadas (TrackMetric()
) e pré-agregadas (GetMetric().TrackValue()
). Ao contrário do OpenTelemetry, o Application Insights não tem noção de Instrumentos. O Application Insights tem a mesma API para todos os cenários de métrica.
O OpenTelemetry, por outro lado, exige que os usuários primeiro escolham o instrumento de métrica certo com base na semântica real da métrica. Por exemplo, se a intenção for contar algo (como o número total de solicitações de servidor recebidas etc.), Contador OpenTelemetry deverá ser usado. Se a intenção for calcular vários percentis (como o valor P99 da latência do servidor), então OpenTelemetry Histogram instrumento deve ser usado. Devido a essa diferença fundamental entre o Application Insights e o OpenTelemetry, nenhuma comparação direta é feita entre eles.
Ao contrário do Application Insights, o OpenTelemetry não fornece mecanismos internos para enriquecer ou filtrar métricas. No Application Insights, os processadores e inicializadores de telemetria podem ser usados para modificar ou descartar métricas, mas essa funcionalidade não está disponível no OpenTelemetry.
Além disso, o OpenTelemetry não dá suporte ao envio direto de métricas brutas, pois não há equivalente à funcionalidade TrackMetric()
encontrada no Application Insights.
A migração do Application Insights para o OpenTelemetry envolve a substituição de todos os usos da API de Métrica do Application Insights pela API do OpenTelemetry. Requer a compreensão dos vários instrumentos OpenTelemetry e sua semântica.
Dica
O histograma é o mais versátil e o equivalente mais próximo da API do Application Insights GetMetric().TrackValue()
. Você pode substituir as APIs de Métrica do Application Insights pelo Histograma para atingir a mesma finalidade.
Outros tipos de telemetria
CustomEvents
Não suportado no OpenTelemetry.
Exemplo do Application Insights:
TelemetryClient.TrackEvent()
AvailabilityTelemetry
Não suportado no OpenTelemetry.
Exemplo do Application Insights:
TelemetryClient.TrackAvailability()
PageViewTelemetry
Não suportado no OpenTelemetry.
Exemplo do Application Insights:
TelemetryClient.TrackPageView()
Posso obter métricas dinâmicas para aplicativos de console e serviços de trabalho?
Recomendamos o Exportador de OpenTelemetry do Azure Monitor para os aplicativos de console e serviços de trabalho, o que não inclui métricas dinâmicas.
Próximas etapas
Dica
Nosso grupo de produtos está buscando ativamente feedback sobre esta documentação. Forneça comentários para otel@microsoft.com ou consulte a seção Suporte.
Suporte
- Se você tiver problemas com o Suporte do Azure, abra um tíquete de suporte do Azure.
- Para problemas de OpenTelemetry, entre em contato diretamente com a comunidade do OpenTelemetry .NET.
- Para obter uma lista de problemas abertos relacionados ao Exportador do Azure Monitor, confira a Página de Problemas do GitHub.