Adicionar telemetria ao seu bot
APLICA-SE A: SDK v4
O log de telemetria permite que aplicativos de bot enviem dados de evento para serviços de telemetria, como o Application Insights. A telemetria oferece insights sobre seu bot mostrando quais recursos são mais usados, detecta comportamento indesejado e oferece visibilidade sobre disponibilidade, desempenho e uso.
Este artigo descreve como implementar a telemetria em seu bot usando o Application Insights. Este artigo cobre:
- O código necessário para conectar a telemetria no bot e conectar-se ao Application Insights.
- Como habilitar a telemetria nas caixas de diálogo do bot.
- Como habilitar a telemetria para capturar dados de uso de outros serviços, como serviços de IA do Azure.
- Como visualizar seus dados de telemetria no Application Insights.
Importante
Para um bot regional que pode coletar informações de identificação pessoal (PII) na telemetria, o recurso do Application Insights e o recurso do Bot do Azure devem estar na mesma região com o bot. Se os recursos estiverem em regiões diferentes, a PII poderá deixar a região geográfica do bot.
Pré-requisitos
- O código de exemplo do CoreBot
- O código de exemplo do Application Insights
- Uma assinatura do Microsoft Azure
- Uma chave do Application Insights
- Familiaridade com o Application Insights
- git
Observação
O código de exemplo do Application Insights foi criado com base no código de exemplo do CoreBot. Este artigo guiará você pela modificação do código de exemplo do CoreBot para incorporar a telemetria. Se você estiver acompanhando no Visual Studio, terá o código de exemplo do Application Insights até terminar.
Habilitar a telemetria no bot
Este artigo começa no aplicativo de exemplo CoreBot e adiciona o código necessário para integrar a telemetria a qualquer bot. Isso permitirá que o Application Insights comece a acompanhar as solicitações.
Importante
Se você ainda não configurou sua conta do Application Insights e criou sua chave do Application Insights, faça isso antes de continuar.
Abra o aplicativo de exemplo CoreBot no Visual Studio.
Adicione o pacote NuGet
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
. Para obter mais informações sobre como usar o NuGet, confira Instalar e gerenciar pacotes no Visual Studio:Inclua as instruções a seguir em
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;
Dica
Se você estiver acompanhando atualizando o código de exemplo do CoreBot, observará que a instrução using para
Microsoft.Bot.Builder.Integration.AspNet.Core
já existe no exemplo corebot.Inclua o código a seguir no método
ConfigureServices()
emStartup.cs
. Isso tornará os serviços de telemetria disponíveis para o bot por meio da DI (injeção de dependência):// 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>(); ... }
Dica
Se você estiver acompanhando atualizando o código de exemplo do CoreBot, observará que já
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
existe.Instrua o adaptador a usar o código de middleware que foi adicionado ao método
ConfigureServices()
. Faça isso comAdapterWithErrorHandler.cs
o parâmetro TelemetryInitializerMiddleware telemetryInitializerMiddleware na lista de parâmetros do construtor e aUse(telemetryInitializerMiddleware);
instrução no construtor, conforme mostrado aqui:public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null) : base(configuration, logger) { ... Use(telemetryInitializerMiddleware); }
Você também precisará adicionar
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
à sua lista de instruções using noAdapterWithErrorHandler.cs
.Adicione a chave de instrumentação do Application Insights ao seu arquivo
appsettings.json
. Oappsettings.json
arquivo contém metadados sobre serviços externos que o bot usa durante a execução. Por exemplo, a conexão e os metadados dos serviços de IA do Cosmos DB, do Application Insights e do Azure são armazenados lá. A adição ao arquivoappsettings.json
deve estar neste formato:{ "MicrosoftAppId": "", "MicrosoftAppPassword": "", "ApplicationInsights": { "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } }
Observação
Detalhes sobre como obter a chave de instrumentação do Application Insights podem ser encontrados no artigo Chaves do Application Insights.
Neste ponto, o trabalho preliminar para habilitar a telemetria usando o Application Insights é feito. Você pode executar o bot localmente usando o Emulador e, em seguida, entrar no Application Insights para ver o que está sendo registrado, como tempo de resposta, integridade geral do aplicativo e informações gerais de execução.
Habilitar a telemetria nas caixas de diálogo do bot
Ao adicionar uma nova caixa de diálogo a qualquer ComponentDialog, ela herdará o Microsoft.Bot.Builder.IBotTelemetryClient da caixa de diálogo pai. Por exemplo, no aplicativo de exemplo CoreBot, todas as caixas de diálogo são adicionadas ao MainDialog, que é um ComponentDialog. Depois de definir a propriedade TelemetryClient como MainDialog, todas as caixas de diálogo adicionadas a ela herdarão automaticamente a telemetryClient dela, portanto, ela não precisará ser definida explicitamente ao adicionar caixas de diálogo.
Siga as etapas abaixo para atualizar o exemplo de CoreBot:
Em
MainDialog.cs
, atualize a lista de parâmetros do construtor para incluir o parâmetroIBotTelemetryClient
e, em seguida, defina a propriedade TelemetryClient da MainDialog para esse valor, conforme mostrado no seguinte snippet 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; ... }
Dica
Se estiver acompanhando e atualizando o código de exemplo do CoreBot, você poderá consultar o código de exemplo do Application Insights se tiver problemas.
A telemetria agora é adicionada às caixas de diálogo do bot. Se você executar o bot agora, verá coisas sendo registradas no Application Insights; no entanto, se você tiver alguma tecnologia integrada, como um serviço de IA do Azure, também precisará adicionar o TelemetryClient
a esse código.
Habilitar ou desabilitar o registro em log de informações pessoais e eventos de atividade
Habilitar ou desabilitar o log de atividades
Por padrão, o TelemetryInitializerMiddleware
usará o TelemetryLoggerMiddleware
para registrar a telemetria em log quando o bot enviar/receber atividades. O log de atividades cria logs de eventos personalizados em seu recurso do Application Insights. Se desejar, você poderá desabilitar o log de eventos de atividade definindo logActivityTelemetry
como false no TelemetryInitializerMiddleware
ao registrá-lo em 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 ou desabilitar o registro em log de informações pessoais
Por padrão, se o log de atividades estiver habilitado, algumas propriedades nas atividades de entrada/saída serão excluídas do registro em log, pois provavelmente conterão informações pessoais, como o nome de usuário e o texto da atividade. Você pode optar por incluir essas propriedades em seu log fazendo a alteração a seguir a Startup.cs ao registrar o 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);
});
...
}
Em seguida, veremos o que precisa ser incluído para adicionar a funcionalidade de telemetria às caixas de diálogo. Isso permitirá que você obtenha informações adicionais, tais como quais caixas de diálogo serão executadas, além de estatísticas sobre cada uma delas.
Habilitar a telemetria para capturar dados de uso de outros serviços, tais como o LUIS e o QnA Maker
Observação
O QnA Maker de IA do Azure será desativado em 31 de março de 2025. A partir de 1º de outubro de 2022, você não poderá criar novos recursos ou bases de dados de conhecimento do QnA Maker. Uma versão mais recente da funcionalidade de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure.
Respostas às perguntas personalizadas, um recurso da Linguagem de IA do Azure, é a versão atualizada do serviço QnA Maker. Para obter mais informações sobre o suporte a perguntas e respostas no SDK do Bot Framework, consulte Compreensão da linguagem natural.
Observação
Reconhecimento vocal (LUIS) será desativado em 1º de outubro de 2025. A partir de 1º de abril de 2023, você não poderá criar novos recursos do LUIS. Uma versão mais recente do reconhecimento vocal agora está disponível como parte da Linguagem de IA do Azure.
O CLU (reconhecimento vocal de conversa), um recurso da Linguagem de IA do Azure, é a versão atualizada do LUIS. Para obter mais informações sobre o suporte à compreensão da linguagem no SDK do Bot Framework, consulte Reconhecimento de linguagem natural.
Em seguida, implementaremos a funcionalidade de telemetria em seu serviço LUIS. O serviço LUIS tem o log de telemetria interno disponível, portanto, há pouco que você precisa fazer para começar a obter dados de telemetria do LUIS. Se você estiver interessado em habilitar a telemetria em um bot habilitado para QnA Maker, consulte Adicionar telemetria ao bot do QnA Maker
O parâmetro
IBotTelemetryClient telemetryClient
é necessário no construtorFlightBookingRecognizer
emFlightBookingRecognizer.cs
:public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
Em seguida, habilite o
telemetryClient
quando você criar oFlightBookingRecognizer
LuisRecognizer
no construtor. Faça isso adicionando otelemetryClient
como um novo 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); }
Isso é tudo, agora você deve ter um bot funcional que registra dados de telemetria no Application Insights. Você pode usar o Bot Framework Emulator para executar o bot localmente. Você não deve experienciar nenhuma alteração no comportamento do bot, mas ele estará registrando informações no Application Insights. Interaja com o bot enviando várias mensagens e, na próxima seção, examinaremos os resultados da telemetria no Application Insights.
Para obter informações sobre como testar e depurar o bot, consulte os seguintes artigos:
Visualizar os dados telemétricos no Application Insights
O Application Insights monitora a disponibilidade, o desempenho e o uso do aplicativo de bot, esteja ele hospedado na nuvem ou localmente. Ele usa a poderosa plataforma de análise de dados no Azure Monitor para fornecer insights profundos sobre as operações do aplicativo e diagnosticar erros sem esperar que um usuário os relate. Há algumas maneiras de ver os dados de telemetria coletados pelo Application Insights, duas das principais maneiras são por meio de consultas e do painel.
Consultar os dados telemétricos no Application Insights usando o Kusto Queries
Use esta seção como um ponto de partida para aprender a usar consultas de log no Application Insights. Ela demonstra duas consultas úteis e fornece links para outras documentações com informações adicionais.
Para consultar seus dados
Vá para o Portal do Azure
Para acessar sua página do Application Insights, selecione Monitorar, aplicativos e localize-o lá.
Uma vez no Application Insights, selecione Logs (Análise).
Isso abrirá a janela Consulta. Insira a consulta a seguir e selecione Executar:
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
Isso retornará o percentual de caixas de diálogo em cascata que são executados até a conclusão.
Dica
Você pode fixar qualquer consulta no dashboard do Application Insights selecionando o botão no canto superior direito da folha Logs (Análise). Basta selecionar o painel ao qual você deseja que ele seja fixado e ele estará disponível na próxima vez que você visitar esse painel.
O painel do Application Insights
Sempre que você criar um recurso do Application Insights no Azure, um painel será automaticamente criado e associado a ele. Você pode ver esse painel selecionando o botão na parte superior da sua folha do Application Insights, rotulado Painel de Aplicativo.
Como alternativa, para exibir os dados, acesse o portal do Azure. Selecione Painel à esquerda e, em seguida, selecione o dashboard desejado na lista suspensa.
Lá, você verá algumas informações padrão sobre o desempenho do bot e quaisquer consultas adicionais que tenha fixado ao seu painel.