Adición de telemetría al bot
SE APLICA A: SDK v4
El registro de telemetría permite a las aplicaciones de bot enviar datos de eventos a servicios de telemetría, como Application Insights. La telemetría ofrece información sobre el bot mostrando qué características se usan más, detecta el comportamiento no deseado y ofrece visibilidad sobre la disponibilidad, el rendimiento y el uso.
En este artículo se describe cómo implementar la telemetría en el bot mediante Application Insights. En este artículo se describe:
- El código necesario para conectar la telemetría en el bot y conectarse a Application Insights.
- Cómo habilitar la telemetría en los cuadros de diálogo del bot.
- Cómo habilitar la telemetría para capturar datos de uso de otros servicios, como los servicios de Azure AI.
- Visualización de los datos de telemetría en Application Insights.
Importante
Para un bot regional que pueda recopilar información de identificación personal (PII) en la telemetría, el recurso de Application Insights y el recurso de Azure Bot deben estar en la misma región con el bot. Si los recursos están en regiones diferentes, el PII podría dejar la región geográfica del bot.
Requisitos previos
- Código de ejemplo de CoreBot
- Código de ejemplo de Application Insights
- Una suscripción a Microsoft Azure
- Una clave de Application Insights
- Experiencia con Application Insights
- git
Nota:
El código de ejemplo de Application Insights se compiló a partir del código de ejemplo de CoreBot. Este artículo le guía a través de la modificación del código de ejemplo de CoreBot para incorporar datos de telemetría. Si va a seguir en Visual Studio, tendrá el código de ejemplo de Application Insights en el momento en que haya terminado.
Habilitación de la telemetría en el bot
Este artículo comienza desde la aplicación de ejemplo CoreBot y agrega el código necesario para integrar la telemetría en cualquier bot. Esto permitirá a Application Insights empezar a realizar el seguimiento de solicitudes.
Importante
Si no ha configurado la cuenta de Application Insights y ha creado la clave de Application Insights, hála antes de continuar.
Abra la aplicación de ejemplo CoreBot en Visual Studio.
Agregue el paquete NuGet
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
. Para más información sobre el uso de NuGet, consulte Instalación y administración de paquetes en Visual Studio:Incluya las siguientes instrucciones en
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;
Sugerencia
Si va a seguir el código de ejemplo de CoreBot, observará que la instrucción
Microsoft.Bot.Builder.Integration.AspNet.Core
using ya existe en el ejemplo coreBot.Incluya el siguiente código en el método
ConfigureServices()
enStartup.cs
. Esto hará que los servicios de telemetría estén disponibles para su bot a través de la inserción de dependencias (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>(); ... }
Sugerencia
Si va a seguir al actualizar el código de ejemplo de CoreBot, observará que
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
ya existe.Indique al adaptador que use el código de middleware que se agregó al método
ConfigureServices()
. Esto se hace conAdapterWithErrorHandler.cs
el parámetro TelemetryInitializerMiddleware telemetryInitializerMiddleware en la lista de parámetros del constructor y laUse(telemetryInitializerMiddleware);
instrucción en el constructor como se muestra aquí:public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null) : base(configuration, logger) { ... Use(telemetryInitializerMiddleware); }
También deberá agregar
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
a la lista de instrucciones using enAdapterWithErrorHandler.cs
.Agregue la clave de instrumentación de Application Insights a su archivo
appsettings.json
. Elappsettings.json
archivo contiene metadatos sobre los servicios externos que usa el bot mientras se ejecuta. Por ejemplo, la conexión y los metadatos de los servicios de Cosmos DB, Application Insights y Azure AI se almacenan allí. La adición al archivoappsettings.json
debe estar en este formato:{ "MicrosoftAppId": "", "MicrosoftAppPassword": "", "ApplicationInsights": { "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } }
Nota:
Puede encontrar información detallada sobre cómo obtener la clave de instrumentación de Application Insights en el artículo Claves de Application Insights.
En este momento, se realiza el trabajo preliminar para habilitar la telemetría mediante Application Insights. Puede ejecutar el bot localmente mediante el emulador y, a continuación, ir a Application Insights para ver lo que se registra, como el tiempo de respuesta, el estado general de la aplicación y la información de ejecución general.
Habilitación de la telemetría en los cuadros de diálogo del bot
Al agregar un nuevo diálogo a cualquier elemento ComponentDialog, heredará el objeto Microsoft.Bot.Builder.IBotTelemetryClient de su diálogo primario. Por ejemplo, en la aplicación de ejemplo CoreBot, todos los diálogos se agregan a MainDialog, que es componentDialog. Una vez establecida la propiedad TelemetryClient en MainDialog, todos los diálogos agregados a él heredarán automáticamente telemetryClient de él, por lo que no es necesario establecer explícitamente al agregar diálogos.
Siga los pasos que se indican a continuación para actualizar el ejemplo de CoreBot:
En
MainDialog.cs
, actualice la lista de parámetros del constructor para incluir el parámetroIBotTelemetryClient
y, a continuación, establezca la propiedad TelemetryClient de MainDialog en ese valor, tal como se muestra en el siguiente fragmento de código: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; ... }
Sugerencia
Si va a seguir y actualiza el código de ejemplo de CoreBot, puede consultar el código de ejemplo de Application Insights si tiene algún problema.
La telemetría ahora se agrega a los diálogos del bot. Si ejecuta el bot ahora, debería ver las cosas que se registran en Application Insights; Sin embargo, si tiene alguna tecnología integrada, como un servicio de Azure AI, deberá agregar también el TelemetryClient
elemento a ese código.
Habilitar o deshabilitar el registro de eventos de actividad e información personal
Habilitar o deshabilitar el registro de actividad
De forma predeterminada, TelemetryInitializerMiddleware
usará TelemetryLoggerMiddleware
para registrar la telemetría cuando el bot envía o recibe actividades. El registro de actividades crea registros de eventos personalizados en el recurso de Application Insights. Si lo desea, puede deshabilitar el registro de eventos de actividad estableciendo logActivityTelemetry
en false al TelemetryInitializerMiddleware
registrarlo en 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);
});
...
}
Habilitar o deshabilitar el registro de información personal
De forma predeterminada, si el registro de actividad está habilitado, algunas propiedades de las actividades entrantes o salientes se excluyen del registro, ya que es probable que contengan información personal, como el nombre de usuario y el texto de la actividad. Puede optar por incluir estas propiedades en el registro realizando el siguiente cambio en Startup.cs al registrar TelemetryLoggerMiddleware
.
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);
});
...
}
A continuación, veremos lo que debe incluirse para agregar la funcionalidad de telemetría a los diálogos. Esto le permitirá obtener información adicional como, por ejemplo, qué diálogos ejecutar y las estadísticas de cada uno.
Habilitar la telemetría para capturar datos de uso de otros servicios como Luis y QnA Maker
Nota:
Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.
La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.
Nota:
Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.
Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.
A continuación, implementaremos la funcionalidad de telemetría en el servicio luis. El servicio LUIS tiene disponible el registro de telemetría integrado, por lo que es poco necesario hacer para empezar a obtener datos de telemetría de LUIS. Si está interesado en habilitar la telemetría en un bot habilitado para QnA Maker, consulte Incorporación de telemetría al bot de QnA Maker.
El parámetro
IBotTelemetryClient telemetryClient
es necesario en el constructorFlightBookingRecognizer
deFlightBookingRecognizer.cs
:public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
A continuación, habilite cuando
telemetryClient
creeLuisRecognizer
en elFlightBookingRecognizer
constructor . Para ello, agreguetelemetryClient
como nuevo 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); }
En este caso, debe tener un bot funcional que registre los datos de telemetría en Application Insights. Puede usar Bot Framework Emulator para ejecutar el bot localmente. No debería observar ningún cambio en el comportamiento del bot, pero este estará registrando información en Application Insights. Interactúe con el bot mediante el envío de varios mensajes y, en la sección siguiente, revisaremos los resultados de telemetría en Application Insights.
Para más información sobre cómo probar y depurar el bot, puede consultar los siguientes artículos:
Visualización de los datos de telemetría en Application Insights
Application Insights supervisa la disponibilidad, el rendimiento y el uso de la aplicación del bot, tanto si está hospedada en la nube como en un entorno local. Usa la potente plataforma de análisis de datos en Azure Monitor para proporcionarle información detallada sobre las operaciones de la aplicación y diagnosticar errores sin esperar a que un usuario los notifique. Hay varias maneras de ver los datos de telemetría recopilados por Application Insights. Dos de los métodos principales son mediante consultas y a través del panel.
Consulta de los datos de telemetría en Application Insights mediante consultas de Kusto
Utilice esta sección como punto de partida para aprender a usar las consultas de registro en Application Insights. Muestra dos consultas útiles y proporciona vínculos a otra documentación con información adicional.
Para consultar los datos
Vaya a Azure Portal.
Para ir a la página de Application Insights, seleccione Supervisar y, a continuación , Aplicaciones y después busque allí.
Una vez en Application Insights, seleccione Registros (Analytics) .
Se abrirá la ventana de consulta. Escriba la siguiente consulta y seleccione Ejecutar:
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
Esto devolverá el porcentaje de diálogos en cascada que se ejecutan hasta completarse.
Sugerencia
Puede anclar cualquier consulta al panel de Application Insights seleccionando el botón situado en la parte superior derecha de la hoja Registros (Analytics). Simplemente seleccione el panel al que desea anclarlo y estará disponible la próxima vez que visite ese panel.
Panel de Application Insights
Cada vez que cree un recurso de Application Insights en Azure, se creará un nuevo panel y se le asociará automáticamente. Puede ver ese panel seleccionando el botón situado en la parte superior de la hoja de Application Insights, etiquetado como Panel de la aplicación.
Como alternativa, para ver los datos, vaya a Azure Portal. Seleccione Panel a la izquierda y, a continuación, seleccione el panel que desee en la lista desplegable.
Allí puede ver información predeterminada sobre el rendimiento del bot y sobre cualquier consulta adicional que haya anclado al panel.