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
- CoreBot-Beispielcode
- Application Insights-Beispielcode
- Microsoft Azure-Abonnement
- Application Insights-Schlüssel
- Application Insights-Kenntnisse
- git
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.
Öffnen Sie die CoreBot-Beispiel-App in Visual Studio.
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.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.Fügen Sie in
Startup.cs
den folgenden Code in derConfigureServices()
-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.Weisen Sie den Adapter an, den Middleware-Code zu verwenden, der der
ConfigureServices()
-Methode hinzugefügt wurde. Dies geschieht mitAdapterWithErrorHandler.cs
dem Parameter TelemetryInitializerMiddleware telemetryInitializerMiddleware in der Parameterliste des Konstruktors und derUse(telemetryInitializerMiddleware);
-Anweisung im Konstruktor, wie hier gezeigt:public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null) : base(configuration, logger) { ... Use(telemetryInitializerMiddleware); }
Sie müssen auch ihrer Liste der using-Anweisungen in
AdapterWithErrorHandler.cs
hinzufügenMicrosoft.Bot.Builder.Integration.ApplicationInsights.Core
.Fügen Sie den Application Insights-Instrumentierungsschlüssel in Ihrer Datei
appsettings.json
hinzu. Dieappsettings.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 Dateiappsettings.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:
Aktualisieren Sie in
MainDialog.cs
die Parameterliste des Konstruktors, um den ParameterIBotTelemetryClient
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.
Der Parameter
IBotTelemetryClient telemetryClient
ist im KonstruktorFlightBookingRecognizer
inFlightBookingRecognizer.cs
erforderlich:public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
Aktivieren Sie als Nächstes die
telemetryClient
, wenn Sie imFlightBookingRecognizer
LuisRecognizer
-Konstruktor erstellen. Fügen Sie dazu dietelemetryClient
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
Um zu Ihrer Application Insights-Seite zu wechseln, wählen Sie Überwachen und dann Anwendungen aus, und suchen Sie sie dort.
Wählen Sie in Application Insights Protokolle (Analytics) aus.
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
Der Prozentsatz der Wasserfalldialoge, die bis zum Ende ausgeführt werden, wird zurückgegeben.
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.
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.