Share via


Azure Monitor OpenTelemetry konfigurieren

In diesem Artikel werden Konfigurationseinstellungen für die OpenTelemetry-Distribution von Azure Monitor behandelt.

Verbindungszeichenfolge

Eine Verbindungszeichenfolge in Application Insights definiert den Zielspeicherort für das Senden von Telemetriedaten und stellt sicher, dass die entsprechende Ressource für die Überwachung und Analyse erreicht wird.

Verwenden Sie eine der folgenden drei Möglichkeiten, um die Verbindungszeichenfolge zu konfigurieren:

  • Fügen Sie UseAzureMonitor() in Ihrer program.cs-Klasse Ihrem Anwendungsstart hinzu.

    // 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();
    
  • 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:

  1. Code
  2. Umgebungsvariable
  3. Konfigurationsdatei

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 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();

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 kompatibel. Weitere Informationen zu Stichproben finden Sie hier.

Hinweis

Metriken und Protokolle sind vom Sampling nicht betroffen.

Von der Stichprobenentnahme wird eine Stichprobenrate zwischen 0 und 1 (einschließlich) erwartet. Bei einer Rate von 0,1 werden ca. zehn Prozent 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(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();

Tipp

Wenn Sie Stichproben mit einer festen Rate bzw. Prozentsatzstichproben verwenden und nicht sicher sind, auf welchen Wert Sie die Stichprobenrate festlegen sollen, beginnen Sie mit fünf Prozent (entspricht einem Stichprobenverhältnis von 0,05), und passen Sie die Rate basierend auf der Genauigkeit der Vorgänge an, die auf den Blättern zu Fehlern und zur Leistung 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.

Aktivieren der Microsoft Entra ID-Authentifizierung (früher Azure AD)

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.

Wir unterstützen die von Azure Identity bereitgestellten Anmeldeinformationsklassen.

  • Wir empfehlen DefaultAzureCredential für die lokale Entwicklung.
  • Wir empfehlen ManagedIdentityCredential wird für systemseitig zugewiesene und benutzerseitig zugewiesene verwaltete Identitäten.
    • Verwenden Sie bei systemseitig zugewiesenen Identitäten den Standardkonstruktor ohne Parameter.
    • Stellen Sie bei benutzerseitig zugewiesenen Identitäten die Client-ID für den Konstruktor bereit.
  • Wir empfehlen ClientSecretCredential für Dienstprinzipale.
    • Geben Sie die Mandanten-ID, die Client-ID und den geheimen Clientschlüssel für den Konstruktor an.
  1. Installieren Sie das neueste Azure.Identity-Paket:

    dotnet add package Azure.Identity
    
  2. Geben Sie die gewünschte Klasse für Anmeldeinformation an:

    // 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();
    

Offlinespeicher und automatische Wiederholungen

Um die Zuverlässigkeit und Resilienz zu verbessern, schreiben auf Azure Monitor OpenTelemetry basierende Angebote standardmäßig in Offlinespeicher bzw. in lokalen Speicher, wenn die Application Insights-Verbindung einer Anwendung unterbrochen wird. Anwendungstelemetriedaten werden auf dem Datenträger gespeichert, und es wird regelmäßig bis zu 48 Stunden lang erneut versucht, die Daten zu senden. In Anwendungen mit hoher Auslastung wird Telemetrie gelegentlich aus zwei Gründen gelöscht. Entweder beim Überschreiten der zulässigen Zeit oder beim Überschreiten der maximalen Dateigröße oder wenn das SDK keine Möglichkeit hat, die Datei zu bereinigen. Falls erforderlich, werden alte Ereignisse mit neueren Ereignissen überschrieben. Weitere Informationen

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):

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

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.

  1. Installieren Sie in Ihrem Projekt das Paket OpenTelemetry.Exporter.OpenTelemetryProtocol.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. Fügen Sie den folgenden Codeausschnitt hinzu. In diesem Beispiel wird davon ausgegangen, dass Sie über einen OpenTelemetry-Collector mit einem aktuell ausgeführten OTLP-Empfänger verfügen. 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();
    

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.

Häufig gestellte Fragen

Dieser Abschnitt enthält Antworten auf häufig gestellte Fragen.

Was ist OpenTelemetry?

Es handelt sich um einen neuen Open-Source-Standard für Einblicke. Weitere Informationen finden Sie unter OpenTelemetry.

Warum investiert Microsoft Azure Monitor in OpenTelemetry?

Microsoft gehört zu den Unternehmen, die den größten Beitrag zu OpenTelemetry leisten.

