Поделиться через


Настройка Azure Monitor OpenTelemetry

В этом руководстве объясняется, как настроить OpenTelemetry (OTel) в Azure Monitor Application Insights с помощью дистрибутива OpenTelemetry в Azure Monitor. Правильная конфигурация обеспечивает согласованную сбор данных телеметрии в .NET, Java, Node.jsи приложениях Python, что обеспечивает более надежный мониторинг и диагностику.

Примечание.

Сведения о приложениях-функциях Azure см. в статье "Использование OpenTelemetry" с функциями Azure.

строка подключения

Строка подключения в Application Insights определяет целевое расположение для отправки данных телеметрии.

Используйте один из следующих трех способов настройки строка подключения:

  • Добавьте UseAzureMonitor() в program.cs файл.

        var builder = WebApplication.CreateBuilder(args);
    
        // Add the OpenTelemetry telemetry service to the application.
        // This service will collect and send telemetry data to Azure Monitor.
        builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
            options.ConnectionString = "<YOUR-CONNECTION-STRING>";
        });
    
        var app = builder.Build();
    
        app.Run();
    
  • Задайте переменную среды.

    APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
    
  • Добавьте следующий раздел в appsettings.json файл конфигурации.

      {
        "AzureMonitor": {
            "ConnectionString": "<YOUR-CONNECTION-STRING>"
        }
      }
    

Примечание.

Если задать строка подключения в нескольких местах, мы придерживаемся следующего приоритета:

  1. Код
  2. Переменная среды
  3. Файл конфигурации

Настройка имени облачной роли и экземпляра облачной роли

Для поддерживаемых языков дистрибутив Azure Monitor OpenTelemetry автоматически обнаруживает контекст ресурса и предоставляет значения по умолчанию для свойств облачного имени роли и экземпляра облачной роли компонента. Однако может потребоваться переопределить значения по умолчанию на то, что имеет смысл для вашей команды. Значение имени облачной роли отображается на карте приложения в качестве имени под узлом.

Задайте имя и экземпляр облачной роли с помощью атрибутов Resource. Имя облачной роли использует атрибуты service.namespace и service.name, хотя и возвращается к service.name, если service.namespace не задано. Экземпляр облачной роли использует значение атрибута service.instance.id. Сведения о стандартных атрибутах ресурсов см. в разделе "Семантические соглашения OpenTelemetry".

// Setting role name and role instance

// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
    { "service.name", "my-service" },
    { "service.namespace", "my-namespace" },
    { "service.instance.id", "my-instance" }};

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry()
    .UseAzureMonitor()
    // Configure the ResourceBuilder to add the custom resource attributes to all signals.
    // Custom resource attributes should be added AFTER AzureMonitor to override the default ResourceDetectors.
    .ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(resourceAttributes));

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Включение выборки

Отбор данных снижает объем и стоимость обработки телеметрической информации. Дистрибутив OpenTelemetry в Azure Monitor поддерживает две стратегии семплирования для трассировок и (при необходимости) позволяет согласовать журналы приложений в соответствии с решениями по семплированию трассировки. Самплер прикрепляет выбранный коэффициент выборки или частоту к экспортируемым трассировкам, чтобы Application Insights мог точно настроить учёт данных о нагрузках. Общие сведения см. в разделе " Дополнительные сведения о выборке".

Внимание

  • Решения по выборке применяются к трассировкам (диапазонам).
  • Журналы , принадлежащие неуправляемой трассировке, удаляются по умолчанию, но вы можете отказаться от выборки на основе трассировки для журналов.
  • Метрики никогда не выборки.

Примечание.

Если вы видите непредвиденные расходы или высокие затраты в Application Insights, распространенные причины включают высокий объем телеметрии, пики приема данных и неправильно настроенную выборку. Чтобы начать устранение неполадок, см. статью "Устранение проблем с высоким объемом данных в Application Insights".

Настройка выборки с помощью переменных среды

