Lägga till telemetri till din robot
GÄLLER FÖR: SDK v4
Med telemetriloggning kan robotprogram skicka händelsedata till telemetritjänster som Application Insights. Telemetri ger insikter om din robot genom att visa vilka funktioner som används mest, identifierar oönskat beteende och ger insyn i tillgänglighet, prestanda och användning.
Den här artikeln beskriver hur du implementerar telemetri i din robot med Hjälp av Application Insights. Denna artikel omfattar:
- Den kod som krävs för att koppla upp telemetri i roboten och ansluta till Application Insights.
- Så här aktiverar du telemetri i robotens dialogrutor.
- Så här aktiverar du telemetri för att samla in användningsdata från andra tjänster, till exempel Azure AI-tjänster.
- Visualisera dina telemetridata i Application Insights.
Viktigt!
För en regional robot som kan samla in personligt identifierbar information (PII) i telemetri bör din Application Insights-resurs och din Azure Bot-resurs finnas i samma region som roboten. Om resurserna finns i olika regioner kan PII lämna robotens geografiska region.
Förutsättningar
- CoreBot-exempelkoden
- Application Insights-exempelkoden
- En prenumeration på Microsoft Azure
- En Application Insights-nyckel
- Kunskaper om Application Insights
- git
Kommentar
Application Insights-exempelkoden byggdes ovanpå CoreBot-exempelkoden. Den här artikeln beskriver hur du ändrar CoreBot-exempelkoden så att den innehåller telemetri. Om du följer med i Visual Studio har du Application Insights-exempelkoden när du är klar.
Aktivera telemetri i roboten
Den här artikeln börjar från CoreBot-exempelappen och lägger till den kod som krävs för att integrera telemetri i alla robotar. På så sätt kan Application Insights börja spåra begäranden.
Viktigt!
Om du inte har konfigurerat ditt Application Insights-konto och skapat Application Insights-nyckeln gör du det innan du fortsätter.
Lägg till NuGet-paketet
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
. Mer information om hur du använder NuGet finns i Installera och hantera paket i Visual Studio:Inkludera följande instruktioner i
Startup.cs
:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Bot.Builder.ApplicationInsights; using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core; using Microsoft.Bot.Builder.Integration.AspNet.Core;
Dricks
Om du följer med genom att uppdatera CoreBot-exempelkoden ser du att instruktionen using för
Microsoft.Bot.Builder.Integration.AspNet.Core
redan finns i CoreBot-exemplet.Inkludera följande kod i
ConfigureServices()
-metoden iStartup.cs
. Detta gör telemetritjänster tillgängliga för din robot via beroendeinmatning (DI):// 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>(); ... }
Dricks
Om du följer med genom att uppdatera CoreBot-exempelkoden ser du att den
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
redan finns.Instruera adaptern att använda mellanprogramskoden som lades till i
ConfigureServices()
metoden. Du gör detta medAdapterWithErrorHandler.cs
parametern TelemetryInitializerMiddleware telemetryInitializerMiddleware i konstruktorns parameterlista och -instruktionenUse(telemetryInitializerMiddleware);
i konstruktorn enligt följande:public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null) : base(configuration, logger) { ... Use(telemetryInitializerMiddleware); }
Du måste också lägga
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
till i din lista över att använda -instruktioner iAdapterWithErrorHandler.cs
.Lägg till Application Insights-instrumentationsnyckeln i
appsettings.json
filen. Filenappsettings.json
innehåller metadata om externa tjänster som roboten använder när den körs. Till exempel lagras anslutning och metadata för Cosmos DB, Application Insights och Azure AI-tjänster där. Tillägget tillappsettings.json
filen måste vara i det här formatet:{ "MicrosoftAppId": "", "MicrosoftAppPassword": "", "ApplicationInsights": { "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } }
Kommentar
Information om hur du hämtar Application Insights-instrumentationsnyckeln finns i artikeln Application Insights-nycklar.
Nu utförs det preliminära arbetet med att aktivera telemetri med Application Insights. Du kan köra roboten lokalt med emulatorn och sedan gå till Application Insights för att se vad som loggas, till exempel svarstid, övergripande apphälsa och allmän information om körning.
Aktivera telemetri i robotens dialogrutor
När du lägger till en ny dialogruta i valfri ComponentDialog ärver den Microsoft.Bot.Builder.IBotTelemetryClient för den överordnade dialogrutan. I Exempelprogrammet CoreBot läggs till exempel alla dialogrutor till i MainDialog, som är en ComponentDialog. När du har angett egenskapen TelemetryClient till MainDialog ärver alla dialogrutor som läggs till automatiskt telemetriKlienten från den, så den behöver inte anges explicit när du lägger till dialogrutor.
Följ stegen nedan för att uppdatera ditt CoreBot-exempel:
I
MainDialog.cs
uppdaterar du konstruktorns parameterlista så att den innehåller parameternIBotTelemetryClient
och anger sedan egenskapen TelemetryClient för MainDialog till det värdet enligt följande kodfragment: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; ... }
Dricks
Om du följer med och uppdaterar CoreBot-exempelkoden kan du läsa Application Insights-exempelkoden om du stöter på problem.
Telemetri läggs nu till i dina robotdialogrutor. Om du kör roboten nu bör du se att saker loggas i Application Insights. Men om du har någon integrerad teknik, till exempel en Azure AI-tjänst, måste du även lägga till koden i den TelemetryClient
koden.
Aktivera eller inaktivera aktivitetshändelse och loggning av personlig information
Aktivera eller inaktivera aktivitetsloggning
Som standard TelemetryInitializerMiddleware
använder TelemetryLoggerMiddleware
den för att logga telemetri när din robot skickar/tar emot aktiviteter. Aktivitetsloggning skapar anpassade händelseloggar i Application Insights-resursen. Om du vill kan du inaktivera aktivitetshändelseloggning genom att ange logActivityTelemetry
false på TelemetryInitializerMiddleware
när du registrerar den i Startup.cs.
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);
});
...
}
Aktivera eller inaktivera loggning av personlig information
Om aktivitetsloggning är aktiverad utesluts som standard vissa egenskaper för inkommande/utgående aktiviteter från loggning eftersom de sannolikt kommer att innehålla personlig information, till exempel användarnamn och aktivitetstext. Du kan välja att inkludera dessa egenskaper i loggningen genom att göra följande ändring i Startup.cs när du TelemetryLoggerMiddleware
registrerar .
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);
});
...
}
Nu ska vi se vad som behöver ingå för att lägga till telemetrifunktioner i dialogrutorna. På så sätt kan du få ytterligare information, till exempel vilka dialogrutor som körs och statistik om var och en.
Aktivera telemetri för att samla in användningsdata från andra tjänster som LUIS och QnA Maker
Kommentar
Azure AI QnA Maker dras tillbaka den 31 mars 2025. Från och med den 1 oktober 2022 kan du inte skapa nya QnA Maker resurser eller kunskapsbaser för 2022. En nyare version av fråge- och svarsfunktionen är nu tillgänglig som en del av Azure AI Language.
Svar på anpassade frågor, en funktion i Azure AI Language, är den uppdaterade versionen av QnA Maker-tjänsten. Mer information om stöd för frågor och svar i Bot Framework SDK finns i Förstå naturligt språk.
Kommentar
Language Understanding (LUIS) dras tillbaka den 1 oktober 2025. Från och med den 1 april 2023 kan du inte skapa nya LUIS-resurser. En nyare version av språktolkning är nu tillgänglig som en del av Azure AI Language.
Conversational Language Understanding (CLU), en funktion i Azure AI Language, är den uppdaterade versionen av LUIS. Mer information om stöd för språktolkning i Bot Framework SDK finns i Förstå naturligt språk.
Vi implementerar sedan telemetrifunktioner i LUIS-tjänsten. LUIS-tjänsten har inbyggd telemetriloggning tillgänglig så det finns inte mycket du behöver göra för att börja hämta telemetridata från LUIS. Om du är intresserad av att aktivera telemetri i en QnA Maker-aktiverad robot kan du läsa Lägga till telemetri i din QnA Maker-robot
Parametern
IBotTelemetryClient telemetryClient
krävs iFlightBookingRecognizer
konstruktorn iFlightBookingRecognizer.cs
:public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
Aktivera
telemetryClient
sedan när du skapar dinLuisRecognizer
iFlightBookingRecognizer
konstruktorn. Gör detta genom att lägga tilltelemetryClient
som en ny LuisRecognizerOption: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); }
Det är allt, du bör ha en funktionell robot som loggar telemetridata i Application Insights. Du kan använda Bot Framework-emulatorn för att köra roboten lokalt. Du bör inte se några ändringar i robotens beteende, men det kommer att logga in information i Application Insights. Interagera med roboten genom att skicka flera meddelanden och i nästa avsnitt granskar vi telemetriresultaten i Application Insights.
Information om hur du testar och felsöker din robot finns i följande artiklar:
Visualisera dina telemetridata i Application Insights
Application Insights övervakar tillgänglighet, prestanda och användning av ditt robotprogram oavsett om det finns i molnet eller lokalt. Den använder den kraftfulla dataanalysplattformen i Azure Monitor för att ge dig djupgående insikter om programmets åtgärder och diagnostisera fel utan att vänta på att en användare ska rapportera dem. Det finns några sätt att se telemetridata som samlas in av Application Insights, två av de primära sätten är genom frågor och instrumentpanelen.
Köra frågor mot dina telemetridata i Application Insights med Kusto-frågor
Använd det här avsnittet som utgångspunkt för att lära dig hur du använder loggfrågor i Application Insights. Den visar två användbara frågor och innehåller länkar till annan dokumentation med ytterligare information.
Så här frågar du dina data
Gå till Azure Portal
Om du vill gå till sidan Application Insights väljer du Övervaka och sedan Program och hittar den där.
När du är i Application Insights väljer du Loggar (Analys).
Då visas frågefönstret. Ange följande fråga och välj Kör:
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
Detta returnerar procentandelen vattenfallsdialogrutor som körs till slutförande.
Dricks
Du kan fästa valfri fråga på Application Insights-instrumentpanelen genom att välja knappen längst upp till höger på bladet Loggar (analys). Välj bara den instrumentpanel som du vill att den ska fästas på, så blir den tillgänglig nästa gång du besöker instrumentpanelen.
Application Insights-instrumentpanelen
Varje gång du skapar en Application Insights-resurs i Azure skapas och associeras en ny instrumentpanel automatiskt med den. Du kan se instrumentpanelen genom att välja knappen överst på bladet Application Insights med etiketten Programinstrumentpanel.
Du kan också visa data genom att gå till Azure Portal. Välj Instrumentpanel till vänster och välj sedan den instrumentpanel som du vill använda i listrutan.
Där ser du viss standardinformation om robotens prestanda och eventuella ytterligare frågor som du har fäst på instrumentpanelen.