Azure AI Search でインデクサーの状態と結果を監視する

インデクサーの処理は、Azure portal で、または REST 呼び出しや Azure SDK を使用してプログラムで監視できます。 インデクサー自体の状態に加えて、開始および終了時刻や、特定の実行の詳細なエラーおよび警告を確認できます。

Azure portal を使用して監視する

検索サービスの [概要] ページでは、すべてのインデクサーの現在の状態を確認できます。 ポータル ページは数分ごとに更新されるため、新しいインデクサーが実行された痕跡はすぐには表示されません。 最新のビューを今すぐ取得するには、ページ上部の [Refresh]\(最新の情報に更新\) を選択します。

Indexers list

Status 説明
処理中 アクティブな実行を示します。 ポータルでは部分的な情報が報告されます。 インデックスの作成が進むと、それに応じて [成功したドキュメント] の値が増加するのを確認できます。 大量のデータを処理するインデクサーの実行には時間がかかることがあります。 たとえば、数百万単位のソース ドキュメントを処理するインデクサーの場合、24 時間実行した後、ほぼすぐに再起動して、中断したところからまた開始することがあります。 そのため、ボリュームの多いインデクサーの場合、ポータルで状態が常に [進行中] になることがあります。 インデクサーの実行中でも、進行中の実行と過去の実行の進捗状況に関する詳細を利用できます。
成功 実行が成功したことを示します。 エラーの数がインデクサーの [失敗したアイテムの最大数] 設定より少なければ、個々のドキュメントにエラーがあってもインデクサー実行は成功となることがあります。
Failed エラーの数が [失敗したアイテムの最大数] を超え、インデックスの作成が停止しました。
リセット インデクサーの内部の変更追跡状態がリセットされました。 インデクサーは完全に実行され、新しいタイムスタンプを持つものだけでなく、すべてのドキュメントが更新されます。

一覧にあるインデクサーを選択すると、そのインデクサーの現在と最近の実行に関する詳細が表示されます。

Indexer summary and execution history

インデクサー概要グラフには、最近の実行で処理されたドキュメントの数がグラフで表示されます。

実行の詳細一覧には、最近の実行結果が最大 50 件表示されます。 一覧にある実行結果を選択すると、その実行に関する詳細が表示されます。 その開始時刻、終了時刻、発生したエラーや警告などです。

Indexer execution details

実行中にドキュメント固有の問題が発生した場合は、[エラー] と [警告] フィールドに一覧表示されます。

Indexer details with errors

警告は一部の種類のインデクサーで一般的であり、必ずしも問題を示すとは限りません。 たとえば、Azure AI サービスを利用するインデクサーの場合、画像または PDF ファイルに処理するテキストが含まれないとき、警告が報告されることがあります。

インデクサーのエラーと警告を調査する方法について詳しくは、インデクサーのトラブルシューティング ガイドを参照してください。

Azure Monitoring メトリックを使用して監視する

Azure AI Search は Azure Monitor の監視対象リソースです。つまり、 メトリックス エクスプローラー を使用して、インデクサーで処理されたドキュメントとスキル呼び出しの数に関する基本的なメトリックを確認できます。 これらのメトリックを使用して、インデクサーの進行状況を監視し、アラートを設定できます。

メトリック ビューは、一連の定義済みのディメンションでフィルター処理または分割できます。

メトリックの名前 説明 Dimensions ユースケースの例
処理ドキュメント数 インデクサー処理されたドキュメントの数を表示します。 データ ソース名、失敗、インデックス名、インデクサー名、スキルセット名
- スループットの大まかな尺度として参照できます (インデクサーによって一定期間に処理されるドキュメントの数)
- 失敗したドキュメントを警告するための設定
スキルの実行呼び出し数 スキル呼び出しの数を表示します。 データ ソース名、失敗、インデックス名、インデクサー名、スキル名、スキルの種類、スキルセット名
- スキル間の相対呼び出し数およびスキル呼び出しの数をドキュメントの数と比較することで、スキルが想定どおりに呼び出されたことを確認するための基準。
- 失敗したスキル呼び出しを警告するための設定

次のスクリーンショットは、インデクサー名で分割された、サービス内のインデクサーによって 1 時間以上処理されたドキュメントの数を示しています。

Indexer documents processed metric

同じ時間間隔のスキル呼び出しの数を表示するようにグラフを構成することもできます。

