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

В этой статье рассматриваются параметры конфигурации для дистрибутива OpenTelemetry в Azure Monitor.

Connection string

Строка подключения в приложении Аналитика определяет целевое расположение для отправки данных телеметрии, гарантируя, что он достигает соответствующего ресурса для мониторинга и анализа.

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

  • Добавьте UseAzureMonitor() в свой класс запуск program.cs приложения.

    // 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 => {
        options.ConnectionString = "<Your Connection String>";
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.    
    app.Run();
    
  • Задайте переменную среды.

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

    {
      "AzureMonitor": {
          "ConnectionString": "<Your Connection String>"
      }
    }
    

Примечание.

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

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

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

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

Задайте имя облачной роли и экземпляр облачной роли с помощью атрибутов ресурсов . Имя облачной роли использует атрибуты 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 OpenTelemetry tracer provider to add the resource attributes to all traces.
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => 
    builder.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();

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

Вы можете включить выборку, чтобы уменьшить объем приема данных, что снижает затраты. Azure Monitor предоставляет пользовательский образец с фиксированной частотой, заполняющий события коэффициентом выборки, в который приложение Аналитика преобразуетсяItemCount. Выборщик фиксированной частоты обеспечивает точные возможности и количество событий. Пример предназначен для сохранения трассировок между службами и взаимодействия с старыми пакетами SDK для приложений Аналитика. Дополнительные сведения см. в разделе "Дополнительные сведения о выборке".

Примечание.

Метрики и журналы не влияют на выборку.

Выборщик ожидает частоту выборки от 0 до 1 включительно. Скорость 0,1 означает, что отправляется примерно 10% ваших трассировок.

// 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(o =>
{
    // Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    o.SamplingRatio = 0.1F;
});

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

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

Совет

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

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

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

Мы поддерживаем классы учетных данных, предоставляемые удостоверением Azure.

  • Рекомендуется DefaultAzureCredential для локальной разработки.
  • Рекомендуется ManagedIdentityCredential использовать управляемые удостоверения, назначенные системой и назначаемые пользователем.
    • Для удостоверений, назначаемых системой, используйте конструктор по умолчанию без параметров.
    • Для назначаемого пользователем укажите идентификатор клиента конструктору.
  • Рекомендуется ClientSecretCredential использовать субъекты-службы.
    • Укажите идентификатор клиента, идентификатор клиента и секрет клиента конструктору.
  1. Установите последний пакет Azure.Identity :

    dotnet add package Azure.Identity
    
  2. Укажите нужный класс учетных данных:

    // 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 credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

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

Чтобы повысить надежность и устойчивость, предложения на основе OpenTelemetry в Azure Monitor записываются в автономное или локальное хранилище по умолчанию, когда приложение теряет подключение к приложению Аналитика. Она сохраняет данные телеметрии приложения на диск и периодически пытается отправить его еще раз в течение 48 часов. В приложениях с высокой нагрузкой данные телеметрии иногда удаляются по двум причинам. Во-первых, если допустимое время превышено, а во-вторых, если превышен максимальный размер файла или пакет SDK не имеет возможности очистить файл. Если нужно выбрать, продукт сохраняет более последние события над старыми. Подробнее

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

  • Windows
    • %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 cannot 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.

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

Часто задаваемые вопросы

В этом разделы приводятся ответы на часто задаваемые вопросы.

Что такое OpenTelemetry?

Это новый стандарт с открытым исходным кодом для наблюдения. Дополнительные сведения см. в openTelemetry.

Почему Microsoft Azure Monitor инвестирует в OpenTelemetry?

Корпорация Майкрософт — один из крупнейших инвесторов OpenTelemetry.

Ключевыми ценными особенностями OpenTelemetry являются независимость от поставщика и согласованность интерфейсов API и пакетов SDK для различных языков.

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

Наконец, OpenTelemetry соответствует стратегии корпорации Майкрософт по работе с открытым исходным кодом.

Что такое состояние OpenTelemetry?

См. сведения о состоянии OpenTelemetry.

Что такое дистрибутив Azure Monitor OpenTelemetry?

Вы можете подумать о нем как тонкой оболочке, которая объединяет все компоненты OpenTelemetry для первого класса в Azure. Эта оболочка также называется распределением в OpenTelemetry.

Почему следует использовать дистрибутив Azure Monitor OpenTelemetry?

Существует несколько преимуществ использования дистрибутива OpenTelemetry в Azure Monitor по сравнению с собственной платформой OpenTelemetry из сообщества:

В духе OpenTelemetry мы разработали дистрибутив, чтобы быть открытым и расширяемым. Например, можно добавить следующее:

  • Экспортер протокола OpenTelemetry (OTLP) и отправка в другое место одновременно
  • Другие библиотеки инструментирования, не включенные в дистрибутив

Так как дистрибутив предоставляет распределение OpenTelemetry, дистрибутив поддерживает все, что поддерживается OpenTelemetry. Например, можно добавить дополнительные процессоры телеметрии, экспортеры или библиотеки инструментирования, если OpenTelemetry поддерживает их.

Примечание.

Дистрибутив задает образец для пользовательского с фиксированной скоростью выборки для приложения Аналитика. Это можно изменить на другой образец, но это может отключить некоторые из включенных возможностей дистрибутива. Дополнительные сведения о поддерживаемом образце см. в разделе "Включение выборки " в разделе "Настройка Azure Monitor OpenTelemetry".

