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
- 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, 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.
Ö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); }
Außerdem müssen Sie 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. So werden beispielsweise Cosmos DB, Application Insights und Azure AI Services-Verbindungen und Metadaten dort 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 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:
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 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"
Der Parameter
IBotTelemetryClient telemetryClient
ist im KonstruktorFlightBookingRecognizer
inFlightBookingRecognizer.cs
erforderlich:public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
Aktivieren Sie als Nächstes,
telemetryClient
wenn Sie denFlightBookingRecognizer
Konstruktor erstellenLuisRecognizer
. Fügen Sie dazu dietelemetryClient
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
Um zur Seite "Application Insights" zu wechseln, wählen Sie "Überwachen" und dann " Anwendungen" aus, und suchen Sie sie dort.
Wählen Sie einmal in Ihren Application Insights Protokolle (Analyse) 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 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.
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.