Die wichtigsten Wertversprechen von OpenTelemetry sind, dass es anbieterneutral ist und über einheitliche APIs und SDKs für alle Sprachen verfügt.

Wir glauben, dass OpenTelemetry im Laufe der Zeit Azure Monitor-Kunden ermöglichen wird, auch Anwendungen zu überwachen, die in anderen als den von uns unterstützten Sprachen geschrieben wurden. Außerdem werden die Datentypen erweitert, die Sie über einen umfangreichen Satz von Instrumentierungsbibliotheken erfassen können. Darüber hinaus sind OpenTelemetry-SDKs tendenziell im großen Stil leistungsstärker als ihre Vorgänger, die Application Insights-SDKs.

Darüber hinaus ist OpenTelemetry an der Microsoft-Strategie zur Förderung von Open Source ausgerichtet.

Wie ist der Status von OpenTelemetry?

Siehe OpenTelemetry Status.

Was ist die OpenTelemetry-Distribution von Azure Monitor?

Sie können es sich als dünnen Wrapper vorstellen, der alle OpenTelemetry-Komponenten für eine erstklassige Erfahrung in Azure bündelt. Dieser Wrapper wird auch als Verteilung in OpenTelemetry bezeichnet.

Warum sollte ich die OpenTelemetry-Distribution von Azure Monitor verwenden?

Die Verwendung der OpenTelemetry-Distribution von Azure Monitor hat gegenüber der nativen OpenTelemetry aus der Community mehrere Vorteile:

Im Sinne von OpenTelemetry haben wir die Distribution so konzipiert, dass sie offen und erweiterbar ist. Sie können beispielsweise Folgendes tun:

  • Ein OpenTelemetry Protocol (OTLP)-Exporter und gleichzeitiges Senden an ein zweites Ziel
  • Andere Instrumentierungsbibliotheken, die nicht in der Distribution enthalten sind

Da die Distro eine OpenTelemetry-Verteilung bereitstellt, unterstützt die Distro alles, was von OpenTelemetry unterstützt wird. Sie können beispielsweise weitere Telemetrieprozessoren, Exporteure oder Instrumentierungsbibliotheken hinzufügen, wenn OpenTelemetry sie unterstützt.

Hinweis

Die Distro legt den Sampler auf einen benutzerdefinierten Sampler mit fester Rate für Application Insights fest. Sie können dies in einen anderen Sampler ändern, dies kann jedoch einige der enthaltenen Funktionen von Distro deaktivieren. Weitere Informationen zum unterstützten Sampler finden Sie im Abschnitt Aktivieren des Samplings von Konfigurieren von Azure Monitor OpenTelemetry.

Für Sprachen ohne einen unterstützten eigenständigen OpenTelemetry-Exporter ist der Azure Monitor OpenTelemetry Distro die einzige derzeit unterstützte Methode zur Verwendung von OpenTelemetry mit Azure Monitor. Für Sprachen mit einem unterstützten eigenständigen OpenTelemetry-Exporter haben Sie je nach Telemetrieszenario die Möglichkeit, entweder den Azure Monitor OpenTelemetry Distro oder den entsprechenden eigenständigen OpenTelemetry-Exporter zu verwenden. Weitere Informationen finden Sie unter Wann sollte ich den OpenTelemetry-Exporter von Azure Monitor verwenden?.

Wie kann ich die OpenTelemetry-Distribution von Azure Monitor testen?

Sehen Sie sich unsere Aktivierungsdokumentation für .NET, Java, JavaScript (Node.js) und Python an.

Sollte ich OpenTelemetry oder das Application Insights-SDK verwenden?

Wir empfehlen die Verwendung der OpenTelemetry-Distribution, es sei denn, Sie benötigen ein Feature, das nur mit formaler Unterstützung im Application Insights-SDK verfügbar ist.

Wenn OpenTelemetry jetzt eingeführt wird, wird verhindert, dass zu einem späteren Zeitpunkt migriert werden muss.

Wann sollte ich den OpenTelemetry-Exporter von Azure Monitor verwenden?

Für ASP.NET Core, Java, Node.js und Python empfehlen wir die Verwendung der Azure Monitor OpenTelemetry Distro. Es ist nur eine Codezeile, um loszulegen.

Für alle anderen .NET-Szenarien, einschließlich klassischem ASP.NET, Konsolenanwendungen usw., empfehlen wir die Verwendung des .NET Azure Monitor OpenTelemetry-Exporters: Azure.Monitor.OpenTelemetry.Exporter.

Für komplexere Python-Telemetrieszenarien, die eine erweiterte Konfiguration erfordern, empfehlen wir die Verwendung des Python Azure Monitor OpenTelemetry-Exporters.