Для языков без поддерживаемого автономного экспортера OpenTelemetry дистрибутив Azure Monitor OpenTelemetry является единственным поддерживаемым в настоящее время способом использования OpenTelemetry с Azure Monitor. Для языков с поддерживаемым автономным экспортером OpenTelemetry вы можете использовать дистрибутив Azure Monitor OpenTelemetry или соответствующий автономный экспортер OpenTelemetry в зависимости от сценария телеметрии. Дополнительные сведения см. в статье "Когда следует использовать экспортер OpenTelemetry Azure Monitor?".

Как протестировать дистрибутив OpenTelemetry в Azure Monitor?

Ознакомьтесь с нашими документами по включению для .NET, Java, JavaScript (Node.js) и Python.

Следует ли использовать OpenTelemetry или пакет SDK для приложений Аналитика?

Мы рекомендуем использовать дистрибутив OpenTelemetry, если вам не требуется функция, доступная только с официальной поддержкой в пакете SDK для приложений Аналитика.

Внедрение OpenTelemetry теперь предотвращает перенос на более позднюю дату.

Когда следует использовать экспортер OpenTelemetry в Azure Monitor?

Для ASP.NET Core, Java, Node.js и Python рекомендуется использовать дистрибутив OpenTelemetry в Azure Monitor. Это одна строка кода для начала работы.

Для всех других сценариев .NET, включая классические ASP.NET, консольные приложения и т. д., мы рекомендуем использовать экспортер OpenTelemetry .NET в Azure Monitor: Azure.Monitor.OpenTelemetry.Exporter

Для более сложных сценариев телеметрии Python, требующих расширенной настройки, рекомендуется использовать экспортер OpenTelemetry Для Python Monitor.

Что такое текущее состояние выпуска функций в дистрибутиве OpenTelemetry в Azure Monitor?

На следующей диаграмме описана поддержка функций OpenTelemetry для каждого языка.

Функция .NET Node.js Python Java
Распределенная трассировка
Пользовательские метрики
Стандартные метрики (точность в настоящее время влияет на выборку)
Выборка с фиксированной частотой
Автономное хранилище и автоматические повторные попытки
Отчеты об исключениях
Коллекция журналов ⚠️
Пользовательские события ⚠️ ⚠️ ⚠️
Проверка подлинности Microsoft Entra
Динамические метрики
Определение контекста ресурсов для vm/VMSS и Служба приложений
Определение контекста ресурсов для AKS и функций
Фильтрация диапазона тестирования доступности
Автоматическое заполнение идентификатора пользователя, идентификатора пользователя с проверкой подлинности и IP-адреса пользователя
Переопределение или задание имени операции вручную, идентификатора пользователя или идентификатора пользователя с проверкой подлинности
Адаптивная выборка
Profiler ⚠️
Отладчик моментальных снимков

Ключ

  • ✅ Эта функция доступна всем клиентам с официальной поддержкой.
  • ⚠️ Эта функция доступна как общедоступная предварительная версия. Дополнительные условия использования для предварительных версий Microsoft Azure.
  • ❌ Эта функция недоступна или не применима.

Можно ли использовать OpenTelemetry для веб-браузеров?

Да, но мы не рекомендуем его, и Azure не поддерживает его. JavaScript OpenTelemetry оптимизирован для Node.js. Вместо этого рекомендуется использовать пакет SDK javaScript для приложений Аналитика.

Когда можно ожидать, что пакет SDK OpenTelemetry будет доступен для использования в веб-браузерах?

Веб-пакет SDK OpenTelemetry не имеет определенной доступности временная шкала. Скорее всего, несколько лет от пакета SDK для браузера, который является жизнеспособной альтернативой пакету SDK JavaScript для приложений Аналитика.

Можно ли протестировать OpenTelemetry в веб-браузере сегодня?

Веб-песочница OpenTelemetry — это вилка, предназначенная для работы OpenTelemetry в браузере. Пока невозможно отправить данные телеметрии в приложение Аналитика. Пакет SDK не определяет общие события клиента.

Поддерживается ли приложение Аналитика вместе с агентами конкурентов, такими как AppDynamics, DataDog и NewRelic?

№ Эта практика не является тем, что мы планируем протестировать или поддерживать, хотя наши дистрибутивы позволяют экспортировать в конечную точку OTLP вместе с Azure Monitor одновременно.

Можно ли использовать предварительные версии функций в рабочих средах?

Это не рекомендуемый вариант. Дополнительные условия использования для предварительных версий Microsoft Azure.

Какова разница между ручной и автоматической инструментированием?

Ознакомьтесь с обзором OpenTelemetry.

Можно ли использовать сборщик OpenTelemetry?

Некоторые клиенты используют сборщик OpenTelemetry в качестве альтернативы агенту, хотя корпорация Майкрософт официально не поддерживает подход на основе агента для мониторинга приложений. В то же время сообщество с открытым исходным кодом внесло вклад в сборщик Azure Monitor OpenTelemetry, который некоторые клиенты используют для отправки данных в Аналитика приложения Azure Monitor. Это не поддерживается корпорацией Майкрософт.

Чем отличается OpenCensus от OpenTelemetry?

OpenCensus — это предшественник OpenTelemetry. Корпорация Майкрософт способствовала объединению OpenTracing с OpenCensus для создания OpenTelemetry, единого в мире стандарта наблюдаемости. Текущий рабочий пакет SDK для Python для Azure Monitor основан на OpenCensus. Корпорация Майкрософт стремится сделать Azure Monitor на основе OpenTelemetry.

Устранение неполадок

Не работает? Ознакомьтесь со страницей устранения неполадок для ASP.NET Core.

Поддержка

Выберите вкладку для выбранного языка, чтобы узнать параметры поддержки.

Отзывы по OpenTelemetry

Чтобы оставить отзыв, сделайте следующее: