検索ジョブは、Log Analytics 内のデータ ( 分析と長期リテンション期間 の両方) で実行する非同期クエリです。これにより、ワークスペース内の新しい検索テーブルの対話型クエリでクエリ結果を使用できるようになります。 検索ジョブでは、並列処理が使用され、大規模なデータセット全体に対して数時間実行できます。 この記事では、検索ジョブを作成する方法と、結果のデータを照会する方法について説明します。
このビデオでは、検索ジョブを使うべきときと、その方法について説明します。
必要なアクセス許可
| アクション | 必要なアクセス許可 |
|---|---|
| 検索ジョブの実行 |
たとえば、Microsoft.OperationalInsights/workspaces/tables/writeによって提供される、Log Analytics ワークスペースに対する Microsoft.OperationalInsights/workspaces/searchJobs/write および 権限。 |
注
テナント間検索ジョブはサポートされていません。 Azure Lighthouse の委任されたアクセスは、searchJobs/write アクセス許可を含む委任されたロールが割り当てられている場合でも、検索ジョブ (または復元) ではサポートされていません。
検索ジョブを使用する場面
検索ジョブは以下のために使います。
- 長期保有および Basic と Auxiliary プランのテーブルから、Azure Monitor ログの完全な分析機能を利用できる新しい Analytics テーブルにレコードを取得します。
- ログ クエリのタイムアウトが 10 分で十分でない場合は、大量のデータをスキャンします。
検索ジョブの機能
検索ジョブはデータをスキャンし、その結果をソース データと同じワークスペース内の新しいテーブルに送信します。 検索ジョブが開始されるとすぐに結果テーブルが使用可能になりますが、結果が表示され始めるまでに時間がかかる場合があります。 スキャンされたデータの 価格モデル と、取り込まれた結果のサイズに基づいてコストが発生します。 検索ジョブを実行する前に、ジョブを実行するかどうかを決定するのに役立つコスト見積もりを使用できます。
検索ジョブの結果テーブルは、Analytics テーブルであり、ログ クエリおよびワークスペース内のテーブルを使用するその他の Azure Monitor 機能で使用できます。 このテーブルでは、ワークスペースに対して設定されたリテンション期間の値が使用されますが、テーブルの作成後に、この値を変更できます。
検索結果テーブルのスキーマは、ソース テーブルのスキーマと指定されたクエリに基づいています。 次のその他の列は、ソース レコードの追跡に役立ちます。
| 列 | 値 |
|---|---|
| _OriginalType | ソース テーブルの Type 値。 |
| _OriginalItemId | ソース テーブルの _ItemID 値。 |
| _OriginalTimeGenerated | ソース テーブルの TimeGenerated 値。 |
| タイムジェネレイテッド | 検索ジョブが実行された時刻。 |
結果テーブルに対するクエリは、最初の検索ジョブではなく、ログ クエリの監査に表示されます。
検索ジョブの実行
検索ジョブを実行して、大規模なデータセットからワークスペース内の新しい検索結果テーブルにレコードをフェッチします。
ヒント
検索ジョブの実行に対しては、料金が発生します。 検索ジョブを実行する前に、対話型クエリ モードでクエリを記述して最適化します。 コスト見積もりプレビューを使用して、潜在的なコストを把握します。
検索ジョブを実行するには、Azure portal で次のようにします。
[Log Analytics ワークスペース] メニューから [ログ] を選びます。
検索ジョブ クエリを入力するか、目的のテーブルを選択します。
画面の右側にある省略記号メニューを選択し、[ 検索ジョブ] を選択します。
または、[ 実行 ] プルダウン メニューを使用して、[ 検索ジョブとして実行] を選択します。
時刻の選択を使用して、検索ジョブの日付範囲を指定します。 合計保有期間内の任意の期間を選択します。
Kusto クエリで時間範囲も指定されている場合は、時間範囲の和集合が検索ジョブに使用されます。
検索ジョブ結果テーブルの名前を入力し、[Run a search job] (検索ジョブの実行) を選びます。
Azure Monitor ログで検索ジョブが実行され、ワークスペースに検索ジョブ結果用の新しいテーブルが作成されます。
新しいテーブルの準備ができたら、'<searchtablename>_SRCH' を選択して Log Analytics でテーブルを表示します。
新しく作成された検索ジョブ結果テーブルに挿入が開始されると、検索ジョブ結果を使用できます。
Azure Monitor ログには、完了時に 検索ジョブが完了 したことを示すメッセージが表示されます。 そのメッセージが表示されるか、進行状況に 100%が表示されると、検索クエリに一致するすべてのレコードで結果テーブルの準備が整いました。
検索ジョブの状態と詳細を取得する
検索ジョブのテーブルを削除する
テーブルに対するクエリが完了したら、検索ジョブのテーブルを削除することをお勧めします。 このベスト プラクティスにより、ワークスペースの煩雑さとデータ保持に対する追加料金が削減されます。
考慮事項
検索ジョブには、次の考慮事項が適用されます。
- 一度に 1 つのテーブルに対してクエリを実行するように最適化
- 検索の日付範囲は、合計保有期間内の任意の期間です
- 最長 24 時間のタイムアウトまで実行時間の長い検索をサポート
- レコード セット内の結果は 1 億件に制限されます。制限を超えた場合、Azure Monitor は 部分的な成功の状態でジョブを中止し、テーブルにはその時点まで取り込まれたレコードのみが含まれます
- 同時実行は、ワークスペースごとに 10 個の検索ジョブに制限されます。
- ワークスペースあたり 200 個の検索結果テーブルに制限
- ワークスペースあたり 1 日あたり 200 件の検索ジョブの実行に制限
- テナント間検索ジョブはサポートされていません
- 委任に適切な searchJobs/write アクセス許可が含まれている場合でも、Azure Lighthouse の委任されたアクセスは検索ジョブでサポートされていません。エラー メッセージで失敗します。ユーザー managing-tenant-userId< には、スコープ >delegated-workspace-resourceID におけるアクション Microsoft.OperationalInsights/workspaces/searchJobs/write へのアクセス権がありません。<>
KQL クエリに関する考慮事項
検索ジョブは、特定のテーブル内の大量のデータをスキャンすることを目的としているため、検索ジョブ クエリは常にテーブル名で開始する必要があります。 分散とセグメント化を使用して非同期実行を有効にするために、クエリでは、次の表形式演算子を含む KQL のサブセットがサポートされます。
これらの演算子内のすべての関数と二項演算子を使用できます。
高度なテキストの一致はパフォーマンスに大きな影響を与えるので、 contains 文字列演算子は検索ジョブでの使用をブロックされます。 代わりに、 has 文字列演算子を使用します。 パフォーマンスに関する考慮事項の詳細については、「 Azure Monitor でのログ クエリの最適化」を参照してください。
価格モデル
検索ジョブの料金は以下に基づきます。
検索ジョブの実行:
Analytics プラン: 検索ジョブが長期保有内でスキャンするデータの量。 Analytics テーブルの分析リテンション期間にあるデータのスキャンには料金はかかりません。
Basic または Auxiliaryプラン: 検索ジョブが長期保有でスキャンするすべてのデータ。
スキャンされるデータは、指定した時間内に、検索ジョブを実行するテーブル内のデータの量として定義されます。 分析と長期的なリテンション期間の詳細については、「 Log Analytics ワークスペースでのデータ保持の管理」を参照してください。
検索ジョブの結果: 検索ジョブで見つかって結果テーブルに取り込まれたデータの量。Analytics テーブルのデータ インジェスト率に基づきます。
たとえば、Basic テーブルを 30 日間検索し、テーブルに 1 日あたり 500 GB のデータが保持される場合、スキャンされたデータ 15,000 GB に対して課金されます。 検索ジョブが 1,000 レコードを返す場合、これら 1,000 レコードの結果テーブルへの取り込みに対して課金されます。
詳細については、「Azure Monitor の価格」を参照してください。