こんばんは。この記事では、Azure Bot Serviceで作成したボットのテレメトリをApplication Insightsで収集する方法についての記事です。
それではまいります。
Contents
前提
- 今回のBotはAzure Cognitive Service – Languageのカスタム質問応答(QnA Makerの後継)でナレッジベースを公開した流れで作成したものになります。
- その際、Application Insightsを有効化して作成している
- 言語はC#
- コードエディタにはVisual Studio 2022を利用
規定の動きの確認
まず、この状態でどんな情報が収集できるようになっているのか確認しておきます。
Azure Bot Serviceのチャットウィンドウから適当な会話を流して、Application Insightsにどう反映されるか確認してみます。
お、規定でもなんか記録されてる。
レコードをクリックするEnd to Endトランザクションの詳細が確認できる。
リクエスト発生日時やチャネルといった基本的な情報だけみれるようでした。
念のため他のログも漁ってみましたが、このCustom Eventログだけが出力されているようでした。
なんでこのログだけが出力されてるんだ・・?
同じことで悩んでいる人の相談が・・・笑
調べてみたら公式ドキュメントに言及がありました。どうやら想定された動作のようです。
既定では、 は
https://docs.microsoft.com/ja-jp/azure/bot-service/bot-builder-telemetry?view=azure-bot-service-4.0&tabs=csharp#enable-or-disable-activity-event-and-personal-information-loggingTelemetryInitializerMiddleware
、 を使用TelemetryLoggerMiddleware
して、ボットがアクティビティを送信/受信するときにテレメトリをログに記録します。アクティビティ ログでは、Application インサイト リソースにカスタム イベント ログが作成されます。
テレメトリを追加する
Microsoft.Bot.Builder.Integration.ApplicationInsights.Coreパッケージのインストール
最初にMicrosoft.Bot.Builder.Integration.ApplicationInsights.Core NuGetパッケージをインストールする必要があります。
なお、このとき、併せて「更新プログラム」で通知されているパッケージMicrosoft.Bot.Builder.DialogsとMicrosoft.Bot.Builder.Integration.AspNet.Coreのバージョンも更新しておかないと互換性のエラーが出てしまうので注意です。(もしくは、Microsoft.Bot.Builder.Integration.ApplicationInsights.Coreのバージョンを下げてインストールする)
Startup.csのコード変更
startup.csに以下のコードを追加します。
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Bot.Builder.ApplicationInsights;
using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
// 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();
// Add the standard telemetry client
services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>();
// Create the telemetry middleware to track conversation events
services.AddSingleton<TelemetryLoggerMiddleware>();
// Add the telemetry initializer middleware
services.AddSingleton<IMiddleware, TelemetryInitializerMiddleware>();
// 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>();
...
}
AdapterWithErrorHandler.csのコード変更
公式ドキュメントの通り、コードを追加します。
public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger<BotFrameworkHttpAdapter> logger, IMiddleware middleware, ConversationState conversationState = null)
: base(credentialProvider)
{
...
Use(middleware);
}
ローカルでテストする
それでは、ローカルでテストしてみます。ローカルでのテスト用に、appsettings.jsonに必要な情報を設定して、デバッグを開始します。
appsettings.json
上に設定する情報は、BotをデプロイしているApp Serviceのアプリケーション設定から確認できます。
Application InsightsのInstrument KeyはApplication Insightsリソースの概要ブレードから確認できます。
デバッグを開始した後、Bot Emulatorを開いて、エンドポイントURLと、App Id & Passwordを設定して接続します。
するとBotに接続できてチャットのやりとりができるようになります。
この状態で、Application Insightsリソースを確認してみると・・・
!ちゃんとログが流れてくるようになってる!
ログもREQUESTやDependencyなどのログが流れてきてます。
公式ドキュメントには以下のように書いていますので、この段階では”一般的な”実行情報が取得できるようになっているようです。
ボット Emulator を使用してボットをローカルで実行し、Application インサイト に移動して、応答時間、全体的なアプリの正常性、一般的な実行情報など、ログに記録されているデータを確認できます。
https://docs.microsoft.com/ja-jp/azure/bot-service/bot-builder-telemetry-qnamaker?view=azure-bot-service-4.0#add-telemetry-code-to-your-qna-maker-bot
また1点、その代わりに最初にデフォルトで出ていたカスタムイベントログがでなくなっているようでした。何かコードを消したわけではないけどなぜだろう・・・このあたりの動作がよくわからないですが、分かったらまた更新します。
QnA Maker/Language固有のテレメトリを収集する [ うまくいかず]
先ほどまでの手順では、基本的な実行情報の収集ができるようになった状態ですが、ここからはQnA MakerまたはAzure Cognitve Service – Languageのカスタム質問応答固有のテレメトリも収集できるようにしていけるようですのでやってみます。
と、以下のステップがなぜかうまくいかずに躓く。
ステップ2で以下のコードを拡張するとき、ステップ3のコードを追加したとき、CS0246, CS0103エラーが出た・・
public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory, IBotTelemetryClient telemetryClient)
{
...
_telemetryClient = telemetryClient;
}
がんばったらなんとかできるかもしれないですが、公式Doc通りに進めてできないのはおかしい(今回QnA MakerではなくLanguageを使ってるからかな・・?)のと、C#のコーディングの知見がほとんどなかったので、公式ドキュメントにフィードバックを出して見解を待つことにしました・・
またUpdateあれば更新します。
https://github.com/MicrosoftDocs/bot-docs/issues/2193
Application Insights、C#ともに詳しくないと苦しいですね、、、笑 まあ、少しだけ前進したので今日はよしとしよう・・
最後までご覧いただきありがとうございました。
それではまた
コメントを残す