Freigeben über


Hinzufügen von Telemetriedaten zu Ihrem Bot

GILT FÜR: SDK v4

Die Telemetrieprotokollierung ermöglicht Bot-Anwendungen das Senden von Ereignisdaten an Telemetriedienste wie Application Insights. Telemetrie bietet Einblicke in Ihren Bot, indem gezeigt wird, welche Features am häufigsten verwendet werden, unerwünschtes Verhalten erkennt und Einblicke in Verfügbarkeit, Leistung und Nutzung bietet.

In diesem Artikel wird beschrieben, wie Telemetrie mithilfe von Application Insights in Ihrem Bot implementiert wird. In diesem Artikel wird Folgendes behandelt:

  • Der Code, der erforderlich ist, um Telemetrie in Ihrem Bot zu verknüpfen und eine Verbindung mit Application Insights herzustellen.
  • So aktivieren Sie Telemetrie in den Dialogen Ihres Bots.
  • Aktivieren der Telemetrie zum Erfassen von Nutzungsdaten aus anderen Diensten, z. B. Azure AI-Dienste.
  • So visualisieren Sie Ihre Telemetriedaten in Application Insights.

Wichtig

Bei einem regionalen Bot, der personenbezogene Informationen (PII) in Telemetrie sammeln kann, sollte sich Ihre Application Insights-Ressource und Ihre Azure Bot-Ressource in derselben Region wie der Bot befinden. Wenn sich die Ressourcen in verschiedenen Regionen befinden, kann die PII die geografische Region des Bots verlassen.

Voraussetzungen

Hinweis

Der Application Insights-Beispielcode baut auf dem CoreBot-Beispielcode auf. In diesem Artikel wird Schritt für Schritt beschrieben, wie Sie den CoreBot-Beispielcode ändern, um Telemetriedaten einzubinden. Wenn Sie in Visual Studio folgen, haben Sie den Application Insights-Beispielcode nach Abschluss des Vorgangs.

Aktivieren von Telemetrie in Ihrem Bot

Dieser Artikel beginnt mit der CoreBot-Beispiel-App und fügt den Code hinzu, der zum Integrieren von Telemetrie in einen beliebigen Bot erforderlich ist. Application Insights kann dann mit dem Nachverfolgen von Anforderungen beginnen.

Wichtig

