Hinzufügen von Telemetriefunktionen zu Ihrem Bot

GILT FÜR: SDK v4

Mit der Telemetrieprotokollierung können Botanwendungen Ereignisdaten an Telemetriedienste wie Application Insights senden. Telemetriedaten bieten Einblicke in Ihren Bot, indem sie zeigt, welche Features am häufigsten verwendet werden, erkennt unerwünschtes Verhalten und bietet Einblick in Verfügbarkeit, Leistung und Nutzung.

In diesem Artikel wird beschrieben, wie Sie Telemetriedaten mithilfe von Application Insights in Ihrem Bot implementieren. In diesem Artikel wird Folgendes behandelt:

  • Der Code, der erforderlich ist, um Telemetriedaten in Ihrem Bot zu verbinden und eine Verbindung mit Application Insights herzustellen.
  • Aktivieren von Telemetriedaten in den Dialogfeldern Ihres Bots
  • Aktivieren von Telemetriedaten zum Erfassen von Nutzungsdaten aus anderen Diensten, z. B. Azure KI-Diensten
  • Visualisieren Ihrer Telemetriedaten in Application Insights

Wichtig

Bei einem regionalen Bot, der möglicherweise personenbezogene Informationen (PiI) in Telemetriedaten sammelt, sollten 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, verlassen die PII möglicherweise die geografische Region des Bots.

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, erhalten Sie den Application Insights-Beispielcode, sobald Sie fertig sind.

Aktivieren von Telemetriedaten in Ihrem Bot

Dieser Artikel beginnt mit der CoreBot-Beispiel-App und fügt den Code hinzu, der zum Integrieren von Telemetriedaten in jeden 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. Sie müssen auch 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. Hier werden beispielsweise Verbindungen und Metadaten von Cosmos DB, Application Insights und Azure AI-Diensten 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 sind die Vorarbeiten zum Aktivieren von Telemetriedaten mithilfe von Application Insights abgeschlossen. Sie können Ihren Bot lokal mit dem Emulator ausführen und dann in Application Insights nachsehen, was protokolliert wird, z. B. Antwortzeit, allgemeine App-Integrität und allgemeine Ausführungsinformationen.

Aktivieren von Telemetriedaten 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. Beispielsweise werden in der CoreBot-Beispielanwendung 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 Dialogfelder, die ihr hinzugefügt werden, automatisch den telemetryClient davon, sodass sie 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 den CoreBot-Beispielcode befolgen und aktualisieren, können Sie sich auf den Application Insights-Beispielcode beziehen, wenn Probleme auftreten.

Telemetriedaten werden nun Zu Ihren Botdialogfeldern hinzugefügt. Wenn Sie Ihren Bot jetzt ausführen, sollten in Application Insights Dinge protokolliert werden. Wenn Sie jedoch über eine integrierte Technologie wie einen Azure KI-Dienst verfügen, müssen Sie auch diesem Code hinzufügen TelemetryClient .

Aktivieren oder Deaktivieren der Protokollierung von Aktivitätsereignissen und persönlichen 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 personenbezogener Informationen

Wenn die Aktivitätsprotokollierung aktiviert ist, werden einige Eigenschaften für die eingehenden/ausgehenden Aktivitäten standardmäßig von der Protokollierung ausgeschlossen, da sie wahrscheinlich personenbezogene 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 enthalten sein 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 AI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 1. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken erstellen. Eine neuere Version der Frage- und Antwortfunktion ist jetzt als Teil von Azure AI Language verfügbar.

Benutzerdefinierte Fragen und Antworten, ein Feature von Azure AI Language, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Verstehen von natürlicher Sprache.

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 AI Language verfügbar.

Conversational Language Understanding (CLU), ein Feature von Azure AI Language, ist die aktualisierte Version von LUIS. Weitere Informationen zur Sprachverständnisunterstützung im Bot Framework SDK finden Sie unter Verstehen von natürlicher Sprache.

Als Nächstes implementieren wir Telemetriefunktionen in Ihrem LUIS-Dienst. Der LUIS-Dienst verfügt über integrierte Telemetrieprotokollierung, sodass Sie wenig tun müssen, um Telemetriedaten von LUIS zu erhalten. Wenn Sie Telemetriedaten in einem QnA Maker-fähigen Bot aktivieren möchten, lesen Sie Hinzufügen von Telemetriedaten 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 die telemetryClient , wenn Sie im FlightBookingRecognizerLuisRecognizer -Konstruktor erstellen. Fügen Sie dazu die telemetryClient als 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 überprüfen wir die Telemetrieergebnisse in Application Insights.

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 umfassende Einblicke in die Vorgänge Ihrer Anwendung zu bieten und Fehler zu diagnostizieren, ohne darauf warten zu müssen, dass ein Benutzer sie meldet. 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 zu Ihrer Application Insights-Seite zu wechseln, wählen Sie Überwachen und dann Anwendungen aus, und suchen Sie sie dort.

  3. Wählen Sie in Application Insights Protokolle (Analytics) aus.

    Screenshot mit der Schaltfläche Protokolle (Analytics) auf der Application Insights-Seite eines Bots.

  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 jede Abfrage an Ihre Application Insights-Dashboard anheften, indem Sie die Schaltfläche oben rechts auf dem Blatt Protokolle (Analyse) auswä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: Schaltfläche

Alternativ können Sie zum Anzeigen der Daten zum Azure-Portal wechseln. Wählen Sie auf der linken Seite Dashboard aus, und wählen Sie dann in der Dropdownliste die gewünschte Dashboard 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