Configurare OpenTelemetry di Monitoraggio di Azure
Articolo
Questo articolo illustra le impostazioni di configurazione per la distribuzione di OpenTelemetry di Monitoraggio di Azure.
Connection string
Un stringa di connessione in Application Insights definisce la posizione di destinazione per l'invio di dati di telemetria, assicurandosi che raggiunga la risorsa appropriata per il monitoraggio e l'analisi.
Usare uno dei tre modi seguenti per configurare il stringa di connessione:
Aggiungere UseAzureMonitor() all'avvio dell'applicazione nella program.cs classe .
// 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();
Se si imposta il stringa di connessione in più posizioni, si rispetta la precedenza seguente:
Codice
Variabile di ambiente
File di configurazione
Usare uno dei due modi seguenti per configurare il stringa di connessione:
Aggiungere l'utilità di esportazione di Monitoraggio di Azure a ogni segnale OpenTelemetry all'avvio dell'applicazione.
// 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>";
});
// 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>";
});
// 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(options =>
{
options.AddAzureMonitorLogExporter(options =>
{
options.ConnectionString = "<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);
Usare uno dei due modi seguenti per configurare il stringa di connessione:
# 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>",
)
Impostare il nome del ruolo cloud e l'istanza del ruolo cloud
Per le lingue supportate, la distribuzione OpenTelemetry di Monitoraggio di Azure rileva automaticamente il contesto delle risorse e fornisce i valori predefiniti per le proprietà Nome ruolo cloud e Istanza del ruolo cloud del componente. Tuttavia, è possibile eseguire l'override dei valori predefiniti in un elemento che abbia senso per il team. Il valore del nome del ruolo cloud viene visualizzato nella mappa delle applicazioni come nome sotto un nodo.
Impostare il nome del ruolo cloud e l'istanza del ruolo cloud tramite gli attributi delle risorse . Il nome del ruolo cloud usa service.namespace gli attributi e service.name , anche se service.nameservice.namespace non è impostato. L'istanza del ruolo cloud usa il valore dell'attributo service.instance.id . Per informazioni sugli attributi standard per le risorse, vedere Convenzioni semantiche 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();
Impostare il nome del ruolo cloud e l'istanza del ruolo cloud tramite gli attributi delle risorse . Il nome del ruolo cloud usa service.namespace gli attributi e service.name , anche se service.nameservice.namespace non è impostato. L'istanza del ruolo cloud usa il valore dell'attributo service.instance.id . Per informazioni sugli attributi standard per le risorse, vedere Convenzioni semantiche 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();
// 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();
// 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(options =>
{
// Set ResourceBuilder on the Logging config.
options.SetResourceBuilder(resourceBuilder);
options.AddAzureMonitorLogExporter();
});
});
Per impostare il nome del ruolo cloud, vedere Nome del ruolo cloud.
Per impostare l'istanza del ruolo cloud, vedere Istanza del ruolo cloud.
Impostare il nome del ruolo cloud e l'istanza del ruolo cloud tramite gli attributi delle risorse . Il nome del ruolo cloud usa service.namespace gli attributi e service.name , anche se service.nameservice.namespace non è impostato. L'istanza del ruolo cloud usa il valore dell'attributo service.instance.id . Per informazioni sugli attributi standard per le risorse, vedere Convenzioni semantiche 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);
Impostare il nome del ruolo cloud e l'istanza del ruolo cloud tramite gli attributi delle risorse . Il nome del ruolo cloud usa service.namespace gli attributi e service.name , anche se service.nameservice.namespace non è impostato. L'istanza del ruolo cloud usa il valore dell'attributo service.instance.id . Per informazioni sugli attributi standard per le risorse, vedere Convenzioni semantiche OpenTelemetry.
Impostare Attributi risorsa usando le OTEL_RESOURCE_ATTRIBUTES variabili di ambiente e/o OTEL_SERVICE_NAME . OTEL_RESOURCE_ATTRIBUTES accetta una serie di coppie chiave-valore delimitate da virgole. Ad esempio, per impostare il nome del ruolo cloud su my-namespace.my-helloworld-service e impostare Istanza my-instancedel ruolo cloud su , è possibile impostare OTEL_RESOURCE_ATTRIBUTES e OTEL_SERVICE_NAME come segue:
Se non si imposta l'attributo service.namespace Resource, è possibile impostare in alternativa il nome del ruolo cloud solo con la variabile di ambiente OTEL_edizione Standard RVICE_NAME o l'attributo service.name Resource. Ad esempio, per impostare il nome del ruolo cloud su my-helloworld-service e impostare Istanza my-instancedel ruolo cloud su , è possibile impostare OTEL_RESOURCE_ATTRIBUTES e OTEL_SERVICE_NAME come segue:
È possibile abilitare il campionamento per ridurre il volume di inserimento dati, riducendo così i costi. Monitoraggio di Azure fornisce un campionatore a frequenza fissa personalizzata che popola gli eventi con un rapporto di campionamento, che Application Insights converte in ItemCount. Il campionatore a frequenza fissa garantisce esperienze accurate e conteggi di eventi. L'sampler è progettato per mantenere le tracce tra i servizi ed è interoperabile con gli SDK di Application Insights meno recenti. Per altre informazioni, vedere Altre informazioni sul campionamento.
Nota
Le metriche e i log non sono interessati dal campionamento.
Il campionatore prevede una frequenza di campionamento compresa tra 0 e 1 inclusi. Un tasso pari a 0,1 indica che circa il 10% delle tracce viene inviato.
// 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();
Il campionatore prevede una frequenza di campionamento compresa tra 0 e 1 inclusi. Un tasso pari a 0,1 indica che circa il 10% delle tracce viene inviato.
// 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;
});
A partire dalla versione 3.4.0, il campionamento con frequenza limitata è disponibile ed è ora il valore predefinito. Per altre informazioni sul campionamento, vedere Campionamento Java.
Il campionatore prevede una frequenza di campionamento compresa tra 0 e 1 inclusi. Un tasso pari a 0,1 indica che circa il 10% delle tracce viene inviato.
// 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);
La configure_azure_monitor() funzione usa automaticamente ApplicationInsightsSampler per la compatibilità con gli SDK di Application Insights e per campionare i dati di telemetria. La OTEL_TRACES_SAMPLER_ARG variabile di ambiente può essere usata per specificare la frequenza di campionamento, con un intervallo valido compreso tra 0 e 1, dove 0 è 0% e 1 è 100%.
Ad esempio, un valore pari a 0,1 indica che il 10% delle tracce viene inviato.
export OTEL_TRACES_SAMPLER_ARG=0.1
Suggerimento
Quando si usa il campionamento a velocità fissa/percentuale e non si è certi di cosa impostare la frequenza di campionamento, iniziare al 5% (ad esempio, rapporto di campionamento di 0,05) e regolare la frequenza in base all'accuratezza delle operazioni mostrate nei pannelli errori e prestazioni. Una frequenza più elevata in genere comporta un'accuratezza maggiore. Tuttavia, il campionamento ANY influirà sull'accuratezza, pertanto è consigliabile inviare avvisi sulle metriche OpenTelemetry, che non sono interessate dal campionamento.
Abilitare l'autenticazione di Microsoft Entra ID (in precedenza Azure AD)
È possibile abilitare l'autenticazione di Microsoft Entra per una connessione più sicura ad Azure, che impedisce l'inserimento di dati di telemetria non autorizzati nella sottoscrizione.
Sono supportate le classi di credenziali fornite da Azure Identity.
È consigliabile DefaultAzureCredential per lo sviluppo locale.
È consigliabile ManagedIdentityCredential usare le identità gestite assegnate dal sistema e assegnate dall'utente.
Per l'assegnazione del sistema, usare il costruttore predefinito senza parametri.
Per l'assegnazione dell'utente, specificare l'ID client al costruttore.
È consigliabile ClientSecretCredential usare le entità servizio.
Specificare l'ID tenant, l'ID client e il segreto client al costruttore.
Installare il pacchetto Azure.Identity più recente:
dotnet add package Azure.Identity
Specificare la classe di credenziali desiderata:
// 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();
Sono supportate le classi di credenziali fornite da Azure Identity.
È consigliabile DefaultAzureCredential per lo sviluppo locale.
È consigliabile ManagedIdentityCredential usare le identità gestite assegnate dal sistema e assegnate dall'utente.
Per l'assegnazione del sistema, usare il costruttore predefinito senza parametri.
Per l'assegnazione dell'utente, specificare l'ID client al costruttore.
È consigliabile ClientSecretCredential usare le entità servizio.
Specificare l'ID tenant, l'ID client e il segreto client al costruttore.
Installare il pacchetto Azure.Identity più recente:
dotnet add package Azure.Identity
Specificare la classe di credenziali desiderata:
// Create a DefaultAzureCredential.
var credential = new DefaultAzureCredential();
// Create a new OpenTelemetry tracer provider and set the credential.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
options.Credential = credential;
});
// Create a new OpenTelemetry meter provider and set the credential.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
options.Credential = credential;
});
// Create a new logger factory and add the OpenTelemetry logger provider with the credential.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options =>
{
options.AddAzureMonitorLogExporter(options =>
{
options.Credential = credential;
});
});
});
Sono supportate le classi di credenziali fornite da Azure Identity.
// Import the useAzureMonitor function, the AzureMonitorOpenTelemetryOptions class, and the ManagedIdentityCredential class from the @azure/monitor-opentelemetry and @azure/identity packages, respectively.
const { useAzureMonitor, AzureMonitorOpenTelemetryOptions } = require("@azure/monitor-opentelemetry");
const { ManagedIdentityCredential } = require("@azure/identity");
// Create a new ManagedIdentityCredential object.
const credential = new ManagedIdentityCredential();
// Create a new AzureMonitorOpenTelemetryOptions object and set the credential property to the credential object.
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
credential: credential
}
};
// Enable Azure Monitor integration using the useAzureMonitor function and the AzureMonitorOpenTelemetryOptions object.
useAzureMonitor(options);
# Import the `ManagedIdentityCredential` class from the `azure.identity` package.
from azure.identity import ManagedIdentityCredential
# 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 a managed identity credential.
# This will allow OpenTelemetry to authenticate to Azure Monitor without requiring you to provide a connection string.
configure_azure_monitor(
credential=ManagedIdentityCredential(),
)
Archiviazione offline e tentativi automatici
Per migliorare l'affidabilità e la resilienza, le offerte basate su OpenTelemetry di Monitoraggio di Azure scrivono nell'archiviazione offline/locale per impostazione predefinita quando un'applicazione perde la connessione con Application Insights. Salva i dati di telemetria dell'applicazione su disco e tenta periodicamente di inviarli di nuovo per un massimo di 48 ore. Nelle applicazioni a carico elevato, i dati di telemetria vengono occasionalmente eliminati per due motivi. In primo luogo, quando viene superato il tempo consentito e secondo, quando viene superata la dimensione massima del file o l'SDK non ha la possibilità di cancellare il file. Se è necessario scegliere, il prodotto salva eventi più recenti rispetto a quelli precedenti. Altre informazioni
Il pacchetto di distribuzione include AzureMonitorExporter, che per impostazione predefinita usa uno dei percorsi seguenti per l'archiviazione offline (elencato in ordine di precedenza):
Windows
%LOCALAPPDATA%\Microsoft\AzureMonitor
%TEMP%\Microsoft\AzureMonitor
Non Windows
%TMPDIR%/Microsoft/AzureMonitor
/var/tmp/Microsoft/AzureMonitor
/tmp/Microsoft/AzureMonitor
Per eseguire l'override della directory predefinita, è necessario impostare 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();
Per disabilitare questa funzionalità, è necessario impostare AzureMonitorOptions.DisableOfflineStorage = true.
Per impostazione predefinita, AzureMonitorExporter usa una delle posizioni seguenti per l'archiviazione offline (elencata in ordine di precedenza):
Windows
%LOCALAPPDATA%\Microsoft\AzureMonitor
%TEMP%\Microsoft\AzureMonitor
Non Windows
%TMPDIR%/Microsoft/AzureMonitor
/var/tmp/Microsoft/AzureMonitor
/tmp/Microsoft/AzureMonitor
Per eseguire l'override della directory predefinita, è necessario impostare 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";
});
// 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";
});
// 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(options =>
{
options.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";
});
});
});
Per disabilitare questa funzionalità, è necessario impostare AzureMonitorExporterOptions.DisableOfflineStorage = true.
La configurazione di Archiviazione offline e tentativi automatici non è disponibile in Java.
Per un elenco completo delle configurazioni disponibili, vedere Opzioni di configurazione.
Per impostazione predefinita, AzureMonitorExporter usa uno dei percorsi seguenti per l'archiviazione offline.
Windows
%TEMP%\Microsoft\AzureMonitor
Non Windows
%TMPDIR%/Microsoft/AzureMonitor
/var/tmp/Microsoft/AzureMonitor
Per eseguire l'override della directory predefinita, è necessario impostare storageDirectory.
Ad esempio:
// 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);
Per disabilitare questa funzionalità, è necessario impostare disableOfflineStorage = true.
Per impostazione predefinita, gli esportatori di Monitoraggio di Azure usano il percorso seguente:
Per eseguire l'override della directory predefinita, è necessario impostare storage_directory la directory desiderata.
Ad esempio:
...
# 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",
)
...
Per disabilitare questa funzionalità, è necessario impostare su disable_offline_storageTrue. Il valore predefinito è False.
Ad esempio:
...
# 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,
)
...
Abilitare l'utilità di esportazione OTLP
È possibile abilitare OpenTelemetry Protocol (OTLP) Exporter insieme all'utilità di esportazione di Monitoraggio di Azure per inviare i dati di telemetria a due posizioni.
Nota
L'utilità di esportazione OTLP viene visualizzata solo per praticità. Non supportiamo ufficialmente l'esportatore OTLP o nessun componente o esperienze di terze parti a valle.
Aggiungere il frammento di codice seguente. In questo esempio si presuppone che l'agente di raccolta OpenTelemetry sia in esecuzione con un ricevitore OTLP. Per informazioni dettagliate, vedere l'esempio in 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();
Aggiungere il frammento di codice seguente. In questo esempio si presuppone che l'agente di raccolta OpenTelemetry sia in esecuzione con un ricevitore OTLP. Per informazioni dettagliate, vedere l'esempio in 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();
// 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();
Aggiungere il frammento di codice seguente. In questo esempio si presuppone che l'agente di raccolta OpenTelemetry sia in esecuzione con un ricevitore OTLP. Per informazioni dettagliate, vedere l'esempio in 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);
Aggiungere il frammento di codice seguente. In questo esempio si presuppone che l'agente di raccolta OpenTelemetry sia in esecuzione con un ricevitore OTLP. Per informazioni dettagliate, vedere questo file README.
# 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!")
Configurazioni di OpenTelemetry
È possibile accedere alle configurazioni OpenTelemetry seguenti tramite variabili di ambiente durante l'uso delle distribuzioni OpenTelemetry di Monitoraggio di Azure.
Impostarlo sul stringa di connessione per la risorsa di Application Insights.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED
Impostarlo su per true rifiutare esplicitamente la raccolta di metriche interne.
OTEL_RESOURCE_ATTRIBUTES
Coppie chiave-valore da usare come attributi di risorsa. Per altre informazioni sugli attributi delle risorse, vedere la specifica di Resource SDK.
OTEL_SERVICE_NAME
Imposta il valore dell'attributo service.name della risorsa. Se service.name viene fornito anche in OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME ha la precedenza.
Variabile di ambiente
Descrizione
APPLICATIONINSIGHTS_CONNECTION_STRING
Impostarlo sul stringa di connessione per la risorsa di Application Insights.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED
Impostarlo su per true rifiutare esplicitamente la raccolta di metriche interne.
OTEL_RESOURCE_ATTRIBUTES
Coppie chiave-valore da usare come attributi di risorsa. Per altre informazioni sugli attributi delle risorse, vedere la specifica di Resource SDK.
OTEL_SERVICE_NAME
Imposta il valore dell'attributo service.name della risorsa. Se service.name viene fornito anche in OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME ha la precedenza.
Per altre informazioni sulla configurazione di OpenTelemetry SDK, vedere la documentazione di OpenTelemetry.
Per altre informazioni sulla configurazione di OpenTelemetry SDK, vedere la documentazione di OpenTelemetry e l'utilizzo della distribuzione di Monitoraggio di Azure.
Domande frequenti
Questa sezione fornisce le risposte alle domande comuni.
Che cos'è OpenTelemetry?
Si tratta di un nuovo standard open source per l'osservabilità. Per altre informazioni, vedere OpenTelemetry.
Perché Monitoraggio di Microsoft Azure investe in OpenTelemetry?
Microsoft è tra i maggiori collaboratori a OpenTelemetry.
Le proposte chiave di valore di OpenTelemetry sono che sono indipendenti dal fornitore e forniscono API/SDK coerenti in tutte le lingue.
Nel corso del tempo, Si ritiene che OpenTelemetry consentirà ai clienti di Monitoraggio di Azure di osservare le applicazioni scritte in lingue diverse dalle lingue supportate. Espande anche i tipi di dati che è possibile raccogliere tramite un set completo di librerie di strumentazione. Inoltre, gli SDK OpenTelemetry tendono ad essere più efficienti su larga scala rispetto ai predecessori, gli SDK di Application Insights.
Infine, OpenTelemetry si allinea alla strategia di Microsoft per adottare l'open source.
Che cos'è la distribuzione di OpenTelemetry di Monitoraggio di Azure?
È possibile considerarlo come un wrapper sottile che aggrega tutti i componenti OpenTelemetry per un'esperienza di prima classe in Azure. Questo wrapper è detto anche distribuzione in OpenTelemetry.
Perché è consigliabile usare la distribuzione di OpenTelemetry di Monitoraggio di Azure?
L'uso della distribuzione OpenTelemetry di Monitoraggio di Azure tramite OpenTelemetry nativo dalla community offre diversi vantaggi:
Riduce il lavoro di abilitazione
Supportato da Microsoft
Include funzionalità specifiche di Azure, ad esempio:
Campionamento compatibile con gli SDK classici di Application Insights
Nello spirito di OpenTelemetry, abbiamo progettato la distribuzione per essere aperta ed estendibile. Ad esempio, è possibile aggiungere:
Esportazione del protocollo OTLP (OpenTelemetry Protocol) e invio simultaneamente a una seconda destinazione
Altre librerie di strumentazione non incluse nella distribuzione
Poiché la distribuzione fornisce una distribuzione OpenTelemetry, la distribuzione supporta qualsiasi elemento supportato da OpenTelemetry. Ad esempio, è possibile aggiungere altri processori di telemetria, utilità di esportazione o librerie di strumentazione, se OpenTelemetry li supporta.
Nota
La distribuzione imposta il campionatore su un campionatore personalizzato a frequenza fissa per Application Insights. È possibile passare a un campionatore diverso, ma in questo modo è possibile disabilitare alcune delle funzionalità incluse della distribuzione.
Per altre informazioni sull'sampler supportato, vedere la sezione Abilitare il campionamento di Configurare OpenTelemetry di Monitoraggio di Azure.
Per le lingue senza un utilità di esportazione OpenTelemetry autonoma supportata, la distribuzione OpenTelemetry di Monitoraggio di Azure è l'unico modo attualmente supportato per usare OpenTelemetry con Monitoraggio di Azure. Per le lingue con un utilità di esportazione OpenTelemetry autonoma supportata, è possibile usare la distribuzione OpenTelemetry di Monitoraggio di Azure o l'utilità di esportazione OpenTelemetry autonoma appropriata a seconda dello scenario di telemetria. Per altre informazioni, vedere Quando usare l'utilità di esportazione OpenTelemetry di Monitoraggio di Azure?
Come è possibile testare la distribuzione di OpenTelemetry di Monitoraggio di Azure?
L'adozione di OpenTelemetry impedisce ora di eseguire la migrazione in un secondo momento.
Quando è consigliabile usare l'utilità di esportazione OpenTelemetry di Monitoraggio di Azure?
Per ASP.NET Core, Java, Node.js e Python, è consigliabile usare la distribuzione OpenTelemetry di Monitoraggio di Azure. Si tratta di una riga di codice da iniziare.
Per tutti gli altri scenari .NET, inclusi i ASP.NET classici, le app console e così via, è consigliabile usare l'utilità di esportazione OpenTelemetry di Monitoraggio di Azure .NET: Azure.Monitor.OpenTelemetry.Exporter.
❌ Questa funzionalità non è disponibile o non è applicabile.
È possibile usare OpenTelemetry per i Web browser?
Sì, ma non è consigliabile e Azure non lo supporta. OpenTelemetry JavaScript è fortemente ottimizzato per Node.js. È invece consigliabile usare Application Insights JavaScript SDK.
Quando è possibile prevedere che OpenTelemetry SDK sia disponibile per l'uso nei Web browser?
OpenTelemetry Web SDK non ha una sequenza temporale di disponibilità determinata. Probabilmente ci sono diversi anni di distanza da un SDK del browser che è un'alternativa praticabile all'SDK JavaScript di Application Insights.
È possibile testare OpenTelemetry in un Web browser?
La sandbox Web OpenTelemetry è un fork progettato per consentire il funzionamento di OpenTelemetry in un browser. Non è ancora possibile inviare dati di telemetria ad Application Insights. L'SDK non definisce eventi client generali.
L'esecuzione di Application Insights insieme a agenti concorrenti come AppDynamics, DataDog e NewRelic è supportato?
No. Questa procedura non è un elemento che si prevede di testare o supportare, anche se le distribuzioni consentono di esportare in un endpoint OTLP insieme a Monitoraggio di Azure contemporaneamente.
È possibile usare le funzionalità di anteprima negli ambienti di produzione?
Alcuni clienti usano OpenTelemetry Collector come alternativa agente, anche se Microsoft non supporta ufficialmente un approccio basato su agente per il monitoraggio delle applicazioni. Nel frattempo, la community open source ha contribuito a un utilità di esportazione di Monitoraggio di Azure dell'agente di raccolta OpenTelemetry che alcuni clienti usano per inviare dati ad Application Insights di Monitoraggio di Azure. Questo non è supportato da Microsoft.
Qual è la differenza tra OpenCensus e OpenTelemetry?
OpenCensus è il precursore di OpenTelemetry. Microsoft ha contribuito a riunire OpenTracing e OpenCensus per creare OpenTelemetry, un unico standard di osservabilità a livello globale. L'SDK Python attualmente consigliato per la produzione per Monitoraggio di Azure si basa su OpenCensus. Microsoft si impegna a rendere Monitoraggio di Azure basato su OpenTelemetry.