Azure AI 検索ソリューションを監視する
Azure Monitor を使用すると、検索サービスがどの程度適切に使用されているかと、そのパフォーマンスに関する分析情報を得ることができます。 アラートを受信して、問題を事前に知ることもできます。
ここでは、Azure AI 検索で利用できるすべての監視オプションを確認します。 次に、検索ソリューションを管理するために作成できる便利なアラートについて説明します。
Azure Monitor で Azure AI 検索を監視する
Azure AI 検索サービスを作成すると、他に何も設定を行わなくても、現在の検索の待機時間、1 秒あたりのクエリ数、調整されたクエリの割合を確認できます。 このデータは、概要ページの [監視] タブで表示できます。
検索ソリューションで使用しているリソースは、[使用状況] タブでも確認できます。
この基本的な情報は、監視を開始するのに適していますが、他にも構成できるものがあります。 Azure プラットフォームで他のリソースをサポートすることに慣れている場合は、Azure Monitor をすべての Azure リソースに使用できることがおわかりでしょう。
実際、パフォーマンス最適化のユニットで Azure Monitor を有効にする方法は既に確認しています。 その手順に従って、Azure Monitor が Log Analytics でキャプチャされたデータを使用して、診断データの完全なセットを表示できるようにします。
Log Analytics の使用を開始すると、次のログ テーブルのパフォーマンスと診断データにアクセスできるようになります。
- AzureActivity - 検索サービスのスケーリングなど、実行されたタスクが表示されます
- AzureDiagnostics - クエリとインデックス作成のすべての操作
- AzureMetrics - 検索サービスの正常性とパフォーマンスを測定するメトリックに使用されるデータ
メトリックを使用して診断データを視覚的に表示する
グラフの作成は、検索サービスのパフォーマンスを表示する強力な方法です。 検索サービスの [監視] セクションで、[メトリック] を選択します。
ここで、キャプチャされたメトリックのいずれかを選択して追加します。
- DocumentsProcessedCount
- SearchLatency
- SearchQueriesPerSecond
- SkillExecutionCount
- ThrottledSearchQueriesPercentage
たとえば、調整されたクエリの割合に対して検索の待ち時間をプロットして、クエリへの応答が調整の影響を受けるかどうかを確認できます。
検索ソリューション ログに対して Kusto クエリを記述する
Log Analytics を使用すると、キャプチャされたログ データに対して Kusto クエリを記述できます。 このクエリを実行する最も簡単な方法は、[監視] セクションで [ログ] を選択することです。 [ログ] によって、Azure AI 検索ソリューションに自動的にスコープ指定されたクエスト ウィンドウで Log Analytics が開かれます。
上記のクエリを使用すると、最近の操作の一覧と、それが発生した回数を確認できます。
AzureDiagnostics
| summarize count() by OperationName
検索ソリューションの問題を監視および診断するのに役立つクエリを次に示します。
クエリ
Kusto
実行時間の長いクエリ
AzureDiagnostics
| project OperationName, resultSignature_d, DurationMs, Query_s, Documents_d, IndexName_s
| where OperationName == "Query.Search"
| sort by DurationMs
インデクサーの状態
AzureDiagnostics
| project OperationName, Description_s, Documents_d, ResultType, resultSignature_d
| where OperationName == "Indexers.Status"
HTTP 状態コード
AzureDiagnostics
| where TimeGenerated > ago(7d)
| summarize count() by resultSignature_d
| render barchart
クエリ速度
AzureDiagnostics
| where OperationName == "Query.Search" and TimeGenerated > ago(1d)
| extend MinuteOfDay = substring(TimeGenerated, 0, 16)
| project MinuteOfDay, DurationMs, Documents_d, IndexName_s
| summarize QPM=count(), AvgDuractionMs=avg(DurationMs), AvgDocCountReturned=avg(Documents_d) by MinuteOfDay
| order by MinuteOfDay desc
| render timechart
クエリの平均待機時間
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime']..['_endTime']) // Time range filtering
| summarize AverageQueryLatency = avgif(DurationMs, OperationName in ("Query.Search", "Query.Suggest", "Query.Lookup", "Query.Autocomplete"))
by bin(TimeGenerated, intervalsize)
| render timechart
平均 QPM (1 分あたりのクエリ数)
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime'] .. ['_endTime']) // Time range filtering
| summarize QueriesPerMinute=bin(countif(OperationName in ("Query.Search", "Query.Suggest", "Query.Lookup", "Query.Autocomplete"))/(intervalsize/1m), 0.01)
by bin(TimeGenerated, intervalsize)
| render timechart
インデックス作成の 1 分あたりの操作回数 (OPM)
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime'] .. ['_endTime']) // Time range filtering
| summarize IndexingOperationsPerSecond=bin(countif(OperationName == "Indexing.Index")/ (intervalsize/1m), 0.01)
by bin(TimeGenerated, intervalsize)
| render timechart
検索ソリューションの一般的な問題に関する通知を受け取るアラートを作成する
アラートを使用すると、検索サービスを事前に管理できます。 作成を検討する必要がある、一般的に使用されるアラートをいくつか示します。
- [検索の待ち時間] (メトリック シグナルを使用)。アラートをトリガーする待機時間を秒単位で指定できます
- [調整された検索の割合] (メトリック シグナルを使用)。パーセンテージを指定できます
- [検索サービスの削除] (アクティビティ ログ シグナルを使用)。検索サービスが削除された場合に通知されます
- [検索サービスの停止] (アクティビティ ログシグナルを使用)。検索サービスが停止した場合に通知されます。これは、検索サービスがスケールアップまたはダウンした場合、または再起動する必要がある場合に発生します