Dieses Handbuch erklärt, wie Sie OpenTelemetry (OTel) in Azure Monitor Application Insights mithilfe der Azure Monitor OpenTelemetry-Distro konfigurieren. Die richtige Konfiguration stellt eine konsistente Telemetriedatensammlung in .NET-, Java-, Node.js- und Python-Anwendungen sicher, sodass eine zuverlässigere Überwachung und Diagnose ermöglicht wird.
Verbindungszeichenfolge
Eine Verbindungszeichenfolge in Application Insights definiert den Zielort, an den Telemetriedaten gesendet werden.
Verwenden Sie eine der folgenden drei Möglichkeiten, um die Verbindungszeichenfolge zu konfigurieren:
Fügen Sie UseAzureMonitor()
zu Ihrer program.cs
-Datei hinzu:
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();
Legen Sie eine Umgebungsvariable fest.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Fügen Sie den folgenden Abschnitt in Ihrer Konfigurationsdatei appsettings.json
hinzu.
{
"AzureMonitor": {
"ConnectionString": "<Your Connection String>"
}
}
Hinweis
Wenn Sie die Verbindungszeichenfolge an mehreren Stellen festlegen, wird die folgende Rangfolge eingehalten:
- Programmcode
- Umgebungsvariable
- Konfigurationsdatei
Verwenden Sie eine der folgenden beiden Methoden zum Konfigurieren der Verbindungszeichenfolge:
Fügen Sie jedem OpenTelemetry-Signal beim Anwendungsstart den Azure Monitor Exporter hinzu.
// 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>";
});
});
});
Legen Sie eine Umgebungsvariable fest.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Hinweis
Wenn Sie die Verbindungszeichenfolge an mehreren Stellen festlegen, wird die folgende Rangfolge eingehalten:
- Programmcode
- Umgebungsvariable
Verwenden Sie eine der folgenden beiden Methoden zum Konfigurieren der Verbindungszeichenfolge:
Legen Sie eine Umgebungsvariable fest.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Legen Sie eine Eigenschaft fest.
applicationinsights.connection.string=<Your Connection String>
Verwenden Sie eine der folgenden beiden Methoden zum Konfigurieren der Verbindungszeichenfolge:
Legen Sie eine Umgebungsvariable fest.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Verwend Sie ein Konfigurationsobjekt.
// 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);
Verwenden Sie eine der folgenden beiden Methoden zum Konfigurieren der Verbindungszeichenfolge:
Legen Sie eine Umgebungsvariable fest.
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Verwenden Sie die Funktion 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>",
)
Festlegen von Cloudrollennamen und Cloudrolleninstanz
Bei unterstützten Sprachenerkennt die OpenTelemetry-Distribution von Azure Monitor automatisch den Ressourcenkontext und stellt Standardwerte für den Cloudrollennamen und die Eigenschaften der Cloudrolleninstanz Ihrer Komponente bereit. Möglicherweise möchten Sie jedoch die Standardwerte durch für Ihr Team sinnvollere Werte überschreiben. Der Wert des Cloudrollennamens wird in der Anwendungszuordnung als Name unter einem Knoten angezeigt.
Legen Sie den Cloudrollennamen und die Cloudrolleninstanz über Ressourcenattribute fest. Der Cloudrollenname verwendet die Attribute service.namespace
und service.name
, obwohl er auf service.name
zurückfällt, wenn service.namespace
nicht festgelegt ist. Die Cloudrolleninstanz verwendet den service.instance.id
-Attributwert. Informationen zu Standardattributen für Ressourcen finden Sie unter OpenTelemetry-Semantikkonventionen.
// 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();
Legen Sie den Cloudrollennamen und die Cloudrolleninstanz über Ressourcenattribute fest. Der Cloudrollenname verwendet die Attribute service.namespace
und service.name
, obwohl er auf service.name
zurückfällt, wenn service.namespace
nicht festgelegt ist. Die Cloudrolleninstanz verwendet den service.instance.id
-Attributwert. Informationen zu Standardattributen für Ressourcen finden Sie unter OpenTelemetry-Semantikkonventionen.
// 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();
});
});
So legen Sie den Namen der Cloudrolle fest
- Verwenden Sie
spring.application.name
für native Spring Boot-Imageanwendungen.
- Verwenden Sie
quarkus.application.name
für native Quarkus-Imageanwendungen.
Legen Sie den Cloudrollennamen und die Cloudrolleninstanz über Ressourcenattribute fest. Der Cloudrollenname verwendet die Attribute service.namespace
und service.name
, obwohl er auf service.name
zurückfällt, wenn service.namespace
nicht festgelegt ist. Die Cloudrolleninstanz verwendet den service.instance.id
-Attributwert. Informationen zu Standardattributen für Ressourcen finden Sie unter OpenTelemetry-Semantikkonventionen.
// 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);
Legen Sie den Cloudrollennamen und die Cloudrolleninstanz über Ressourcenattribute fest. Der Cloudrollenname verwendet die Attribute service.namespace
und service.name
, obwohl er auf service.name
zurückfällt, wenn service.namespace
nicht festgelegt ist. Die Cloudrolleninstanz verwendet den service.instance.id
-Attributwert. Informationen zu Standardattributen für Ressourcen finden Sie unter OpenTelemetry-Semantikkonventionen.
Legen Sie Ressourcenattribute mithilfe der Umgebungsvariablen OTEL_RESOURCE_ATTRIBUTES
und/oder OTEL_SERVICE_NAME
fest. OTEL_RESOURCE_ATTRIBUTES
übernimmt eine Reihe von durch Kommata getrennten Schlüssel-Wert-Paaren. Wenn Sie beispielsweise den Cloudrollennamen auf my-namespace.my-helloworld-service
festlegen und die Cloudrolleninstanz auf my-instance
, können Sie OTEL_RESOURCE_ATTRIBUTES
und OTEL_SERVICE_NAME
wie folgt festlegen:
export OTEL_RESOURCE_ATTRIBUTES="service.namespace=my-namespace,service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Wenn Sie das service.namespace
-Ressourcenattribut nicht setzen, können Sie alternativ den Namen der Cloud-Rolle nur mit der Umgebungsvariablen OTEL_SERVICE_NAME oder dem service.name
-Ressourcenattribut setzen. Wenn Sie beispielsweise den Cloudrollennamen auf my-helloworld-service
festlegen und die Cloudrolleninstanz auf my-instance
, können Sie OTEL_RESOURCE_ATTRIBUTES
und OTEL_SERVICE_NAME
wie folgt festlegen:
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Aktivieren der Stichprobenentnahme
Es empfiehlt sich gegebenenfalls, die Stichprobenentnahme zu aktivieren, um den Umfang der Datenerfassung und somit Ihre Kosten zu reduzieren. Azure Monitor bietet eine benutzerdefinierte Stichprobenentnahme mit festem Prozentsatz, die Ereignisse mit einem Stichprobenverhältnis auffüllt, das von Application Insights in ItemCount
konvertiert wird. Die Stichprobenentnahme mit fester Rate gewährleistet eine präzise Erfahrung sowie genaue Ereignisanzahlwerte. Die Stichprobenentnahme ist so konzipiert, dass Ablaufverfolgungen dienstübergreifend erhalten bleiben, und sie ist mit älteren Application Insights-SDKs (Software Development Kits) kompatibel. Weitere Informationen zu Stichproben finden Sie hier.
Hinweis
Metriken und Protokolle sind vom Sampling nicht betroffen.
Wenn unerwartete Gebühren oder hohe Kosten in Application Insights angezeigt werden, kann dieser Leitfaden hilfreich sein. Es deckt häufige Ursachen wie hohes Telemetrievolumen, Datenaufnahmespitzen und falsch konfiguriertes Sampling ab. Es ist besonders hilfreich, wenn Sie Probleme im Zusammenhang mit Kostenspitzen, Telemetrievolumen, nicht funktionierendem Sampling, Datenobergrenzen, hohem Dateninput oder unerwarteter Abrechnung beheben. Informationen zu den ersten Schritten finden Sie unter "Problembehandlung bei der Erfassung von hohen Daten in Application Insights".
Vom Sampler wird eine Stichprobenrate von 0 bis einschließlich 1 erwartet. Bei einer Rate von 0,1 werden ca. 10 % Ihrer Ablaufverfolgungen gesendet.
// 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();
Vom Sampler wird eine Stichprobenrate von 0 bis einschließlich 1 erwartet. Bei einer Rate von 0,1 werden ca. 10 % Ihrer Ablaufverfolgungen gesendet.
// 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();
Ab Version 3.4.0 steht Sampling mit Ratenbegrenzung zur Verfügung und ist jetzt Standard. Weitere Informationen zum Sampling finden Sie unter Java-Sampling.
Vom Sampler wird eine Stichprobenrate von 0 bis einschließlich 1 erwartet. Bei einer Rate von 0,1 werden ca. 10 % Ihrer Ablaufverfolgungen gesendet.
// 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);
Die configure_azure_monitor()
-Funktion verwendet automatisch ApplicationInsightsSampler, um die Kompatibilität mit Application Insights-SDKs zu gewährleisten und Stichproben Ihrer Telemetriedaten zu erfassen. Die OTEL_TRACES_SAMPLER_ARG
-Umgebungsvariable kann verwendet werden, um die Stichprobenentnahmerate anzugeben, mit einem gültigen Bereich von 0 bis 1, wobei 0 0 % und 1 100 % ist.
Ein Wert von 0,1 bedeutet beispielsweise, dass 10 % Ihrer Ablaufverfolgungen gesendet werden.
export OTEL_TRACES_SAMPLER_ARG=0.1
Tipp
Wenn Sie die Samplingrate mit fester Rate/Prozentsatz verwenden und nicht sicher sind, wie Sie die Samplingrate festlegen möchten, beginnen Sie bei 5 %. (0,05 Abtastverhältnis) Passen Sie die Geschwindigkeit basierend auf der Genauigkeit der Operationen an, die in den Fehler- und Leistungspanels angezeigt werden. Eine höhere Rate führt im Allgemeinen zu einer höheren Genauigkeit. Eine Stichprobenentnahme wirkt sich jedoch IMMER auf die Genauigkeit aus. Für Warnungen sollten deshalb OpenTelemetry-Metriken verwendet werden, da diese nicht von der Stichprobenentnahme betroffen sind.
Livemetriken
Livemetriken bieten ein Echtzeit-Analysedashboard für Einblicke in die Aktivität und Leistung von Anwendungen.
Dieses Feature ist standardmäßig aktiviert.
Benutzer können Livemetriken beim Konfigurieren der Distribution deaktivieren.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
// Disable the Live Metrics feature.
options.EnableLiveMetrics = false;
});
Diese Funktion ist in der Exportfunktion von Azure Monitor .NET nicht verfügbar.
Die Livemetriken sind derzeit für native GraalVM-Anwendungen nicht verfügbar.
Benutzer können Livemetriken beim Konfigurieren der Distribution mithilfe der enableLiveMetrics
-Eigenschaft aktivieren oder deaktivieren.
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString:
process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "<your connection string>",
},
enableLiveMetrics: false
};
useAzureMonitor(options);
Sie können Livemetriken mit der Azure Monitor OpenTelemetry-Distribution für Python wie folgt aktivieren:
...
configure_azure_monitor(
enable_live_metrics=True
)
...
Es empfiehlt sich gegebenenfalls, die Microsoft Entra-Authentifizierung zu aktivieren, um eine sicherere Verbindung mit Azure herzustellen, wodurch verhindert wird, dass nicht autorisierte Telemetriedaten in Ihrem Abonnement erfasst werden.
Weitere Informationen finden Sie auf unserer dedizierten Microsoft Entra-Authentifizierungsseite, die für jede unterstützte Sprache verknüpft ist.
Die Microsoft Entra ID-Authentifizierung ist für native GraalVM-Anwendungen nicht verfügbar.
Speicher im Offline-Modus und automatische Wiederholversuche
Azure Monitor OpenTelemetry-basierte Angebote zwischenspeichern Telemetrie, wenn eine Anwendung die Verbindung zu Application Insights unterbricht und das Senden bis zu 48 Stunden lang erneut versucht. Empfehlungen zur Datenverarbeitung finden Sie unter Exportieren und Löschen privater Daten. Anwendungen mit hoher Auslastung verlieren gelegentlich Telemetriedaten aus zwei Gründen: Überschreiten der erlaubten Zeit oder Überschreiten der maximalen Dateigröße. Bei Bedarf priorisiert das Produkt aktuelle Ereignisse gegenüber alten Ereignissen.
Das Distributionspaket enthält den AzureMonitorExporter, der standardmäßig einen der folgenden Speicherorte für den Offlinespeicher verwendet (in der Reihenfolge der Vorrangs aufgeführt):
- Fenster
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
- Nicht-Windows-System
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Das Standardverzeichnis kann durch Festlegen von AzureMonitorOptions.StorageDirectory
überschrieben werden.
// 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();
Wenn Sie das Feature deaktivieren möchten, legen Sie AzureMonitorOptions.DisableOfflineStorage = true
fest.
Standardmäßig verwendet AzureMonitorExporter einen der folgenden Speicherorte als Offlinespeicher (in der angegebenen Reihenfolge):
- Fenster
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
- Nicht-Windows-System
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Das Standardverzeichnis kann durch Festlegen von AzureMonitorExporterOptions.StorageDirectory
überschrieben werden.
// 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";
});
});
});
Wenn Sie das Feature deaktivieren möchten, legen Sie AzureMonitorExporterOptions.DisableOfflineStorage = true
fest.
Wenn der Agent telemetrie nicht an Azure Monitor senden kann, speichert er Telemetriedateien auf dem Datenträger. Die Dateien werden in einem telemetry
Ordner unter dem durch die java.io.tmpdir
Systemeigenschaft angegebenen Verzeichnis gespeichert. Jeder Dateiname beginnt mit einem Zeitstempel und endet mit der .trn
Erweiterung. Dieser Offlinespeichermechanismus trägt dazu bei, dass Telemetrie während temporärer Netzwerkausfälle oder Aufnahmefehler beibehalten wird.
Der Agent speichert standardmäßig bis zu 50 MB Telemetriedaten und ermöglicht die Konfiguration des Speicherlimits. Versuche zum Senden gespeicherter Telemetrie werden regelmäßig durchgeführt. Telemetriedateien, die älter als 48 Stunden sind, werden gelöscht, und die ältesten Ereignisse werden verworfen, wenn der Speichergrenzwert erreicht ist.
Eine vollständige Liste der verfügbaren Konfigurationen finden Sie unter Konfigurationsoptionen.
Wenn der Agent telemetrie nicht an Azure Monitor senden kann, speichert er Telemetriedateien auf dem Datenträger. Die Dateien werden in einem telemetry
Ordner unter dem durch die java.io.tmpdir
Systemeigenschaft angegebenen Verzeichnis gespeichert. Jeder Dateiname beginnt mit einem Zeitstempel und endet mit der .trn
Erweiterung. Dieser Offlinespeichermechanismus trägt dazu bei, dass Telemetrie während temporärer Netzwerkausfälle oder Aufnahmefehler beibehalten wird.
Der Agent speichert standardmäßig bis zu 50 MB Telemetriedaten. Versuche zum Senden gespeicherter Telemetrie werden regelmäßig durchgeführt. Telemetriedateien, die älter als 48 Stunden sind, werden gelöscht, und die ältesten Ereignisse werden verworfen, wenn der Speichergrenzwert erreicht ist.
Standardmäßig verwendet AzureMonitorExporter einen der folgenden Speicherorte als Offlinespeicher:
- Fenster
- %TEMP%\Microsoft\AzureMonitor
- Nicht-Windows-System
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
Das Standardverzeichnis kann durch Festlegen von storageDirectory
überschrieben werden.
Beispiel:
// 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);
Wenn Sie das Feature deaktivieren möchten, legen Sie disableOfflineStorage = true
fest.
Von den Azure Monitor-Exportprogrammen wird standardmäßig folgender Pfad verwendet:
<tempfile.gettempdir()>/Microsoft/AzureMonitor/opentelemetry-python-<your-instrumentation-key>
Wenn Sie das Standardverzeichnis überschreiben möchten, können Sie storage_directory
auf das gewünschte Verzeichnis festlegen.
Beispiel:
...
# 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",
)
...
Wenn Sie das Feature deaktivieren möchten, legen Sie disable_offline_storage
auf True
fest. Wird standardmäßig auf False
festgelegt.
Beispiel:
...
# 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,
)
...
Aktivieren des OTLP-Exporters
Sie sollten neben Azure Monitor Exporter auch den OTLP-Exporter (OpenTelemetry Protocol) aktivieren, um Ihre Telemetriedaten an zwei Speicherorte zu senden.
Hinweis
Der OTLP-Exporter wird nur als Beispiel gezeigt. Wir unterstützen offiziell weder den OTLP-Exporter noch irgendwelche Komponenten oder Angebote von Drittanbietern, die diesem nachgeschaltet sind.
Installieren Sie in Ihrem Projekt das Paket OpenTelemetry.Exporter.OpenTelemetryProtocol.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Fügen Sie den folgenden Codeausschnitt hinzu. In diesem Beispiel wird davon ausgegangen, dass Sie einen OpenTelemetry-Collector mit einem laufenden OTLP-Empfänger haben. Weitere Informationen finden Sie im Beispiel zu 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();
Installieren Sie in Ihrem Projekt das Paket OpenTelemetry.Exporter.OpenTelemetryProtocol.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Fügen Sie den folgenden Codeausschnitt hinzu. In diesem Beispiel wird davon ausgegangen, dass Sie einen OpenTelemetry-Collector mit einem laufenden OTLP-Empfänger haben. Weitere Informationen finden Sie im Beispiel zu 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();
Der Application Insights-Java-Agent unterstützt OTLP nicht.
Weitere Informationen zu unterstützten Konfigurationen finden Sie in der ergänzenden Java-Dokumentation.
Sie können neben Azure Monitor Exporter nicht den OTLP-Exporter (OpenTelemetry Protocol) aktivieren, um Ihre Telemetriedaten an zwei Speicherorte zu senden.
Installieren Sie den OpenTelemetry Collector Trace Exporter und andere OpenTelemetry-Pakete in Ihrem Projekt.
npm install @opentelemetry/api
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/sdk-trace-base
npm install @opentelemetry/sdk-trace-node
Fügen Sie den folgenden Codeausschnitt hinzu. In diesem Beispiel wird davon ausgegangen, dass Sie einen OpenTelemetry-Collector mit einem laufenden OTLP-Empfänger haben. Weitere Informationen finden Sie im Beispiel zu 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);
Installieren Sie das Paket opentelemetry-exporter-otlp.
Fügen Sie den folgenden Codeausschnitt hinzu. In diesem Beispiel wird davon ausgegangen, dass Sie einen OpenTelemetry-Collector mit einem laufenden OTLP-Empfänger haben. Weitere Informationen finden Sie in dieser 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!")
OpenTelemetry-Konfigurationen
Auf die folgenden OpenTelemetry-Konfigurationen kann bei der Verwendung der OpenTelemetry-Distributionen von Azure Monitor über Umgebungsvariablen zugegriffen werden.
Umgebungsvariable |
Beschreibung |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Legen Sie dies auf die Verbindungszeichenfolge für Ihre Application Insights-Ressource fest. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Legen Sie dies auf true fest, um die interne Metriksammlung zu deaktivieren. |
OTEL_RESOURCE_ATTRIBUTES |
Schlüssel-Wert-Paare, die als Ressourcenattribute verwendet werden. Weitere Informationen zu Ressourcenattributen finden Sie in der Resource SDK-Spezifikation. |
OTEL_SERVICE_NAME |
Legt den Wert des Ressourcenattributes service.name fest. Wenn service.name auch in OTEL_RESOURCE_ATTRIBUTES bereitgestellt wird, hat OTEL_SERVICE_NAME Vorrang. |
Umgebungsvariable |
Beschreibung |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Legen Sie dies auf die Verbindungszeichenfolge für Ihre Application Insights-Ressource fest. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Legen Sie dies auf true fest, um die interne Metriksammlung zu deaktivieren. |
OTEL_RESOURCE_ATTRIBUTES |
Schlüssel-Wert-Paare, die als Ressourcenattribute verwendet werden. Weitere Informationen zu Ressourcenattributen finden Sie in der Resource SDK-Spezifikation. |
OTEL_SERVICE_NAME |
Legt den Wert des Ressourcenattributes service.name fest. Wenn service.name auch in OTEL_RESOURCE_ATTRIBUTES bereitgestellt wird, hat OTEL_SERVICE_NAME Vorrang. |
URL-Abfragezeichenfolgen redigieren
Um URL-Abfragezeichenfolgen zu maskieren, deaktivieren Sie die Abfragezeichenfolgenerfassung. Diese Einstellung wird empfohlen, wenn Sie Azure Storage mit einem SAS-Token aufrufen.
Bei Verwendung des Distributionspakets Azure.Monitor.OpenTelemetry.AspNetCore sind sowohl ASP.NET Core- als auch HttpClient-Instrumentierungsbibliotheken enthalten.
Für unser Distributionspaket ist standardmäßig die Maskierung der Abfragezeichenfolgen deaktiviert.
Um dieses Verhalten zu ändern, müssen Sie eine Umgebungsvariable entweder auf true
oder false
festlegen.
- ASP.NET Core-Instrumentierung: Die Maskierung von
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION
-Abfragezeichenfolgen ist standardmäßig deaktiviert. Zum Aktivieren müssen Sie diese Umgebungsvariable auf false
festlegen.
- HTTPClient-Instrumentierung: Die Maskierung von
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION
-Abfragezeichenfolgen ist standardmäßig deaktiviert. Zum Aktivieren müssen Sie diese Umgebungsvariable auf false
festlegen.
Wenn Sie Azure.Monitor.OpenTelemetry.Exporter verwenden, müssen Sie entweder die ASP.NET Core- oder HttpClient-Instrumentierungsbibliotheken in die OpenTelemetry-Konfiguration einschließen.
Für diese Instrumentierungsbibliotheken ist „QueryString-Maskierung“ standardmäßig aktiviert.
Um dieses Verhalten zu ändern, müssen Sie eine Umgebungsvariable entweder auf true
oder false
festlegen.
- ASP.NET Core-Instrumentierung: Die Maskierung von
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION
-Abfragezeichenfolgen ist standardmäßig aktiviert. Zum Deaktivieren müssen Sie diese Umgebungsvariable auf true
festlegen.
- HTTPClient-Instrumentierung: Die Maskierung von
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION
-Abfragezeichenfolgen ist standardmäßig aktiviert. Zum Deaktivieren müssen Sie diese Umgebungsvariable auf true
festlegen.
Fügen Sie der applicationinsights.json
-Konfigurationsdatei Folgendes hinzu:
{
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.query",
"pattern": "^.*$",
"replace": "REDACTED",
"action": "mask"
}
]
},
{
"type": "attribute",
"actions": [
{
"key": "url.full",
"pattern": "[?].*$",
"replace": "?REDACTED",
"action": "mask"
}
]
}
]
}
}
Wir arbeiten aktiv mit der OpenTelemetry-Community zusammen, um die Bearbeitung zu unterstützen.
Bei der Verwendung des Azure Monitor OpenTelemetry-Distributionspakets können Abfragezeichenfolgen durch Erstellen und Anwenden eines Span-Prozessors auf die Distributionskonfiguration redigiert werden.
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);
Wir arbeiten aktiv mit der OpenTelemetry-Community zusammen, um die Bearbeitung zu unterstützen.