Используйте стандартные переменные среды OpenTelemetry, чтобы выбрать образец и указать его аргумент:

  • OTEL_TRACES_SAMPLER — тип семплера

    • microsoft.fixed.percentage — отбор части трассировок.
    • microsoft.rate_limited - лимит трассировок в секунду.
  • OTEL_TRACES_SAMPLER_ARG — аргумент sampler

    • Для microsoft.fixed.percentage: значение от 0,0 до 1,0 (например, 0.1 = ~10%).
    • Для microsoft.rate_limited: максимальные трассировки в секунду (например, 1.5).

В следующих примерах показано, как настроить выборку с помощью переменных среды.

Выборка фиксированного процента (~10%)

export OTEL_TRACES_SAMPLER="microsoft.fixed.percentage"
export OTEL_TRACES_SAMPLER_ARG=0.1

Выборка с ограничением скорости (~1,5 трассировок в секунду)

export OTEL_TRACES_SAMPLER="microsoft.rate_limited"
export OTEL_TRACES_SAMPLER_ARG=1.5

Настройка выборки в коде

Примечание.

При настройке параметров уровня кода и переменных среды переменные среды имеют приоритет. Поведение выборки по умолчанию может отличаться по языку.

Фиксированная процентная выборка

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.SamplingRatio = 0.1F; // ~10%
});
var app = builder.Build();
app.Run();

Выборка с ограничением скорости

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.TracesPerSecond = 1.5; // ~1.5 traces/sec
});
var app = builder.Build();
app.Run();

Примечание.

Если вы не задаете пример в коде или с помощью переменных среды, Azure Monitor использует ApplicationInsightsSampler по умолчанию.

Совет

При использовании выборки с фиксированным процентом, если вы не уверены, какой указать уровень выборки, начните с 5% (0.05). Настройте частоту на основе точности операций, отображаемых в панелях ошибок и производительности. Любая выборка снижает точность, поэтому мы рекомендуем оповещать о метриках OpenTelemetry, которые не зависят от выборки.

Настройка выборки на основе трассировки для журналов

При включении записи журналов, принадлежащие неуправляемой трассировке , удаляются таким образом, чтобы журналы оставались в соответствии с выборкой трассировки.

  • Запись журнала считается частью трассировки при наличии допустимой SpanId.
  • Если в связанной трассировке указано "не отслеживается", запись журнала удаляется.
  • Записи журнала без контекста трассировки не затрагиваются .
  • Эта функция включена по умолчанию.

Используйте следующие параметры для настройки выборки журналов на основе трассировки:

builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.EnableTraceBasedLogsSampler = true;
});

Динамические метрики

Динамические метрики предоставляют панель мониторинга аналитики в режиме реального времени для анализа активности приложений и производительности.

Внимание

См. дополнительные условия использования для предварительных версий Microsoft Azure о правовых условиях, которые применяются к функциям Azure в бета-версии, предварительном просмотре или иначе еще не выпущены в общую доступность.

По умолчанию эта функция включена.

Пользователи могут отключить динамические метрики при настройке дистрибутива.

builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
	// Disable the Live Metrics feature.
    options.EnableLiveMetrics = false;
});

Включение проверки подлинности Microsoft Entra ID (прежнее название — Azure AD)

Возможно, потребуется включить проверку подлинности Microsoft Entra для более безопасного подключения к Azure, что предотвращает прием неавторизованных данных телеметрии в подписку.

Дополнительные сведения см. на нашей выделенной странице проверки подлинности Microsoft Entra, связанной с каждым поддерживаемым языком.

Дополнительные сведения о настройке аутентификации Entra ID см. в статье Microsoft Entra Authentication for Application Insights

Автономное хранилище и автоматические повторные попытки

Azure Monitor на основе OpenTelemetry осуществляет кэширование телеметрии при разрыве соединения приложения с Application Insights и повторные попытки отправки данных в течение до 48 часов. Рекомендации по обработке данных см. в разделе "Экспорт и удаление частных данных". Приложения с высокой нагрузкой иногда сбрасывают данные телеметрии по двум причинам: превышение допустимого времени или превышение максимального размера файла. При необходимости продукт определяет последние события по сравнению со старыми.