Wenn Sie Ihr Application Insights-Konto nicht eingerichtet und Ihren Application Insights-Schlüssel erstellt haben, führen Sie dies aus, bevor Sie fortfahren.

  1. Öffnen Sie die CoreBot-Beispiel-App in Visual Studio.

  2. Fügen Sie das NuGet-Paket Microsoft.Bot.Builder.Integration.ApplicationInsights.Core hinzu. Weitere Informationen zur Verwendung von NuGet finden Sie unter Installieren und Verwalten von Paketen in Visual Studio mit dem NuGet-Paket-Manager.

  3. Fügen Sie die folgenden Anweisungen in Startup.cs ein:

    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.Bot.Builder.ApplicationInsights;
    using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
    using Microsoft.Bot.Builder.Integration.AspNet.Core;
    

    Tipp

    Wenn Sie den CoreBot-Beispielcode aktualisieren, werden Sie feststellen, dass die using-Anweisung für Microsoft.Bot.Builder.Integration.AspNet.Core bereits im CoreBot-Beispiel vorhanden ist.

  4. Fügen Sie in Startup.cs den folgenden Code in der ConfigureServices()-Methode ein. So werden die Telemetriedienste per Abhängigkeitsinjektion für Ihren Bot verfügbar gemacht:

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
            // Create the Bot Framework Adapter with error handling enabled.
            services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
    
            // Add Application Insights services into service collection
            services.AddApplicationInsightsTelemetry();
    
            // Create the telemetry client.
            services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>();
    
            // Add telemetry initializer that will set the correlation context for all telemetry items.
            services.AddSingleton<ITelemetryInitializer, OperationCorrelationTelemetryInitializer>();
    
            // Add telemetry initializer that sets the user ID and session ID (in addition to other bot-specific properties such as activity ID)
            services.AddSingleton<ITelemetryInitializer, TelemetryBotIdInitializer>();
    
            // Create the telemetry middleware to initialize telemetry gathering
            services.AddSingleton<TelemetryInitializerMiddleware>();
    
            // Create the telemetry middleware (used by the telemetry initializer) to track conversation events
            services.AddSingleton<TelemetryLoggerMiddleware>();
        ...
    }
    

    Tipp

    Wenn Sie den CoreBot-Beispielcode aktualisieren, werden Sie feststellen, dass services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>(); bereits vorhanden ist.

  5. Weisen Sie den Adapter an, den Middleware-Code zu verwenden, der der ConfigureServices()-Methode hinzugefügt wurde. Dies geschieht mit AdapterWithErrorHandler.cs dem Parameter TelemetryInitializerMiddleware telemetryInitializerMiddleware in der Parameterliste des Konstruktors und der Use(telemetryInitializerMiddleware); Anweisung im Konstruktor, wie hier gezeigt:

        public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null)
            : base(configuration, logger)
    {
        ...
        Use(telemetryInitializerMiddleware);
    }
    
  6. Außerdem müssen Sie Ihrer Liste der Using-Anweisungen in AdapterWithErrorHandler.cshinzufügenMicrosoft.Bot.Builder.Integration.ApplicationInsights.Core.

  7. Fügen Sie den Application Insights-Instrumentierungsschlüssel in Ihrer Datei appsettings.json hinzu. Die appsettings.json Datei enthält Metadaten zu externen Diensten, die der Bot während der Ausführung verwendet. So werden beispielsweise Cosmos DB, Application Insights und Azure AI Services-Verbindungen und Metadaten dort gespeichert. Verwenden Sie zum Hinzufügen zur Datei appsettings.json das folgende Format:

    {
        "MicrosoftAppId": "",
        "MicrosoftAppPassword": "",
        "ApplicationInsights": {
            "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
    }
    

    Hinweis

    Ausführliche Informationen zum Abrufen des Application Insights-Instrumentierungsschlüssels finden Sie im Artikel zum Thema Application Insights-Schlüssel.

An diesem Punkt erfolgt die vorläufige Arbeit zur Aktivierung der Telemetrie mithilfe von Application Insights. Sie können Ihren Bot lokal mit dem Emulator ausführen und dann in Application Insights wechseln, um zu sehen, was protokolliert wird, z. B. Antwortzeit, allgemeine App-Integrität und allgemeine Ausführungsinformationen.

Aktivieren der Telemetrie in den Dialogfeldern Ihres Bots

Beim Hinzufügen eines neuen Dialogs zu einem ComponentDialog-Element erbt dieser das Microsoft.Bot.Builder.IBotTelemetryClient-Element des übergeordneten Dialogs. In der CoreBot-Beispielanwendung werden beispielsweise alle Dialogfelder dem MainDialog hinzugefügt, bei dem es sich um einen ComponentDialog handelt. Nachdem Sie die TelemetryClient-Eigenschaft auf "MainDialog" festgelegt haben, erben alle darin hinzugefügten Dialogfelder automatisch den Telemetrieclient, sodass er beim Hinzufügen von Dialogfeldern nicht explizit festgelegt werden muss.

Führen Sie die folgenden Schritte aus, um Ihr CoreBot-Beispiel zu aktualisieren:

  1. Aktualisieren Sie in MainDialog.cs die Parameterliste des Konstruktors, um den Parameter IBotTelemetryClient einzuschließen. Legen Sie dann die TelemetryClient-Eigenschaft von MainDialog wie im folgenden Codeausschnitt gezeigt auf diesen Wert fest:

    public MainDialog(IConfiguration configuration, ILogger<MainDialog> logger, IBotTelemetryClient telemetryClient)
        : base(nameof(MainDialog))
    {
        // Set the telemetry client for this and all child dialogs.
        this.TelemetryClient = telemetryClient;
        ...
    }
    

Tipp

Wenn Sie dem CoreBot-Beispielcode folgen und aktualisieren, können Sie sich auf den Application Insights-Beispielcode beziehen, wenn Probleme auftreten.

Telemetrie wird nun zu Ihren Bot-Dialogfeldern hinzugefügt. Wenn Sie Ihren Bot jetzt ausführen, sollten Sie sehen, was in Application Insights protokolliert wird. Wenn Sie jedoch über integrierte Technologien wie einen Azure AI-Dienst verfügen, müssen Sie diesen TelemetryClient Code ebenfalls hinzufügen.

Aktivieren oder Deaktivieren des Aktivitätsereignisses und der Protokollierung persönlicher Informationen

Aktivieren oder Deaktivieren der Aktivitätsprotokollierung

Standardmäßig verwendet TelemetryInitializerMiddleware das TelemetryLoggerMiddleware-Element, um Telemetriedaten zu protokollieren, wenn Ihr Bot Aktivitäten sendet bzw. empfängt. Bei der Protokollierung von Aktivitäten werden in Ihrer Application Insights-Ressource benutzerdefinierte Ereignisprotokolle erstellt. Wenn Sie möchten, können Sie die Aktivitätsereignisprotokollierung deaktivieren, indem Sie bei der TelemetryInitializerMiddleware Registrierung in Startup.cs auf "false" festlegenlogActivityTelemetry.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryInitializerMiddleware>(sp =>
            {
                var loggerMiddleware = sp.GetService<TelemetryLoggerMiddleware>();
                return new TelemetryInitializerMiddleware(loggerMiddleware, logActivityTelemetry: false);
            });
    ...
}

