В этой статье рассматриваются параметры конфигурации для дистрибутива OpenTelemetry в Azure Monitor.
Connection string
Строка подключения в 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>"
}
}
Примечание.
Если задать строка подключения в нескольких местах, мы придерживаемся следующего приоритета:
- Код
- Переменная среды
- Файл конфигурации
Используйте один из следующих двух способов настройки строка подключения:
Добавьте экспортер Azure Monitor к каждому сигналу OpenTelemetry в запуске приложения.
// Create a new OpenTelemetry tracer provider.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
options.ConnectionString = "<Your Connection String>";
})
.Build();
// Create a new OpenTelemetry meter provider.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
options.ConnectionString = "<Your Connection String>";
})
.Build();
// Create a new logger factory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
options.ConnectionString = "<Your Connection String>";
});
});
});
Задайте переменную среды.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Примечание.
Если задать строка подключения в нескольких местах, мы придерживаемся следующего приоритета:
- Код
- Переменная среды
Чтобы задать строка подключения, см. строку подключения.
Используйте один из следующих двух способов настройки строка подключения:
Задайте переменную среды.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Задайте свойство.
applicationinsights.connection.string=<Your Connection String>
Используйте один из следующих двух способов настройки строка подключения:
Задайте переменную среды.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Используйте объект конфигурации.
// Import the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions class from the @azure/monitor-opentelemetry package.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
// Create a new AzureMonitorOpenTelemetryOptions object.
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString: "<your connection string>"
}
};
// Enable Azure Monitor integration using the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions object.
useAzureMonitor(options);
Используйте один из следующих двух способов настройки строка подключения:
Задайте переменную среды.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Использовать функцию configure_azure_monitor
.
# Import the `configure_azure_monitor()` function from the `azure.monitor.opentelemetry` package.
from azure.monitor.opentelemetry import configure_azure_monitor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<your-connection-string>` with the connection string of your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<your-connection-string>",
)
Настройка имени облачной роли и экземпляра облачной роли
Для поддерживаемых языков дистрибутив 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 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(_testResourceAttributes));
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Задайте имя облачной роли и экземпляр облачной роли с помощью атрибутов ресурсов . Имя облачной роли использует атрибуты 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 resource builder.
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
// Create a new OpenTelemetry tracer provider and set the resource builder.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// Set ResourceBuilder on the TracerProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorTraceExporter()
.Build();
// Create a new OpenTelemetry meter provider and set the resource builder.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
// Set ResourceBuilder on the MeterProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorMetricExporter()
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the resource builder.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
// Set ResourceBuilder on the Logging config.
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
});
});
Чтобы задать имя облачной роли, см . имя облачной роли.
Сведения о настройке экземпляра облачной роли см. в разделе "Экземпляр облачной роли".
Чтобы задать имя облачной роли, выполните следующие действия.
- Использование собственных приложений образов
spring.application.name
Spring Boot
- Использование собственных приложений образов
quarkus.application.name
Quarkus
Задайте имя облачной роли и экземпляр облачной роли с помощью атрибутов ресурсов . Имя облачной роли использует атрибуты service.namespace
и service.name
, хотя и возвращается к service.name
, если service.namespace
не задано. Экземпляр облачной роли использует значение атрибута service.instance.id
. Сведения о стандартных атрибутах ресурсов см. в разделе "Семантические соглашения OpenTelemetry".
// Import the useAzureMonitor function, the AzureMonitorOpenTelemetryOptions class, the Resource class, and the SemanticResourceAttributes class from the @azure/monitor-opentelemetry, @opentelemetry/resources, and @opentelemetry/semantic-conventions packages, respectively.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
const { Resource } = require("@opentelemetry/resources");
const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions");
// Create a new Resource object with the following custom resource attributes:
//
// * service_name: my-service
// * service_namespace: my-namespace
// * service_instance_id: my-instance
const customResource = new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: "my-service",
[SemanticResourceAttributes.SERVICE_NAMESPACE]: "my-namespace",
[SemanticResourceAttributes.SERVICE_INSTANCE_ID]: "my-instance",
});
// Create a new AzureMonitorOpenTelemetryOptions object and set the resource property to the customResource object.
const options: AzureMonitorOpenTelemetryOptions = {
resource: customResource
};
// Enable Azure Monitor integration using the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions object.
useAzureMonitor(options);
Задайте имя облачной роли и экземпляр облачной роли с помощью атрибутов ресурсов . Имя облачной роли использует атрибуты service.namespace
и service.name
, хотя и возвращается к service.name
, если service.namespace
не задано. Экземпляр облачной роли использует значение атрибута service.instance.id
. Сведения о стандартных атрибутах ресурсов см. в разделе "Семантические соглашения OpenTelemetry".
Задайте атрибуты ресурса с помощью OTEL_RESOURCE_ATTRIBUTES
переменных среды и /или OTEL_SERVICE_NAME
среды. OTEL_RESOURCE_ATTRIBUTES
принимает ряд пар "ключ-значение", разделенных запятыми. Например, чтобы задать имя my-namespace.my-helloworld-service
облачной роли и задать для my-instance
экземпляра облачной роли значение, можно задать OTEL_RESOURCE_ATTRIBUTES
и OTEL_SERVICE_NAME
так:
export OTEL_RESOURCE_ATTRIBUTES="service.namespace=my-namespace,service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Если атрибут resource не задан, можно также задать имя облачной service.namespace
роли только с переменной среды OTEL_SERVICE_NAME или атрибутом service.name
Resource. Например, чтобы задать имя my-helloworld-service
облачной роли и задать для my-instance
экземпляра облачной роли значение, можно задать OTEL_RESOURCE_ATTRIBUTES
и OTEL_SERVICE_NAME
так:
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Включение выборки
Вы можете включить выборку, чтобы уменьшить объем приема данных, что снижает затраты. Azure Monitor предоставляет настраиваемый выборщик фиксированной частоты , заполняющий события коэффициентом выборки, в который Application Insights преобразуется ItemCount
. Выборщик фиксированной частоты обеспечивает точные возможности и количество событий. Пример предназначен для сохранения трассировок между службами и взаимодействия с более старыми пакетами средств разработки программного обеспечения Application Insights (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(options =>
{
// Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
options.SamplingRatio = 0.1F;
});
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Выборщик ожидает частоту выборки от 0 до 1 включительно. Скорость 0,1 означает, что отправляется примерно 10% ваших трассировок.
// Create a new OpenTelemetry tracer provider.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
// Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
options.SamplingRatio = 0.1F;
})
.Build();
Начиная с версии 3.4.0 доступна ограниченная скорость выборки и теперь используется по умолчанию. Дополнительные сведения о выборке см. в статье "Выборка Java".
Для собственных приложений Spring Boot применимы конфигурации выборки пакета SDK для Java OpenTelemetry.
Для собственных приложений Quarkus ознакомьтесь с документацией по Quarkus OpenTelemetry.
Выборщик ожидает частоту выборки от 0 до 1 включительно. Скорость 0,1 означает, что отправляется примерно 10% ваших трассировок.
// Import the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions class from the @azure/monitor-opentelemetry package.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
// Create a new AzureMonitorOpenTelemetryOptions object and set the samplingRatio property to 0.1.
const options: AzureMonitorOpenTelemetryOptions = {
samplingRatio: 0.1
};
// Enable Azure Monitor integration using the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions object.
useAzureMonitor(options);
Функция configure_azure_monitor()
автоматически использует ApplicationInsightsSampler для совместимости с пакетами SDK Application Insights и примерами данных телеметрии. Переменная OTEL_TRACES_SAMPLER_ARG
среды может использоваться для указания частоты выборки с допустимым диапазоном от 0 до 1, где 0 — 0% и 1 — 100 %.
Например, значение 0,1 означает, что 10 % трассировки отправляются.
export OTEL_TRACES_SAMPLER_ARG=0.1
Совет
При использовании фиксированной скорости и процентной выборки, и вы не уверены, что задать частоту выборки как, начните с 5%. (коэффициент выборки 0,05) Настройте частоту на основе точности операций, отображаемых в панелях ошибок и производительности. Более высокая скорость обычно приводит к повышению точности. Однако любая выборка влияет на точность, поэтому мы рекомендуем оповещать о метриках OpenTelemetry, которые не зависят от выборки.
Динамические метрики
Динамические метрики предоставляют панель мониторинга аналитики в режиме реального времени для анализа активности приложений и производительности.
По умолчанию эта функция включена.
Пользователи могут отключить динамические метрики при настройке дистрибутива.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
// Disable the Live Metrics feature.
options.EnableLiveMetrics = false;
});
Эта функция недоступна в azure Monitor .NET Exporter.
Примечание.
Мы рекомендуем экспортера OpenTelemetry Azure Monitor для консольных и рабочих служб, которые не включают динамические метрики.
Динамические метрики недоступны сегодня для собственных приложений GraalVM.
Пользователи могут включить или отключить динамические метрики при настройке дистрибутива enableLiveMetrics
с помощью свойства.
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString:
process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "<your connection string>",
},
enableLiveMetrics: false
};
useAzureMonitor(options);
Вы можете включить динамические метрики с помощью дистрибутива OpenTelemetry в Azure Monitor для Python следующим образом:
...
configure_azure_monitor(
enable_live_metrics=True
)
...
Возможно, потребуется включить проверку подлинности Microsoft Entra для более безопасного подключения к Azure, что предотвращает прием неавторизованных данных телеметрии в подписку.
Дополнительные сведения см. на нашей выделенной странице проверки подлинности Microsoft Entra, связанной с каждым поддерживаемым языком.
Проверка подлинности идентификатора Microsoft Entra недоступна для приложений GraalVM Native.
Автономное хранилище и автоматические повторные попытки
Чтобы повысить надежность и устойчивость, предложения на основе OpenTelemetry в Azure Monitor записываются в автономное или локальное хранилище по умолчанию, когда приложение теряет подключение к Application Insights. Она сохраняет данные телеметрии приложения на диск и периодически пытается отправить его еще раз в течение 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
По умолчанию AzureMonitorExporter использует одно из следующих расположений для автономного хранилища (указано в порядке приоритета):
- Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
- Не в Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Чтобы переопределить каталог по умолчанию, необходимо задать.AzureMonitorExporterOptions.StorageDirectory
// Create a new OpenTelemetry tracer provider and set the storage directory.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any trace data that cannot be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new OpenTelemetry meter provider and set the storage directory.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any metric data that cannot be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the storage directory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any log data that cannot be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
});
});
Чтобы отключить эту функцию, следует задать.AzureMonitorExporterOptions.DisableOfflineStorage = true
Настройка автономного хранилища и автоматической повторных попыток недоступна в Java.
Полный список доступных конфигураций см. в разделе "Параметры конфигурации".
Настройка автономного хранилища и автоматического повтора недоступна в собственных приложениях образов Java.
По умолчанию AzureMonitorExporter использует одно из следующих расположений для автономного хранилища.
- Windows
- %TEMP%\Microsoft\AzureMonitor
- Не в Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
Чтобы переопределить каталог по умолчанию, необходимо задать.storageDirectory
Например:
// Import the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions class from the @azure/monitor-opentelemetry package.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
// Create a new AzureMonitorOpenTelemetryOptions object and set the azureMonitorExporterOptions property to an object with the following properties:
//
// * connectionString: The connection string for your Azure Monitor Application Insights resource.
// * storageDirectory: The directory where the Azure Monitor OpenTelemetry exporter will store telemetry data when it is offline.
// * disableOfflineStorage: A boolean value that specifies whether to disable offline storage.
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString: "<Your Connection String>",
storageDirectory: "C:\\SomeDirectory",
disableOfflineStorage: false
}
};
// Enable Azure Monitor integration using the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions object.
useAzureMonitor(options);
Чтобы отключить эту функцию, следует задать.disableOfflineStorage = true
По умолчанию экспортеры Azure Monitor используют следующий путь:
<tempfile.gettempdir()>/Microsoft/AzureMonitor/opentelemetry-python-<your-instrumentation-key>
Чтобы переопределить каталог по умолчанию, необходимо задать storage_directory
нужный каталог.
Например:
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and storage directory.
# Replace `your-connection-string` with the connection string to your Azure Monitor Application Insights resource.
# Replace `C:\\SomeDirectory` with the directory where you want to store the telemetry data before it is sent to Azure Monitor.
configure_azure_monitor(
connection_string="your-connection-string",
storage_directory="C:\\SomeDirectory",
)
...
Чтобы отключить эту функцию, необходимо задать значение disable_offline_storage
True
. По умолчанию — False
.
Например:
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and disable offline storage.
# Replace `your-connection-string` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="your-connection-string",
disable_offline_storage=True,
)
...
Включение средства экспорта OTLP
Возможно, вы хотите включить экспортер OpenTelemetry Protocol (OTLP) вместе с экспортером Azure Monitor, чтобы отправить данные телеметрии в два расположения.
Примечание.
Средство экспорта OTLP отображается только для удобства. Корпорация Майкрософт официально не поддерживает средство экспорта OTLP, а также все подчиненные компоненты и сторонние средства.
Установите пакет OpenTelemetry.Exporter.OpenTelemetryProtocol в проекте.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Добавьте приведенный ниже фрагмент кода. В этом примере предполагается, что у вас есть сборщик 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.Exporter.OpenTelemetryProtocol в проекте.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Добавьте приведенный ниже фрагмент кода. В этом примере предполагается, что у вас есть сборщик OpenTelemetry с работающим приемником OTLP. Дополнительные сведения см. в примере на GitHub.
// Create a new OpenTelemetry tracer provider and add the Azure Monitor trace exporter and the OTLP trace exporter.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter()
.AddOtlpExporter()
.Build();
// Create a new OpenTelemetry meter provider and add the Azure Monitor metric exporter and the OTLP metric exporter.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter()
.AddOtlpExporter()
.Build();
Вы не можете включить экспортер OpenTelemetry Protocol (OTLP) вместе с экспортером Azure Monitor для отправки данных телеметрии в два расположения.
Установите экспортер трассировки трассировки сборщика OpenTelemetry и другие пакеты OpenTelemetry в проекте.
npm install @opentelemetry/api
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/sdk-trace-base
npm install @opentelemetry/sdk-trace-node
Добавьте приведенный ниже фрагмент кода. В этом примере предполагается, что у вас есть сборщик OpenTelemetry с работающим приемником OTLP. Дополнительные сведения см. в примере на GitHub.
// Import the useAzureMonitor function, the AzureMonitorOpenTelemetryOptions class, the trace module, the ProxyTracerProvider class, the BatchSpanProcessor class, the NodeTracerProvider class, and the OTLPTraceExporter class from the @azure/monitor-opentelemetry, @opentelemetry/api, @opentelemetry/sdk-trace-base, @opentelemetry/sdk-trace-node, and @opentelemetry/exporter-trace-otlp-http packages, respectively.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
// Create a new OTLPTraceExporter object.
const otlpExporter = new OTLPTraceExporter();
// Enable Azure Monitor integration.
const options: AzureMonitorOpenTelemetryOptions = {
// Add the SpanEnrichingProcessor
spanProcessors: [new BatchSpanProcessor(otlpExporter)]
}
useAzureMonitor(options);
Установите пакет opentelemetry-exporter-otlp.
Добавьте приведенный ниже фрагмент кода. В этом примере предполагается, что у вас есть сборщик OpenTelemetry с работающим приемником OTLP. Дополнительные сведения см. в файле сведений.
# Import the `configure_azure_monitor()`, `trace`, `OTLPSpanExporter`, and `BatchSpanProcessor` classes from the appropriate packages.
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<your-connection-string>` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<your-connection-string>",
)
# Get the tracer for the current module.
tracer = trace.get_tracer(__name__)
# Create an OTLP span exporter that sends spans to the specified endpoint.
# Replace `http://localhost:4317` with the endpoint of your OTLP collector.
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317")
# Create a batch span processor that uses the OTLP span exporter.
span_processor = BatchSpanProcessor(otlp_exporter)
# Add the batch span processor to the tracer provider.
trace.get_tracer_provider().add_span_processor(span_processor)
# Start a new span with the name "test".
with tracer.start_as_current_span("test"):
print("Hello world!")
Конфигурации OpenTelemetry
Следующие конфигурации OpenTelemetry можно получить через переменные среды при использовании дистрибутивов OpenTelemetry в Azure Monitor.
Переменная среды |
Description |
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 то имеет приоритет. |
Переменная среды |
Description |
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 то имеет приоритет. |
Переменная среды |
Description |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Задайте для ресурса Application Insights строка подключения. |
Для собственных приложений Spring Boot доступны конфигурации пакета SDK для Java OpenTelemetry.
Для собственных приложений Quarkus ознакомьтесь с документацией по Quarkus OpenTelemetry.
Дополнительные сведения о конфигурации пакета SDK Для OpenTelemetry см. в документации по OpenTelemetry.
Дополнительные сведения о конфигурации пакета SDK Для OpenTelemetry см. в документации по OpenTelemetry и использовании дистрибутива Azure Monitor.
Строки запроса URL-адреса Redact
Чтобы изменить строки запроса URL-адреса, отключите коллекцию строк запроса. Этот параметр рекомендуется использовать при вызове хранилища Azure с помощью маркера SAS.
При использовании пакета дистрибутива Azure.Monitor.OpenTelemetry.AspNetCore включены библиотеки инструментирования ASP.NET Core и HttpClient.
По умолчанию пакет дистрибутива задает redaction строки запроса.
Чтобы изменить это поведение, необходимо задать для переменной среды значение true
или false
.
- ASP.NET основное инструментирование.
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION
По умолчанию параметр "Редактация строки запроса" отключен. Чтобы включить, задайте для этой переменной среды значение false
.
- Инструментирование клиента Http.
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION
По умолчанию параметр "Редактация строки запроса" отключен. Чтобы включить, задайте для этой переменной среды значение false
.
При использовании Azure.Monitor.OpenTelemetry.Exporter необходимо вручную включить библиотеки ASP.NET Core или HttpClient Instrumentation в конфигурацию OpenTelemetry.
Эти библиотеки инструментирования включают Redaction QueryString по умолчанию.
Чтобы изменить это поведение, необходимо задать для переменной среды значение true
или false
.
- ASP.NET основное инструментирование.
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION
По умолчанию включена редактация строки запроса. Чтобы отключить эту переменную среды, задайте для true
нее значение .
- Инструментирование клиента Http:
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION
по умолчанию включена редактация строки запроса. Чтобы отключить эту переменную среды, задайте для true
нее значение .
Добавьте следующее applicationinsights.json
в файл конфигурации:
{
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.query",
"pattern": "^.*$",
"replace": "REDACTED",
"action": "mask"
}
]
},
{
"type": "attribute",
"actions": [
{
"key": "url.full",
"pattern": "[?].*$",
"replace": "?REDACTED",
"action": "mask"
}
]
}
]
}
}
Мы активно работаем в сообществе OpenTelemetry для поддержки редакта.
При использовании пакета дистрибутива OpenTelemetry в Azure Monitor строки запроса можно изменить путем создания и применения процессора диапазона к конфигурации дистрибутива.
import { useAzureMonitor, AzureMonitorOpenTelemetryOptions } from "@azure/monitor-opentelemetry";
import { Context } from "@opentelemetry/api";
import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
import { SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL } from "@opentelemetry/semantic-conventions";
class RedactQueryStringProcessor implements SpanProcessor {
forceFlush(): Promise<void> {
return Promise.resolve();
}
onStart(span: Span, parentContext: Context): void {
return;
}
shutdown(): Promise<void> {
return Promise.resolve();
}
onEnd(span: ReadableSpan) {
const httpRouteIndex: number = String(span.attributes[SEMATTRS_HTTP_ROUTE]).indexOf('?');
const httpUrlIndex: number = String(span.attributes[SEMATTRS_HTTP_URL]).indexOf('?');
const httpTargetIndex: number = String(span.attributes[SEMATTRS_HTTP_TARGET]).indexOf('?');
if (httpRouteIndex !== -1) {
span.attributes[SEMATTRS_HTTP_ROUTE] = String(span.attributes[SEMATTRS_HTTP_ROUTE]).substring(0, httpRouteIndex);
}
if (httpUrlIndex !== -1) {
span.attributes[SEMATTRS_HTTP_URL] = String(span.attributes[SEMATTRS_HTTP_URL]).substring(0, httpUrlIndex);
}
if (httpTargetIndex !== -1) {
span.attributes[SEMATTRS_HTTP_TARGET] = String(span.attributes[SEMATTRS_HTTP_TARGET]).substring(0, httpTargetIndex);
}
}
}
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString: <YOUR_CONNECTION_STRING>,
},
spanProcessors: [new RedactQueryStringProcessor()]
};
useAzureMonitor(options);
Мы активно работаем в сообществе OpenTelemetry для поддержки редакта.