Indexer skills invoked metric

インデクサー状態の取得 (REST API) を使用して監視する

インデクサーの現在の状態と実行の履歴は、インデクサー状態の取得コマンドを使用して取得できます。

GET https://[service name].search.windows.net/indexers/[indexer name]/status?api-version=2020-06-30
api-key: [Search service admin key]

応答には、全体的なインデクサーの状態、最後の (または実行中の) インデクサー呼び出し、およびインデクサー呼び出しの最近の履歴が含まれています。

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2018-11-26T03:37:18.853Z",
        "endTime":"2018-11-26T03:37:19.012Z",
        "errors":[],
        "itemsProcessed":11,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
     },
    "executionHistory":[ {
        "status":"success",
         "errorMessage":null,
        "startTime":"2018-11-26T03:37:18.853Z",
        "endTime":"2018-11-26T03:37:19.012Z",
        "errors":[],
        "itemsProcessed":11,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    }]
}

実行履歴には最近の実行が最大 50 件含まれます。これは逆の時系列 (一番新しいものが最初) で整理されています。

2 つの異なる状態値があることに注意してください。 トップレベルの状態はインデクサー自体の状態です。 running というインデクサー状態は、インデクサーが正しく設定されており、実行可能であることを意味しますが、現在実行されているという意味ではありません。

インデクサーの各実行には、実行別の状態も与えられ、その特定の実行が進行中であるか (running)、successtransientFailure、または persistentFailure 状態で既に完了しているかどうかを示します。

インデクサーがリセットされ、その変更追跡状態が更新されると、別個の実行履歴エントリが [リセット] という状態で追加されます。

状態コードとインデクサー監視データに関する詳細は、インデクサー状態の取得に関する記事を参照してください。

.NET を使用して監視する

次の C# 例では、インデクサーの状態とその最近の (あるいは進行中の) 実行の結果に関する情報がコンソールに書き込まれます。

static void CheckIndexerStatus(SearchIndexerClient indexerClient, SearchIndexer indexer)
{
    try
    {
        string indexerName = "hotels-sql-idxr";
        SearchIndexerStatus execInfo = indexerClient.GetIndexerStatus(indexerName);

        Console.WriteLine("Indexer has run {0} times.", execInfo.ExecutionHistory.Count);
        Console.WriteLine("Indexer Status: " + execInfo.Status.ToString());

        IndexerExecutionResult result = execInfo.LastResult;

        Console.WriteLine("Latest run");
        Console.WriteLine("Run Status: {0}", result.Status.ToString());
        Console.WriteLine("Total Documents: {0}, Failed: {1}", result.ItemCount, result.FailedItemCount);

        TimeSpan elapsed = result.EndTime.Value - result.StartTime.Value;
        Console.WriteLine("StartTime: {0:T}, EndTime: {1:T}, Elapsed: {2:t}", result.StartTime.Value, result.EndTime.Value, elapsed);

        string errorMsg = (result.ErrorMessage == null) ? "none" : result.ErrorMessage;
        Console.WriteLine("ErrorMessage: {0}", errorMsg);
        Console.WriteLine(" Document Errors: {0}, Warnings: {1}\n", result.Errors.Count, result.Warnings.Count);
    }
    catch (Exception e)
    {
        // Handle exception
    }
}

コンソールの出力は次のようになります。

Indexer has run 18 times.
Indexer Status: Running
Latest run
  Run Status: Success
  Total Documents: 7, Failed: 0
  StartTime: 11:29:31 PM, EndTime: 11:29:31 PM, Elapsed: 00:00:00.2560000
  ErrorMessage: none
  Document Errors: 0, Warnings: 0

2 つの異なる状態値があることに注意してください。 トップレベルの状態は、インデクサー自体の状態です。 Running というインデクサー状態は、インデクサーが正しく設定されており、実行可能であることを意味しますが、現在実行されているという意味ではありません。

インデクサーの各実行にもそれ自体の状態が与えられ、特定の実行が進行中 (Running) であるか、Success または TransientError 状態で完了済みであるかを示します。

インデクサーがリセットされ、その変更追跡状態が更新されると、別個の履歴エントリが [リセット] という状態で追加されます。

次のステップ

状態コードとインデクサー監視情報に関する詳細は、次の API リファレンスを参照してください。