Aktivieren oder Deaktivieren der Protokollierung von persönlichen Informationen

Wenn die Aktivitätsprotokollierung aktiviert ist, werden einige Eigenschaften für eingehende/ausgehende Aktivitäten von der Protokollierung ausgeschlossen, da sie wahrscheinlich persönliche Informationen enthalten, z. B. Benutzername und Aktivitätstext. Sie können diese Eigenschaften auch in Ihre Protokollierung einschließen, indem Sie beim Registrieren von TelemetryLoggerMiddleware die folgende Änderung an Startup.cs vornehmen.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryLoggerMiddleware>(sp =>
            {
                var telemetryClient = sp.GetService<IBotTelemetryClient>();
                return new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true);
            });
    ...
}

Als Nächstes sehen wir, was einbezogen werden muss, um den Dialogfeldern Telemetriefunktionen hinzuzufügen. Sie können dann zusätzliche Informationen erhalten, z. B. zu den ausgeführten Dialogen und zugehörigen Statistiken.

Ermöglichen Sie für die Telemetriefunktion die Erfassung von Nutzungsdaten anderer Dienste wie LUIS und QnA Maker.

Hinweis

Azure KI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 01. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken mehr erstellen. Eine neuere Version der Funktionalität „Fragen und Antworten“ ist jetzt als Teil von Azure KI Language verfügbar.

Benutzerdefiniertes Fragen und Antworten, eine Azure KI Language-Funktion, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Natürliches Sprachverständnis.

Hinweis

Language Understanding (LUIS) wird am 1. Oktober 2025 eingestellt. Ab dem 1. April 2023 können Sie keine neuen LUIS-Ressourcen erstellen. Eine neuere Version von Language Understanding ist jetzt als Teil von Azure KI Language verfügbar.

Conversational Language Understanding (CLU), ein Feature von Azure KI Language, ist die aktualisierte Version von LUIS. Weitere Informationen zu Language Understanding im Bot Framework-SDK finden Sie unter Natürliches Sprachverständnis.

Als Nächstes implementieren wir Telemetriefunktionen in Ihrem LUIS-Dienst. Der LUIS-Dienst verfügt über integrierte Telemetrieprotokollierung, sodass sie nur wenig tun müssen, um telemetriedaten von LUIS zu erhalten. Wenn Sie an der Aktivierung von Telemetrie in einem aktivierten QnA Maker-Bot interessiert sind, lesen Sie " Hinzufügen von Telemetrie zu Ihrem QnA Maker-Bot"

  1. Der Parameter IBotTelemetryClient telemetryClient ist im Konstruktor FlightBookingRecognizer in FlightBookingRecognizer.cs erforderlich:

    public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
    
  2. Aktivieren Sie als Nächstes, telemetryClient wenn Sie den FlightBookingRecognizer Konstruktor erstellenLuisRecognizer. Fügen Sie dazu die telemetryClient neue LuisRecognizerOption hinzu:

    if (luisIsConfigured)
    {
        var luisApplication = new LuisApplication(
            configuration["LuisAppId"],
            configuration["LuisAPIKey"],
            "https://" + configuration["LuisAPIHostName"]);
    
        // Set the recognizer options depending on which endpoint version you want to use.
        var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
        {
            TelemetryClient = telemetryClient,
        };
        _recognizer = new LuisRecognizer(recognizerOptions);
    }
    