Wie lautet der aktuelle Releasestatus der Features in der OpenTelemetry-Distribution von Azure Monitor?

Im folgenden Diagramm ist die Unterstützung der OpenTelemetry-Funktion für jede Sprache aufgeschlüsselt.

Funktion .NET Node.js Python Java
Verteilte Ablaufverfolgung
Benutzerdefinierte Metriken
Standardmetriken (Genauigkeit derzeit beeinflusst durch Sampling)
Stichprobenerstellung mit festem Prozentsatz
Offlinespeicher und automatische Wiederholungsversuche
Ausnahmeberichterstattung
Protokollerfassung ⚠️
Benutzerdefinierte Ereignisse ⚠️ ⚠️ ⚠️
Microsoft Entra-Authentifizierung
Livemetriken
Erkennen des Ressourcenkontexts für VM/VMSS und App Service
Erkennen des Ressourcenkontexts für AKS und Functions
Filterung nach Verfügbarkeitstestspanne
Automatisches Auffüllen von Benutzer-ID, authentifizierter Benutzer-ID und Benutzer-IP-Adresse
Manuelles Überschreiben/Festlegen von Vorgangsname, Benutzer-ID oder authentifizierter Benutzer-ID
Adaptive Stichprobenerstellung
Profiler ⚠️
Momentaufnahmedebugger

Schlüssel

Kann OpenTelemetry für Webbrowser verwendet werden?

Ja, aber wir empfehlen es nicht, und Azure unterstützt es nicht. OpenTelemetry JavaScript ist in hohem Maße für Node.js optimiert. Stattdessen wird empfohlen, das Application Insights JavaScript SDK zu verwenden.

Wann können wir damit rechnen, dass das OpenTelemetry SDK für die Verwendung in Webbrowsern verfügbar sein wird?

Für das OpenTelemetry-Web-SDK gibt es keine festgelegte Verfügbarkeitszeitachse. Wir sind wahrscheinlich noch einige Jahre von einem Browser-SDK entfernt, das eine brauchbare Alternative zum Application Insights JavaScript-SDK wäre.

Kann ich OpenTelemetry heute in einem Webbrowser testen?

Die OpenTelemetry Web Sandbox ist ein Fork, mit dem OpenTelemetry in einem Browser funktioniert. Es ist aber noch nicht möglich, Telemetriedaten an Application Insights zu senden. Das SDK definiert keine allgemeinen Clientereignisse.

Wird die Ausführung von Application Insights zusammen mit Agents von Mitbewerbern wie AppDynamics, DataDog und NewRelic unterstützt?

Nein. Wir haben nicht vor, diese Praxis zu testen oder zu unterstützen, obwohl unsere Distributionen es Ihnen ermöglichen, gleichzeitig neben Azure Monitor einen OTLP-Endpunkt zu exportieren.

Kann ich in Produktionsumgebungen die Previewfunktionen verwenden?

Wir raten davon ab. Siehe Ergänzende Nutzungsbedingungen für Microsoft Azure-Vorschauversionen.

Was ist der Unterschied zwischen manueller und automatischer Instrumentierung?

Weitere Informationen finden Sie in der OpenTelemetry-Übersicht.

Kann ich den OpenTelemetry-Collector verwenden?

Einige Kunden verwenden den OpenTelemetry-Collector als Agent-Alternative, obwohl Microsoft einen Agent-basierenden Ansatz für die Anwendungsüberwachung noch nicht offiziell unterstützt. In der Zwischenzeit wurde von der Open-Source-Community ein Azure Monitor-Exporter für den OpenTelemetry-Collector bereitgestellt, der von einigen Kunden zum Senden von Daten an Azure Monitor Application Insights verwendet wird. Dies wird von Microsoft nicht unterstützt.

Worin besteht der Unterschied zwischen OpenCensus und OpenTelemetry?

OpenCensus ist der Vorgänger von OpenTelemetry. Mit der Hilfe von Microsoft entstand OpenTelemetry aus einer Zusammenführung von OpenTracing und OpenCensus als einzelner Einblickstandard für die ganze Welt. Das aktuelle für die Produktion empfohlene Python SDK für Azure Monitor basiert auf OpenCensus. Microsoft hat sich verpflichtet, Azure Monitor auf der Grundlage von OpenTelemetry zu entwickeln.

Problembehandlung

Funktioniert etwas nicht? Sehen Sie sich die Problembehandlungsseite für ASP.NET Core an.

Unterstützung

Wählen Sie eine Registerkarte für die Sprache Ihrer Wahl aus, um Supportoptionen zu ermitteln.

OpenTelemetry-Feedback

So können Sie Feedback geben