Schreiben von Code zum Verfolgen von Anforderungen mit Application Insights

Application Insights muss Anforderungen für Ihre Anwendung nachverfolgen, um Profile für Ihre Anwendung auf der Seite Leistung im Azure-Portal bereitzustellen. Bei Anwendungen, die auf bereits instrumentierten Frameworks (wie ASP.NET und ASP.NET Core) erstellt wurden, kann Application Insights Anforderungen automatisch nachverfolgen.

Für andere Anwendungen (wie Azure Cloud Services-Workerrollen und zustandslose Azure Service Fabric-APIs) müssen Sie Anforderungen mit Code nachverfolgen, der Application Insights mitteilt, wo Ihre Anforderungen beginnen und enden. Die Telemetrie der Anforderung wird dann an Application Insights gesendet, die Sie auf der Seite Leistung einsehen können. Für diese Anforderungen werden Profile gesammelt.

So verfolgen Sie Anforderungen manuell nach

  1. Fügen Sie den folgenden Code zu einem frühen Zeitpunkt der Anwendungslebensdauer hinzu:

    using Microsoft.ApplicationInsights.Extensibility;
    ...
    // Replace with your own Application Insights instrumentation key.
    TelemetryConfiguration.Active.InstrumentationKey = "00000000-0000-0000-0000-000000000000";
    

    Weitere Informationen zu dieser globalen Konfiguration des Instrumentierungsschlüssels finden Sie unter Verwenden von Service Fabric mit Application Insights.

  2. Schließen Sie zu instrumentierende Codepassagen in eine StartOperation<RequestTelemetry>using-Anweisung ein, wie im folgenden Beispiel gezeigt:

    using Microsoft.ApplicationInsights;
    using Microsoft.ApplicationInsights.DataContracts;
    ...
    var client = new TelemetryClient();
    ...
    using (var operation = client.StartOperation<RequestTelemetry>("Insert_Your_Custom_Event_Unique_Name"))
    {
      // ... Code I want to profile.
    }
    

    Das Aufrufen von StartOperation<RequestTelemetry> innerhalb eines anderen StartOperation<RequestTelemetry>-Bereichs wird nicht unterstützt. Sie können stattdessen StartOperation<DependencyTelemetry> im geschachtelten Bereich verwenden. Beispiel:

    using (var getDetailsOperation = client.StartOperation<RequestTelemetry>("GetProductDetails"))
    {
    try
    {
      ProductDetail details = new ProductDetail() { Id = productId };
      getDetailsOperation.Telemetry.Properties["ProductId"] = productId.ToString();
    
      // By using DependencyTelemetry, 'GetProductPrice' is correctly linked as part of the 'GetProductDetails' request.
      using (var getPriceOperation = client.StartOperation<DependencyTelemetry>("GetProductPrice"))
      {
          double price = await _priceDataBase.GetAsync(productId);
          if (IsTooCheap(price))
          {
              throw new PriceTooLowException(productId);
          }
          details.Price = price;
      }
    
      // Similarly, note how 'GetProductReviews' doesn't establish another RequestTelemetry.
      using (var getReviewsOperation = client.StartOperation<DependencyTelemetry>("GetProductReviews"))
      {
          details.Reviews = await _reviewDataBase.GetAsync(productId);
      }
    
      getDetailsOperation.Telemetry.Success = true;
      return details;
    }
    catch(Exception ex)
    {
      getDetailsOperation.Telemetry.Success = false;
    
      // This exception gets linked to the 'GetProductDetails' request telemetry.
      client.TrackException(ex);
      throw;
    }
    }
    

Hinweis

Am 31. März 2025 wird der Support für die auf Instrumentierungsschlüsseln basierende Erfassung eingestellt. Die Erfassung von Instrumentierungsschlüsseln funktioniert zwar weiterhin, wir stellen jedoch keine Updates und keinen Support mehr für das Feature bereit. Wechseln Sie zu Verbindungszeichenfolgen, damit Sie neue Funktionen nutzen können.

Nächste Schritte

Problembehandlung beim Application Insights-Profiler