Das ist alles. Sie sollten nun über einen funktionierenden Bot verfügen, für den Telemetriedaten in Application Insights protokolliert werden. Sie können den Bot Framework Emulator nutzen, um Ihren Bot lokal auszuführen. Das Verhalten des Bots sollte sich nicht ändern, aber Informationen werden nun in Application Insights protokolliert. Interagieren Sie mit dem Bot, indem Sie mehrere Nachrichten senden und im nächsten Abschnitt die Telemetrieergebnisse in Application Insights überprüfen.

Informationen zum Testen und Debuggen Ihres Bots finden Sie in den folgenden Artikeln:

Visualisieren Ihrer Telemetriedaten in Application Insights

Application Insights überwacht die Verfügbarkeit, Leistung und Nutzung Ihrer Botanwendungen unabhängig davon, ob diese in der Cloud oder lokal gehostet werden. Es verwendet die leistungsstarke Datenanalyseplattform in Azure Monitor, um Ihnen tiefe Einblicke in die Vorgänge Ihrer Anwendung zu bieten und Fehler zu diagnostizieren, ohne darauf zu warten, dass ein Benutzer sie melden kann. Es gibt mehrere Möglichkeiten, die mit Application Insights erfassten Telemetriedaten anzuzeigen. Die beiden wichtigsten Methoden sind die Verwendung von Abfragen und das Dashboard.

Abfragen von Telemetriedaten in Application Insights mit Kusto-Abfragen

Verwenden Sie diesen Abschnitt als Ausgangspunkt, um zu erfahren, wie Sie Protokollabfragen in Application Insights verwenden. Es werden zwei nützliche Abfragen demonstriert, und es sind Links zu anderer Dokumentation mit weiteren Informationen vorhanden.

Abfragen Ihrer Daten

  1. Navigieren Sie zum Azure-Portal.

  2. Um zur Seite "Application Insights" zu wechseln, wählen Sie "Überwachen" und dann " Anwendungen" aus, und suchen Sie sie dort.

  3. Wählen Sie einmal in Ihren Application Insights Protokolle (Analyse) aus.

    Screenshot mit der Schaltfläche

  4. Das Abfragefenster wird angezeigt. Geben Sie die folgende Abfrage ein, und wählen Sie Ausführen:

    customEvents
    | where name=="WaterfallStart"
    | extend DialogId = customDimensions['DialogId']
    | extend InstanceId = tostring(customDimensions['InstanceId'])
    | join kind=leftouter (customEvents | where name=="WaterfallComplete" | extend InstanceId = tostring(customDimensions['InstanceId'])) on InstanceId
    | summarize starts=countif(name=='WaterfallStart'), completes=countif(name1=='WaterfallComplete') by bin(timestamp, 1d), tostring(DialogId)
    | project Percentage=max_of(0.0, completes * 1.0 / starts), timestamp, tostring(DialogId)
    | render timechart
    
  5. Der Prozentsatz der Wasserfalldialoge, die bis zum Ende ausgeführt werden, wird zurückgegeben.

    Beispielausgabe der App Insights-Abfrage.

Tipp

Sie können Abfragen in Ihrem Application Insights-Dashboard anheften, indem Sie die Schaltfläche oben rechts auf dem Blatt Protokolle (Analytics) wählen. Wählen Sie einfach das Dashboard aus, in dem die Abfrage angeheftet werden soll. Sie ist dann beim nächsten Zugriff auf das Dashboard verfügbar.

Application Insights-Dashboard

Bei jeder Erstellung einer Application Insights-Ressource in Azure wird automatisch ein neues Dashboard erstellt und zugeordnet. Sie können dieses Dashboard anzeigen, indem Sie die Schaltfläche oben auf dem Application Insights-Blatt Anwendungsdashboard wählen.

Screenshot mit der Schaltfläche

Alternativ können Sie zum Anzeigen der Daten zum Azure-Portal wechseln. Wählen Sie das Dashboard auf der linken Seite aus, und wählen Sie dann das gewünschte Dashboard aus der Dropdownliste aus.

Es werden einige Standardinformationen zur Leistung Ihres Bots sowie alle zusätzlichen Abfragen angezeigt, die Sie in Ihrem Dashboard angeheftet haben.

Zusätzliche Informationen