Este guia explica como configurar o OpenTelemetry (OTel) no Azure Monitor Application Insights usando a distro OpenTelemetry do Azure Monitor. A configuração adequada garante a coleta consistente de dados de telemetria em aplicativos .NET, Java, Node.jse Python, permitindo monitoramento e diagnóstico mais confiáveis.
String de conexão
Uma cadeia de conexão no Application Insights define o local de destino para o envio de dados de telemetria.
Use uma das três maneiras a seguir para configurar a cadeia de conexão:
Adiciona UseAzureMonitor() ao teu program.cs ficheiro.
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();
Defina uma variável de ambiente.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Adicione a seção a seguir ao seu appsettings.json arquivo de configuração.
{
"AzureMonitor": {
"ConnectionString": "<YOUR-CONNECTION-STRING>"
}
}
Nota
Se você definir a cadeia de conexão em mais de um lugar, respeitaremos a seguinte precedência:
- Código
- Variável de Ambiente
- Arquivo de configuração
Use uma das duas maneiras a seguir para configurar a cadeia de conexão:
Adicione o Exportador do Azure Monitor a cada sinal OpenTelemetry na inicialização do aplicativo.
// 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>";
});
});
});
Defina uma variável de ambiente.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Nota
Se você definir a cadeia de conexão em mais de um lugar, respeitaremos a seguinte precedência:
- Código
- Variável de Ambiente
Use uma das duas maneiras a seguir para configurar a cadeia de conexão:
Defina uma variável de ambiente.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Defina uma propriedade.
applicationinsights.connection.string=<YOUR-CONNECTION-STRING>
Use uma das duas maneiras a seguir para configurar a cadeia de conexão:
Defina uma variável de ambiente.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Use um objeto de configuração.
export class BasicConnectionSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized");
}
}
Use uma das duas maneiras a seguir para configurar a cadeia de conexão:
Defina uma variável de ambiente.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Use a configure_azure_monitor função.
# 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>",
)
Defina o Nome da Função na Nuvem e a Instância da Função na Nuvem
Para idiomas suportados, a Distro OpenTelemetry do Azure Monitor deteta automaticamente o contexto do recurso e fornece valores padrão para as propriedades Nome da Função de Nuvem e Instância de Função de Nuvem do seu componente. No entanto, talvez você queira substituir os valores padrão por algo que faça sentido para sua equipe. O valor do nome da função na nuvem aparece no Mapa de Aplicação como o nome abaixo de um nó.
Defina o Nome da Função de Nuvem e a Instância de Função de Nuvem por meio dos atributos de Recurso . O Nome da Função de Nuvem usa os atributos service.namespace e service.name, embora reverta para service.name se service.namespace não estiver definido. A Instância de Função de Nuvem usa o valor do atributo service.instance.id. Para obter informações sobre atributos padrão para recursos, consulte Convenções semânticas 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();
Defina o Nome da Função de Nuvem e a Instância de Função de Nuvem por meio dos atributos de Recurso . O Nome da Função de Nuvem usa os atributos service.namespace e service.name, embora reverta para service.name se service.namespace não estiver definido. A Instância de Função de Nuvem usa o valor do atributo service.instance.id. Para obter informações sobre atributos padrão para recursos, consulte Convenções semânticas 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();
});
});
Para definir o nome da função de nuvem, consulte Nome da função de nuvem.
Para definir a instância de função de nuvem, consulte Instância de função de nuvem.
Para definir o nome da função de nuvem:
- Use o
spring.application.name para aplicações de imagem nativas do Spring Boot.
- Use o
quarkus.application.name para aplicações de imagens nativas do Quarkus.
Defina o Nome da Função de Nuvem e a Instância de Função de Nuvem por meio dos atributos de Recurso . O Nome da Função de Nuvem usa os atributos service.namespace e service.name, embora reverta para service.name se service.namespace não estiver definido. A Instância de Função de Nuvem usa o valor do atributo service.instance.id. Para obter informações sobre atributos padrão para recursos, consulte Convenções semânticas OpenTelemetry .
export class CloudRoleSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { resourceFromAttributes } = await import("@opentelemetry/resources");
const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
const { ATTR_SERVICE_NAMESPACE, ATTR_SERVICE_INSTANCE_ID } =
await import("@opentelemetry/semantic-conventions/incubating");
const customResource = resourceFromAttributes({
[ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME || "my-service",
[ATTR_SERVICE_NAMESPACE]: process.env.OTEL_SERVICE_NAMESPACE || "my-namespace",
[ATTR_SERVICE_INSTANCE_ID]: process.env.OTEL_SERVICE_INSTANCE_ID || "my-instance",
});
const options = {
resource: customResource,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (custom resource)");
}
}
Defina o Nome da Função de Nuvem e a Instância de Função de Nuvem por meio dos atributos de Recurso . O Nome da Função de Nuvem usa os atributos service.namespace e service.name, embora reverta para service.name se service.namespace não estiver definido. A Instância de Função de Nuvem usa o valor do atributo service.instance.id. Para obter informações sobre atributos padrão para recursos, consulte Convenções semânticas OpenTelemetry .
Defina atributos de recurso usando as variáveis de ambiente OTEL_RESOURCE_ATTRIBUTES e/ou OTEL_SERVICE_NAME.
OTEL_RESOURCE_ATTRIBUTES usa uma série de pares chave-valor separados por vírgula. Por exemplo, para definir o Nome da Função de Nuvem como my-namespace.my-helloworld-service e a Instância de Função de Nuvem como my-instance, você pode definir OTEL_RESOURCE_ATTRIBUTES e OTEL_SERVICE_NAME , como tal:
export OTEL_RESOURCE_ATTRIBUTES="service.namespace=my-namespace,service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Se você não definir o service.namespace atributo Resource, poderá alternativamente definir o Nome da Função de Nuvem apenas com a variável de ambiente OTEL_SERVICE_NAME ou o service.name atributo Resource. Por exemplo, para definir o Nome da Função de Nuvem como my-helloworld-service e a Instância de Função de Nuvem como my-instance, você pode definir OTEL_RESOURCE_ATTRIBUTES e OTEL_SERVICE_NAME , como tal:
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Ativar amostragem
A amostragem reduz o volume e o custo da ingestão de telemetria. A distribuição OpenTelemetry do Azure Monitor suporta duas estratégias de amostragem para rastreios e (opcionalmente) permite alinhar os logs da aplicação com as suas decisões de amostragem de rastreios. O sampler associa a razão ou taxa de amostragem selecionada aos intervalos exportados para que o Application Insights possa ajustar as contagens de experiência com precisão. Para uma visão conceptual, veja Saiba mais sobre amostragem.
Importante
- As decisões de amostragem aplicam-se a trilhos (intervalos).
-
As métricas nunca são amostradas.
-
Os registos não são processados por padrão. Pode optar por amostragem baseada em rastreios para logs para que os logs que pertencem a rastreios não amostrados sejam eliminados. Para mais detalhes, Configure amostragem baseada em traços para registos.
Nota
Se está a observar custos inesperados ou elevados no Application Insights, as causas comuns incluem elevado volume de telemetria, picos de ingestão de dados e amostragem mal configurada. Para iniciar a resolução de problemas, consulte Solucionar a alta ingestão de dados em Application Insights.
Use variáveis padrão do ambiente OpenTelemetry para selecionar o sampler e fornecer o seu argumento:
Os exemplos seguintes mostram como configurar a amostragem usando variáveis de ambiente.
Amostragem com percentagem fixa (~10%)
export OTEL_TRACES_SAMPLER="microsoft.fixed.percentage"
export OTEL_TRACES_SAMPLER_ARG=0.1
Amostragem limitada por taxa (~1,5 rastros/segundo)
export OTEL_TRACES_SAMPLER="microsoft.rate_limited"
export OTEL_TRACES_SAMPLER_ARG=1.5
Nota
Quando tanto as opções ao nível do código como as variáveis de ambiente são configuradas, as variáveis de ambiente têm prioridade. O comportamento predefinido dos samplers pode variar consoante o idioma, consulte as seguintes abas.
Amostragem percentual fixa
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.SamplingRatio = 0.1F; // ~10%
});
var app = builder.Build();
app.Run();
Amostragem limitada à taxa
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.TracesPerSecond = 1.5; // ~1.5 traces/sec
});
var app = builder.Build();
app.Run();
Nota
Se não definires um sampler no código ou através de variáveis de ambiente, o Azure Monitor usa o ApplicationInsightsSampler por defeito.
Amostragem percentual fixa
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.SamplingRatio = 0.1F)
.Build();
Amostragem limitada à taxa
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.TracesPerSecond = 1.5F)
.Build();
Nota
Se não definires um sampler no código ou através de variáveis de ambiente, o Azure Monitor usa o ApplicationInsightsSampler por defeito.
A partir da 3.4.0, a amostragem limitada por taxa é o padrão. Para opções de configuração e exemplos, veja amostragem em Java.
Amostragem percentual fixa
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
samplingRatio: 0.1, // ~10%
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Amostragem limitada à taxa
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
tracesPerSecond: 1.5, // ~1.5 traces/sec
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Nota
Se não definires um sampler no código ou através de variáveis de ambiente, o Azure Monitor usa o ApplicationInsightsSampler por defeito.
Amostragem percentual fixa
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
sampling_ratio=0.1, # 0.1 = 10% of traces sampled
)
Amostragem limitada à taxa
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
traces_per_second=1.5, # ~1.5 traces/sec
)
Nota
Se não definires nenhuma variável de ambiente ou não forneceres sampling_ratio ou traces_per_second, configure_azure_monitor() usa ApplicationInsightsSampler por defeito.
Gorjeta
Ao usar amostragem com percentagem fixa e não tiver a certeza do que definir a taxa de amostragem, comece em 5% (0.05). Ajuste a taxa com base na precisão das operações apresentadas nos painéis de falhas e desempenho. Qualquer amostragem reduz a precisão, por isso recomendamos alertar nas métricas OpenTelemetry, que não são afetadas pela amostragem.
Quando ativado, os registos que pertencem a traços não amostrados são eliminados para que os seus registos permaneçam alinhados com a amostragem de registos.
- Um registo de log é considerado parte de um rastreio quando tem um
SpanId válido.
- Se os
TraceFlags traços associados indicarem que não foi amostrado, o registo logarítmico é eliminado.
- Registos de registo sem qualquer contexto de rasto não são afetados.
- A funcionalidade está desativada por defeito. A capacitação está no idioma, veja os separadores seguintes.
Use a seguinte definição na sua configuração para que permita a amostragem de logs baseados em traços:
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.EnableTraceBasedLogsSampler = true;
});
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.EnableTraceBasedLogsSampler = true)
.Build();
Para aplicações Java, a amostragem baseada em traços está ativada por defeito.
Para aplicações nativas Spring Boot e Quarkus, a amostragem baseada em traços está ativada por padrão.
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
enableTraceBasedSamplingForLogs: true,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
enable_trace_based_sampling_for_logs=True,
)
Métricas em tempo real
As métricas em tempo real fornecem um painel de análise em tempo real para obter informações sobre a atividade e o desempenho do aplicativo.
Esta caraterística está ativada por predefinição.
Os usuários podem desativar o Live Metrics ao configurar a Distro.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
// Disable the Live Metrics feature.
options.EnableLiveMetrics = false;
});
Esse recurso não está disponível no Azure Monitor .NET Exporter.
As métricas em tempo real não estão disponíveis atualmente para aplicativos nativos do GraalVM.
Os usuários podem ativar/desabilitar o Live Metrics ao configurar a Distro usando a enableLiveMetrics propriedade.
export class LiveMetricsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
enableLiveMetrics: true, // set to false to disable
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (live metrics enabled)");
}
}
Você pode habilitar métricas ao vivo usando o monitor do Azure OpenTelemetry Distro for Python da seguinte maneira:
...
configure_azure_monitor(
enable_live_metrics=True
)
...
Talvez você queira habilitar a autenticação do Microsoft Entra para uma conexão mais segura com o Azure, o que impede que a telemetria não autorizada seja ingerida em sua assinatura.
Para obter mais informações, consulte nossa página dedicada de autenticação do Microsoft Entra vinculada para cada idioma suportado.
A autenticação de ID do Microsoft Entra não está disponível para aplicativos nativos GraalVM.
Armazenamento offline e novas tentativas automáticas
As ofertas baseadas em OpenTelemetry do Azure Monitor fazem cache de telemetria quando uma aplicação se desconecta do Application Insights e tenta reenviar por até 48 horas. Para obter recomendações de tratamento de dados, consulte Exportar e excluir dados privados. Aplicativos de alta carga ocasionalmente descartam a telemetria por dois motivos: exceder o tempo permitido ou exceder o tamanho máximo do arquivo. Quando necessário, o produto prioriza eventos recentes em detrimento de antigos.
O pacote Distro inclui o AzureMonitorExporter, que por padrão usa um dos seguintes locais para armazenamento offline (listados em ordem de precedência):
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
não Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Para substituir o diretório padrão, você deve definir 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();
Para desativar esse recurso, você deve definir AzureMonitorOptions.DisableOfflineStorage = true.
Por padrão, o AzureMonitorExporter usa um dos seguintes locais para armazenamento offline (listado em ordem de precedência):
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
Não Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Para substituir o diretório padrão, você deve definir 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 can't 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 can't 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 can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
});
});
Para desativar esse recurso, você deve definir AzureMonitorExporterOptions.DisableOfflineStorage = true.
Quando o agente não pode enviar telemetria para o Azure Monitor, ele armazena arquivos de telemetria no disco. Os ficheiros são guardados numa telemetry pasta sob o diretório especificado pela propriedade do sistema java.io.tmpdir. Cada nome de ficheiro começa com um carimbo de data/hora e termina com a extensão .trn. Esse mecanismo de armazenamento offline ajuda a garantir que a telemetria seja mantida durante interrupções temporárias da rede ou falhas de ingestão.
O agente armazena até 50 MB de dados de telemetria por padrão e permite a configuração do limite de armazenamento. As tentativas de enviar telemetria armazenada são feitas periodicamente. Os arquivos de telemetria com mais de 48 horas são excluídos e os eventos mais antigos são descartados quando o limite de armazenamento é atingido.
Para obter uma lista completa das configurações disponíveis, consulte Opções de configuração.
Quando o agente não pode enviar telemetria para o Azure Monitor, ele armazena arquivos de telemetria no disco. Os ficheiros são guardados numa telemetry pasta sob o diretório especificado pela propriedade do sistema java.io.tmpdir. Cada nome de ficheiro começa com um carimbo de data/hora e termina com a extensão .trn. Esse mecanismo de armazenamento offline ajuda a garantir que a telemetria seja mantida durante interrupções temporárias da rede ou falhas de ingestão.
O agente armazena até 50 MB de dados de telemetria por padrão. As tentativas de enviar telemetria armazenada são feitas periodicamente. Os arquivos de telemetria com mais de 48 horas são excluídos e os eventos mais antigos são descartados quando o limite de armazenamento é atingido.
Por padrão, o AzureMonitorExporter usa um dos seguintes locais para armazenamento offline.
Windows
- %TEMP%\Microsoft\AzureMonitor
Não Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
Para substituir o diretório padrão, você deve definir storageDirectory.
Por exemplo:
export class OfflineStorageSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
storageDirectory: "C:\\\\SomeDirectory",
disableOfflineStorage: false, // set to true to disable
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (offline storage configured)");
}
}
Para desativar esse recurso, você deve definir disableOfflineStorage = true.
Por padrão, os exportadores do Azure Monitor usam o seguinte caminho:
<tempfile.gettempdir()>/Microsoft/AzureMonitor/opentelemetry-python-<your-instrumentation-key>
Para substituir o diretório padrão, você deve definir storage_directory para o diretório desejado.
Por exemplo:
...
# 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",
)
...
Para desativar esse recurso, você deve definir disable_offline_storage como True. O padrão é False.
Por exemplo:
...
# 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,
)
...
Habilitar o Exportador OTLP
Talvez você queira habilitar o Exportador de Protocolo de Telemetria Aberta (OTLP) junto com o Exportador do Azure Monitor para enviar sua telemetria para dois locais.
Nota
O Exportador OTLP é mostrado apenas por conveniência. Não suportamos oficialmente o Exportador OTLP ou quaisquer componentes ou experiências de terceiros relacionados a ele.
Instale o pacote OpenTelemetry.Exporter.OpenTelemetryProtocol em seu projeto.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Adicione o seguinte trecho de código. Este exemplo pressupõe que você tenha um OpenTelemetry Collector com um recetor OTLP em execução. Para obter detalhes, consulte o exemplo no 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();
Instale o pacote OpenTelemetry.Exporter.OpenTelemetryProtocol em seu projeto.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Adicione o seguinte trecho de código. Este exemplo pressupõe que você tenha um OpenTelemetry Collector com um recetor OTLP em execução. Para obter detalhes, consulte o exemplo no 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();
Não é possível habilitar o Exportador de Protocolo de Telemetria Aberta (OTLP) junto com o Exportador do Azure Monitor para enviar sua telemetria para dois locais.
Instale o OpenTelemetry Collector Trace Exporter e outros pacotes OpenTelemetry em seu projeto.
npm install @opentelemetry/api
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/sdk-trace-base
npm install @opentelemetry/sdk-trace-node
Adicione o seguinte trecho de código. Este exemplo pressupõe que você tenha um OpenTelemetry Collector com um recetor OTLP em execução. Para obter detalhes, consulte o exemplo no GitHub.
export class OtlpExporterSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-http");
// Create an OTLP trace exporter (set 'url' if your collector isn't on the default endpoint).
const otlpExporter = new OTLPTraceExporter({
// url: "http://localhost:4318/v1/traces",
});
// Configure Azure Monitor and add the OTLP exporter as an additional span processor.
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new BatchSpanProcessor(otlpExporter)],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (OTLP exporter added)");
}
}
Instale o pacote opentelemetry-exporter-otlp.
Adicione o seguinte trecho de código. Este exemplo pressupõe que você tenha um OpenTelemetry Collector com um recetor OTLP em execução. Para obter detalhes, consulte este LEIA-ME.
# 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!")
Configurações OpenTelemetry
As seguintes configurações do OpenTelemetry podem ser acessadas por meio de variáveis de ambiente ao usar as Distros OpenTelemetry do Azure Monitor.
| Variável de ambiente |
Descrição |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Defina-o como a cadeia de conexão do recurso Application Insights. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Defina-o como true para desativar a coleta de métricas internas. |
OTEL_RESOURCE_ATTRIBUTES |
Pares chave-valor a serem usados como atributos de recurso. Para obter mais informações sobre atributos de recursos, consulte a especificação do SDK de recursos. |
OTEL_SERVICE_NAME |
Define o valor do atributo de recurso service.name. Se service.name também for fornecido em OTEL_RESOURCE_ATTRIBUTES, então OTEL_SERVICE_NAME tem precedência. |
| Variável de ambiente |
Descrição |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Defina-o como a cadeia de conexão do recurso Application Insights. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Defina-o como true para desativar a coleta de métricas internas. |
OTEL_RESOURCE_ATTRIBUTES |
Pares chave-valor a serem usados como atributos de recurso. Para obter mais informações sobre atributos de recursos, consulte a especificação do SDK de recursos. |
OTEL_SERVICE_NAME |
Define o valor do atributo de recurso service.name. Se service.name também for fornecido em OTEL_RESOURCE_ATTRIBUTES, então OTEL_SERVICE_NAME tem precedência. |
Para obter mais informações sobre Java, consulte a documentação suplementar do Java.
| Variável de ambiente |
Descrição |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Defina-o como a cadeia de conexão do recurso Application Insights. |
Para aplicativos nativos do Spring Boot, as configurações do OpenTelemetry Java SDK estão disponíveis.
Para aplicações nativas do Quarkus, consulte a documentação do Quarkus OpenTelemetry.
Para obter mais informações sobre a configuração do OpenTelemetry SDK, consulte a documentação do OpenTelemetry .
Para obter mais informações sobre a configuração do OpenTelemetry SDK, consulte a documentação do OpenTelemetry e o Azure monitor Distro Usage.
Editar Cadeias de Consulta de URLs
Para redigir cadeias de caracteres de consulta de URL, desative a coleção de cadeias de caracteres de consulta. Recomendamos essa configuração se você chamar o armazenamento do Azure usando um token SAS.
Quando você estiver usando o pacote de distribuição Azure.Monitor.OpenTelemetry.AspNetCore , as bibliotecas de instrumentação ASP.NET Core e HttpClient estão incluídas.
O nosso pacote de distribuição desativa a Redação de Cadeia de Consulta por padrão.
Para alterar esse comportamento, deve-se definir uma variável de ambiente como true ou false.
ASP.NET Instrumentação principal: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION a Redação da Cadeia de Caracteres de Consulta está desativada por padrão. Para habilitar, defina essa variável de ambiente como false.
Instrumentação de Cliente HTTP: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION A Edição de Cadeia de Caracteres de Consulta está desativada por padrão. Para habilitar, defina essa variável de ambiente como false.
Ao usar o Azure.Monitor.OpenTelemetry.Exporter, deve-se incluir manualmente as bibliotecas de instrumentação ASP.NET Core ou HttpClient na sua configuração do OpenTelemetry.
Essas bibliotecas de instrumentação têm QueryString Redaction habilitado por padrão.
Para alterar esse comportamento, deve-se definir uma variável de ambiente como true ou false.
ASP.NET Instrumentação principal: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION a Redação de Cadeia de Caracteres de Consulta está habilitada por padrão. Para desativar, defina esta variável de ambiente como true.
Instrumentação de Cliente HTTP: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION A Edição de Cadeia de Caracteres de Consulta está habilitada por padrão. Para desativar, defina esta variável de ambiente como true.
Adicione o seguinte ao arquivo de applicationinsights.json configuração:
{
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.query",
"pattern": "^.*$",
"replace": "REDACTED",
"action": "mask"
}
]
},
{
"type": "attribute",
"actions": [
{
"key": "url.full",
"pattern": "[?].*$",
"replace": "?REDACTED",
"action": "mask"
}
]
}
]
}
}
Estamos trabalhando ativamente na comunidade OpenTelemetry para dar suporte à redação.
Quando você estiver usando o pacote de distribuição OpenTelemetry do Azure Monitor, as cadeias de caracteres de consulta podem ser editadas por meio da criação e aplicação de um processador span à configuração da distro.
export class RedactQueryStringsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL } =
await import("@opentelemetry/semantic-conventions");
class RedactQueryStringProcessor {
forceFlush() { return Promise.resolve(); }
onStart() {}
shutdown() { return Promise.resolve(); }
onEnd(span: any) {
const route = String(span.attributes[SEMATTRS_HTTP_ROUTE] ?? "");
const url = String(span.attributes[SEMATTRS_HTTP_URL] ?? "");
const target = String(span.attributes[SEMATTRS_HTTP_TARGET] ?? "");
const strip = (s: string) => {
const i = s.indexOf("?");
return i === -1 ? s : s.substring(0, i);
};
if (route) span.attributes[SEMATTRS_HTTP_ROUTE] = strip(route);
if (url) span.attributes[SEMATTRS_HTTP_URL] = strip(url);
if (target) span.attributes[SEMATTRS_HTTP_TARGET] = strip(target);
}
}
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new RedactQueryStringProcessor()],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (query strings redacted)");
}
}
Estamos trabalhando ativamente na comunidade OpenTelemetry para dar suporte à redação.
Intervalo de exportação de métricas
Você pode configurar o intervalo de exportação de métrica usando a OTEL_METRIC_EXPORT_INTERVAL variável de ambiente.
OTEL_METRIC_EXPORT_INTERVAL=60000
O valor padrão é 60000 milissegundos (60 segundos). Essa configuração controla a frequência com que o SDK do OpenTelemetry exporta métricas.
Gorjeta
O Azure Monitor Metrics e o Azure Monitor Workspace ingerem métricas personalizadas em um intervalo fixo de 60 segundos. As métricas enviadas com mais frequência são armazenadas em buffer e processadas uma vez a cada 60 segundos. O Log Analytics registra métricas no intervalo em que são enviadas, o que pode aumentar o custo em intervalos mais curtos e atrasar a visibilidade em intervalos mais longos.
Para referência, consulte as seguintes especificações OpenTelemetry :