Пакет дистрибутива включает AzureMonitorExporter, который по умолчанию использует одно из следующих расположений для автономного хранилища (указано в порядке приоритета):

  • Виндоус

    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • Не в Windows

    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

Чтобы переопределить каталог по умолчанию, необходимо задать.AzureMonitorOptions.StorageDirectory

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
    // Set the Azure Monitor storage directory to "C:\\SomeDirectory".
    // This is the directory where the OpenTelemetry SDK will store any telemetry data that can't be sent to Azure Monitor immediately.
    options.StorageDirectory = "C:\\SomeDirectory";
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Чтобы отключить эту функцию, следует задать.AzureMonitorOptions.DisableOfflineStorage = true

Включение средства экспорта OTLP

Возможно, вы хотите включить экспортер OpenTelemetry Protocol (OTLP) вместе с экспортером Azure Monitor, чтобы отправить данные телеметрии в два расположения.

Примечание.

Средство экспорта OTLP отображается только для удобства. Корпорация Майкрософт официально не поддерживает средство экспорта OTLP, а также все подчиненные компоненты и сторонние средства.

  1. Установите пакет OpenTelemetry.Exporter.OpenTelemetryProtocol в проекте.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. Добавьте приведенный ниже фрагмент кода. В этом примере предполагается, что у вас есть сборщик OpenTelemetry с работающим приемником OTLP. Дополнительные сведения см. в примере на сайте GitHub.

    // Create a new ASP.NET Core web application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    // Add the OpenTelemetry OTLP exporter to the application.
    // This exporter will send telemetry data to an OTLP receiver, such as Prometheus
    builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
    builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Конфигурации OpenTelemetry

Следующие конфигурации OpenTelemetry можно получить через переменные среды при использовании дистрибутивов OpenTelemetry в Azure Monitor.

Переменная среды Описание
APPLICATIONINSIGHTS_CONNECTION_STRING Задайте для ресурса Application Insights строка подключения.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED Задайте для него true возможность отказаться от внутренней коллекции метрик.
OTEL_RESOURCE_ATTRIBUTES Пары "ключ-значение", используемые в качестве атрибутов ресурсов. Дополнительные сведения об атрибутах ресурсов см. в спецификации пакета SDK для ресурсов.
OTEL_SERVICE_NAME Задает значение атрибута service.name ресурса. Если service.name он также указан OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME то имеет приоритет.

Строки запроса URL-адреса Redact

Чтобы изменить строки запроса URL-адреса, отключите коллекцию строк запроса. Этот параметр рекомендуется использовать при вызове хранилища Azure с помощью маркера SAS.

При использовании пакета дистрибутива Azure.Monitor.OpenTelemetry.AspNetCore включены библиотеки ASP.NET Core и HttpClient Instrumentation. По умолчанию пакет дистрибутива задает redaction строки запроса.

Чтобы изменить это поведение, необходимо задать для переменной среды значение true или false.

  • ASP.NET основное инструментирование. OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION По умолчанию параметр "Редактация строки запроса" отключен. Чтобы включить, задайте для этой переменной среды значение false.

  • Инструментирование клиента Http. OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION По умолчанию параметр "Редактация строки запроса" отключен. Чтобы включить, задайте для этой переменной среды значение false.

Интервал экспорта метрик

Можно настроить интервал экспорта метрик с помощью переменной OTEL_METRIC_EXPORT_INTERVAL среды.

OTEL_METRIC_EXPORT_INTERVAL=60000

Значение по умолчанию — 60000 миллисекунда (60 секунд). Этот параметр определяет, как часто пакет SDK OpenTelemetry экспортирует метрики.

Совет

Мониторинг метрик Azure и Рабочая область Azure Monitor получают пользовательские метрики с фиксированным интервалом в 60 секунд. Метрики, отправленные чаще, буфериируются и обрабатываются каждые 60 секунд. Показатели Log Analytics записываются с указанным интервалом отправки, что может привести к увеличению затрат при более коротких интервалах и задержке видимости при более длительных.

Дополнительные сведения см. в следующих спецификациях OpenTelemetry: