Миграция из пакетов SDK для .NET Application Insights в Azure Monitor OpenTelemetry
В этом руководстве приведены пошаговые инструкции по переносу различных приложений .NET с помощью комплектов средств разработки программного обеспечения Application Insights в Azure Monitor OpenTelemetry.
Ожидается аналогичный опыт инструментирования OpenTelemetry в Azure Monitor, как и с пакетами SDK Application Insights. Дополнительные сведения и сравнение функций по функциям см. в разделе о состоянии выпуска компонентов.
- ASP.NET миграция Core в дистрибутив OpenTelemetry в Azure Monitor. (
Azure.Monitor.OpenTelemetry.AspNetCore
Пакет NuGet) - миграция ASP.NET, консоли и WorkerService в экспортер OpenTelemetry в Azure Monitor. (
Azure.Monitor.OpenTelemetry.Exporter
Пакет NuGet)
Если вы начинаете работу с Application Insights и не хотите переноситься из классического API, см. статью "Включить Azure Monitor OpenTelemetry".
Необходимые компоненты
- Веб-приложение ASP.NET Core уже инструментировано с помощью Application Insights без каких-либо настроек
- Активно поддерживаемая версия .NET
Совет
Наша группа продуктов активно ищет отзывы об этой документации. Предоставьте отзыв или otel@microsoft.com просмотрите раздел поддержки.
Удаление пакета SDK Application Insights
Примечание.
Прежде чем продолжить эти действия, убедитесь, что у вас есть текущая резервная копия приложения.
Удаление пакетов NuGet
Microsoft.ApplicationInsights.AspNetCore
Удалите пакет из вашегоcsproj
приложения.dotnet remove package Microsoft.ApplicationInsights.AspNetCore
Удаление кода и настройки инициализации
Удалите все ссылки на типы Application Insights в базе кода.
Совет
После удаления пакета Application Insights вы можете повторно создать приложение, чтобы получить список ссылок, которые необходимо удалить.
Удалите Application Insights из вашей
ServiceCollection
строки, удалив следующую строку:builder.Services.AddApplicationInsightsTelemetry();
ApplicationInsights
Удалите раздел из вашегоappsettings.json
приложения.{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
Очистка и сборка
Проверьте каталог bin, чтобы убедиться, что все ссылки были удалены
Microsoft.ApplicationInsights.*
.Тестирование приложения
Убедитесь, что приложение не имеет непредвиденных последствий.
Совет
Наша группа продуктов активно ищет отзывы об этой документации. Предоставьте отзыв или otel@microsoft.com просмотрите раздел поддержки.
Включение OpenTelemetry
Мы рекомендуем создать ресурс разработки и использовать его строка подключения при выполнении этих инструкций.
Запланируйте обновление строка подключения отправки телеметрии исходному ресурсу после подтверждения успешной миграции.
Установка дистрибутива Azure Monitor
Наш дистрибутив Azure Monitor обеспечивает автоматическую телеметрию, включая библиотеки инструментирования OpenTelemetry для сбора трассировок, метрик, журналов и исключений, а также позволяет собирать пользовательские данные телеметрии.
Установка дистрибутива Azure Monitor предоставляет пакет SDK OpenTelemetry в качестве зависимости.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Добавление и настройка OpenTelemetry и Azure Monitor
Пакет SDK OpenTelemery должен быть настроен при запуске приложения в рамках вашей
ServiceCollection
обычнойProgram.cs
версии.OpenTelemetry имеет концепцию трех сигналов; Трассировки, метрики и журналы. Дистрибутив Azure Monitor настраивает каждый из этих сигналов.
Program.cs
В следующем примере кода показаны основы.
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();
}
}
Мы рекомендуем задать строку подключения в переменной среды:
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Дополнительные параметры настройки строки подключения подробно описаны здесь: настройка строки подключения Application Insights.
Совет
Наша группа продуктов активно ищет отзывы об этой документации. Предоставьте отзыв или otel@microsoft.com просмотрите раздел поддержки.
Установка и настройка библиотек инструментирования
Библиотеки инструментирования можно добавить в проект для автоматического сбора данных телеметрии о конкретных компонентах или зависимостях.
В дистрибутив включены следующие библиотеки.
Настройка библиотек инструментирования
Дистрибутив Azure Monitor включает инструментирование .NET OpenTelemetry для ASP.NET Core, HttpClient и SQLClient. Эти включенные инструментирования можно настроить или вручную добавить дополнительные инструментирования самостоятельно с помощью API OpenTelemetry.
Ниже приведены некоторые примеры настройки инструментирования.
Настройка 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);
};
});
Настройка 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);
};
});
Настройка SqlClientInstrumentationOptions
Мы поставщиком инструментирования SQLClient в нашем пакете, пока он все еще находится в бета-версии. Когда он достигает стабильного выпуска, мы включаем его в качестве стандартной ссылки на пакет. До тех пор, чтобы настроить инструментирование SQLClient, добавьте OpenTelemetry.Instrumentation.SqlClient
ссылку на пакет в проект и используйте его общедоступный API.
dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.SetDbStatementForStoredProcedure = false;
});
});
Настройка Azure Monitor
Application Insights предлагает множество дополнительных параметров конфигурации с помощью ApplicationInsightsServiceOptions
.
Параметр Application Insights | OpenTelemetry Alternative |
---|---|
AddAutoCollectedMetricExtractor | Н/П |
ApplicationVersion | Задайте значение "service.version" в ресурсе |
ConnectionString | См . инструкции по настройке строки подключения. |
DependencyCollectionOptions | Недоступно Чтобы настроить зависимости, просмотрите доступные параметры конфигурации для применимых библиотек инструментирования. |
DeveloperMode | Н/П |
EnableActiveTelemetryConfigurationSetup | Н/П |
EnableAdaptiveSampling | Недоступно Поддерживается только выборка фиксированной частоты. |
EnableAppServicesHeartbeatTelemetryModule | Н/П |
EnableAuthenticationTrackingJavaScript | Н/П |
EnableAzureInstanceMetadataTelemetryModule | Н/П |
EnableDependencyTrackingTelemetryModule | Инструкции по фильтрации трассировок. |
EnableDiagnosticsTelemetryModule | Н/П |
EnableEventCounterCollectionModule | Н/П |
EnableHeartbeat | Н/П |
EnablePerformanceCounterCollectionModule | Н/П |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | Инструкции по фильтрации трассировок. |
EndpointAddress | Используйте ConnectionString. |
InstrumentationKey | Используйте ConnectionString. |
RequestCollectionOptions | Недоступно См. параметры OpenTelemetry.Instrumentation.AspNetCore. |
Удаление пользовательских конфигураций
Следующие сценарии являются необязательными и применяются только к расширенным пользователям.
Если у вас есть дополнительные ссылки на
TelemetryClient
данные телеметрии, которые можно использовать для ручной записи телеметрии, их следует удалить.Если вы добавили любую пользовательскую фильтрацию или обогащение в виде пользовательского
TelemetryProcessor
илиTelemetryInitializer
их следует удалить. Их можно найти в вашемServiceCollection
.builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
Удаление фрагмента кода JavaScript
Если вы использовали фрагмент кода, предоставленный пакетом SDK для .NET Application Insights, он также должен быть удален. Полные примеры кода для удаления см. в руководстве по включению телеметрии на стороне клиента для веб-приложений.
Если вы добавили пакет SDK JavaScript для сбора данных телеметрии на стороне клиента, его также можно удалить, хотя он продолжает работать без пакета SDK для .NET. Полные примеры кода для удаления см. в руководстве по подключению пакета SDK для JavaScript.
Удаление артефактов Visual Studio
Если вы использовали Visual Studio для подключения к Application Insights, в проекте может быть больше файлов.
Properties/ServiceDependencies
В каталоге может быть ссылка на ресурс Application Insights.
Совет
Наша группа продуктов активно ищет отзывы об этой документации. Предоставьте отзыв или otel@microsoft.com просмотрите раздел поддержки.
Часто задаваемые вопросы
Этот раздел предназначен для клиентов, использующих инициализаторы телеметрии или процессоры, или напишите пользовательский код в классическом API Application Insights для создания пользовательской телеметрии.
Как API пакета SDK сопоставляется с концепциями OpenTelemetry?
OpenTelemetry — это нейтральная платформа наблюдения поставщика. Api Application Insights отсутствуют в пакете SDK или библиотеках OpenTelemetry. Перед миграцией важно понимать некоторые понятия OpenTelemetry.
В Application Insights все данные телеметрии управляются одним
TelemetryClient
иTelemetryConfiguration
. В OpenTelemetry каждый из трех сигналов телеметрии (трассировки, метрики и журналы) имеет собственную конфигурацию. Вы можете вручную создать данные телеметрии с помощью среды выполнения .NET без внешних библиотек. Дополнительные сведения см. в руководствах .NET по распределенной трассировке, метрикам и ведению журнала.Application Insights используется
TelemetryModules
для автоматического сбора данных телеметрии для приложения. Вместо этого OpenTelemetry использует библиотеки инструментирования для сбора данных телеметрии из определенных компонентов (например , AspNetCore для запросов и HttpClient для зависимостей).Application Insights используется
TelemetryInitializers
для обогащения телеметрии дополнительными сведениями или переопределения свойств. С помощью OpenTelemetry можно написать обработчик для настройки определенного сигнала. Кроме того, многие библиотеки инструментирования OpenTelemetry предлагаютEnrich
метод настройки телеметрии, созданной этим конкретным компонентом.Application Insights используется
TelemetryProcessors
для фильтрации данных телеметрии. Обработчик OpenTelemetry также можно использовать для применения правил фильтрации по конкретному сигналу.
Как типы телеметрии Application Insights сопоставляются с OpenTelemetry?
Эта таблица сопоставляет типы данных Application Insights с концепциями OpenTelemetry и их реализацией .NET.
Таблица Azure Monitor | Application Insights DataType | Тип данных OpenTelemetry | Реализация .NET |
---|---|---|---|
customEvents | EventTelemetry | Неприменимо | Неприменимо |
customMetrics | MetricTelemetry | Метрики | System.Diagnostics.Metrics.Meter |
dependencies | DependencyTelemetry | Диапазоны (клиент, внутренний, потребитель) | System.Diagnostics.Activity |
exceptions | ExceptionTelemetry | Исключения | System.Exception |
requests | RequestTelemetry | Диапазоны (сервер, производитель) | System.Diagnostics.Activity |
traces | TraceTelemetry | Журналы | Microsoft.Extensions.Logging.ILogger |
Дополнительные сведения см. в следующих документах.
- Основы сбора данных в Azure Monitor Application Insights
- Модель данных телеметрии Application Insights
- Основные понятия OpenTelemetry
Как понятия выборки Application Insights сопоставляются с OpenTelemetry?
Хотя Application Insights предлагает несколько вариантов настройки выборки, экспортер Azure Monitor или дистрибутив Azure Monitor предлагает только выборку фиксированной частоты. Можно использовать пример только запросов и зависимостей (трассировки OpenTelemetry).
Дополнительные сведения о настройке выборки см. в руководстве по включению выборки
Как процессоры и инициализаторы телеметрии сопоставляются с OpenTelemetry?
В пакете SDK для Application Insights для .NET используйте процессоры телеметрии для фильтрации и изменения или отмены данных телеметрии. Инициализаторы телеметрии используются для добавления или изменения настраиваемых свойств. Дополнительные сведения см. в документации по Azure Monitor. OpenTelemetry заменяет эти понятия действиями или обработчиками журналов, которые расширяют и фильтруют данные телеметрии.
Фильтрация трассировок
Чтобы фильтровать данные телеметрии в OpenTelemetry, можно реализовать обработчик действий. Этот пример эквивалентен примеру Application Insights для фильтрации данных телеметрии, как описано в документации по Azure Monitor. В примере показано, где отфильтровываются неудачные вызовы зависимостей.
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;
}
}
Чтобы использовать этот процессор, необходимо создать TracerProvider
и добавить процессор до AddAzureMonitorTraceExporter
этого.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Фильтрация журналов
Реализации ILogger
имеют встроенный механизм для применения фильтрации журналов.
Эта фильтрация позволяет управлять журналами, отправленными каждому зарегистрированным поставщику, включая OpenTelemetryLoggerProvider
журналы. OpenTelemetry — это псевдоним , OpenTelemetryLoggerProvider
используемый при настройке правил фильтрации.
Следующий пример определяет "Error" в качестве значения по умолчанию LogLevel
, а также определяет "Предупреждение" как минимум LogLevel
для определяемой пользователем категории.
Эти правила, как определено, применяются только к OpenTelemetryLoggerProvider
.
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
Дополнительные сведения см. в документации openTelemetry .NET по журналам.
Добавление настраиваемых свойств в трассировки
В OpenTelemetry можно использовать обработчики действий для обогащения данных телеметрии с дополнительными свойствами. Аналогично использованию инициализаторов телеметрии в Application Insights, где можно изменить свойства телеметрии.
По умолчанию служба "Экспортер Azure Monitor" помечает любой HTTP-запрос с кодом ответа 400 или выше, так как произошел сбой. Однако если вы хотите рассматривать 400 как успешный, можно добавить обогащенный обработчик действий, который задает успешное выполнение действия и добавляет тег для включения дополнительных свойств телеметрии. Аналогично добавлению или изменению свойств с помощью инициализатора в Application Insights, как описано в документации по Azure Monitor.
Ниже приведен пример добавления настраиваемых свойств и переопределения поведения по умолчанию для определенных кодов ответов:
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;
}
}
Чтобы использовать этот процессор, необходимо создать TracerProvider
и добавить процессор до AddAzureMonitorTraceExporter
этого.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Разделы справки вручную отслеживать данные телеметрии с помощью OpenTelemetry?
Отправка трассировок вручную
Трассировки в Application Insights хранятся как RequestTelemetry
и DependencyTelemetry
. В OpenTelemetry трассировки моделиируются как Span
использование Activity
класса.
OpenTelemetry .NET использует ActivitySource
классы и Activity
классы для трассировки, которые являются частью среды выполнения .NET. Этот подход отличается, так как реализация .NET интегрирует API трассировки непосредственно в саму среду выполнения. Пакет System.Diagnostics.DiagnosticSource
позволяет разработчикам создавать ActivitySource
экземпляры и управлять ими Activity
. Этот метод позволяет легко добавлять трассировку в приложения .NET без использования внешних библиотек, применяя встроенные возможности экосистемы .NET. Дополнительные сведения см. в пошаговом руководстве по инструментированию распределенной трассировки.
Вот как перенести трассировку вручную:
Примечание.
В Application Insights имя роли и экземпляр роли можно задать на уровне телеметрии. Однако при использовании экспортера Azure Monitor нельзя настроить на уровне телеметрии. Имя роли и экземпляр роли извлекаются из ресурса OpenTelemetry и применяются ко всем данным телеметрии. Дополнительные сведения см. в этом документе: задание имени облачной роли и экземпляра облачной роли.
DependencyTelemetry
Application Insights DependencyTelemetry
используется для моделирования исходящих запросов. Вот как преобразовать его в OpenTelemetry:
Пример 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);
Пример 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
Application Insights RequestTelemetry
моделирует входящие запросы. Вот как перенести его в OpenTelemetry:
Пример 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);
Пример 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);
}
Отслеживание пользовательских операций
В Application Insights отслеживайте пользовательские операции с помощью StartOperation
и StopOperation
методами. ActivitySource
Activity
Используйте и в OpenTelemetry .NET. Для операций с ActivityKind.Server
ActivityKind.Consumer
azure Monitor Экспортер создает RequestTelemetry
. Для ActivityKind.Client
, ActivityKind.Producer
и ActivityKind.Internal
, он создает DependencyTelemetry
. Дополнительные сведения об отслеживании пользовательских операций см. в документации по Azure Monitor. Дополнительные сведения об использовании и Activity
использовании ActivitySource
.NET см. в пошаговом руководстве по инструментированию распределенной трассировки .NET.
Ниже приведен пример запуска и остановки действия для пользовательских операций:
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.
}
Отправка журналов
Журналы в Application Insights хранятся как TraceTelemetry
и ExceptionTelemetry
.
TraceTelemetry
В OpenTelemetry ведение журнала интегрируется через ILogger
интерфейс. Вот как выполнить миграцию TraceTelemetry
:
Пример 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);
Пример 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
Application Insights используется ExceptionTelemetry
для журналов исключений. Вот как выполнить миграцию в OpenTelemetry:
Пример 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);
Пример 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");
}
Отправка метрик
Метрики в Application Insights хранятся как MetricTelemetry
. В OpenTelemetry метрики моделиируются как Meter
из System.Diagnostics.DiagnosticSource
пакета.
Application Insights имеет api-интерфейсы метрик, отличные от предварительной агрегирования (TrackMetric()
) и предварительной агрегирования (GetMetric().TrackValue()
). В отличие от OpenTelemetry, Application Insights не имеет понятия "Инструменты". Application Insights имеет один и тот же API для всех сценариев метрик.
С другой стороны, OpenTelemetry требует, чтобы пользователи сначала выбрали правильный инструмент метрик на основе фактической семантики метрики. Например, если намерение состоит в том, чтобы подсчитать что-то (например, количество полученных общих запросов сервера и т. д.), следует использовать счетчик OpenTelemetry. Если намерение состоит в вычислении различных процентилей (например, значения задержки сервера P99), следует использовать инструмент гистограммы OpenTelemetry. Из-за этого фундаментального различия между Application Insights и OpenTelemetry между ними не производится прямое сравнение.
В отличие от Application Insights, OpenTelemetry не предоставляет встроенные механизмы для обогащения или фильтрации метрик. В Application Insights обработчики телеметрии и инициализаторы могут использоваться для изменения или отмены метрик, но эта возможность недоступна в OpenTelemetry.
Кроме того, OpenTelemetry не поддерживает отправку необработанных метрик напрямую, так как функции, найденные в Application Insights, отсутствуют TrackMetric()
.
Миграция из Application Insights в OpenTelemetry включает замену всех использования API метрик Application Insights с ПОМОЩЬЮ API OpenTelemetry. Для этого требуется понимание различных инструментов OpenTelemetry и их семантики.
Совет
Гистограмма является наиболее универсальным и ближайшим эквивалентом API Application Insights GetMetric().TrackValue()
. Вы можете заменить API метрик Application Insights на гистограмму для достижения той же цели.
Другие типы телеметрии
CustomEvents
Не поддерживается в OpenTelemetry.
Пример Application Insights:
TelemetryClient.TrackEvent()
AvailabilityTelemetry
Не поддерживается в OpenTelemetry.
Пример Application Insights:
TelemetryClient.TrackAvailability()
PageViewTelemetry
Не поддерживается в OpenTelemetry.
Пример Application Insights:
TelemetryClient.TrackPageView()
Можно ли получить динамические метрики для консольных и рабочих приложений службы?
Мы рекомендуем microsoft Azure Monitor OpenTelemetry Exporter для консольных и рабочих приложений службы, которые не включают динамические метрики.
Следующие шаги
Совет
Наша группа продуктов активно ищет отзывы об этой документации. Предоставьте отзыв или otel@microsoft.com просмотрите раздел поддержки.
Поддержка
- Чтобы получить сведения о проблемах поддержки Azure, сделайте запрос в службу поддержки Azure.
- При проблемах с OpenTelemetry обратитесь непосредственно к сообществу OpenTelemetry .NET.
- Список открытых проблем, связанных с экспортером Azure Monitor, см. на странице проблем GitHub.