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

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

Azure portal を使用して監視する

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

インデクサーの一覧

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

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

インデクサー概要と実行履歴

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

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

インデクサー実行の詳細

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

エラーを含むインデクサーの詳細

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

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

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

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

メトリック ビューは、一連の定義済みのディメンションでフィルター処理または分割できます。 メトリックの "処理ドキュメント数" と "スキルの実行呼び出し数" に関連付けられているディメンションの詳細については、「メトリック ディメンション」を参照してください。

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

インデクサーの処理されたドキュメントのメトリック

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

インデクサーの呼び出されたスキルのメトリック

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

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

GET https://[service name].search.windows.net/indexers/[indexer name]/status?api-version=2024-07-01
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 リファレンスを参照してください。