フィールドインデックスを作成してクエリパフォーマンスを改善し、スキャン量を削減する
ログイベントでフィールドのフィールドインデックスを作成して、同等性ベースの検索を効率的に行うことができます。その後、CloudWatch Logs Insights クエリでフィールドインデックスを使用すると、クエリはインデックス付きフィールドを含まないことがわかっているログイベントの処理をスキップしようとします。これによってフィールドインデックスを使用するクエリのスキャン量が減少し、結果をより迅速に返すことができます。これにより、数千のロググループ全体で合計ログのペタバイトをすばやく検索し、関連するログをより迅速に見つけることができます。インデックス付けに適したフィールドは、多くの場合、クエリが必要なフィールドです。値のカーディナリティが高いフィールドは、フィールドインデックスの候補としても適しています。これらのフィールドインデックスを使用するクエリは、一致するログイベントをターゲット値に制限するため、より迅速に完了するからです。
例えば、requestId のフィールドインデックスを作成したとします。次に、requestId =
または valuerequestId IN
[ を含むそのロググループの CloudWatch Logs Insights クエリは、そのインデックス付きフィールドとクエリされた値を含んでいる上に CloudWatch Logs が過去にそのフィールドの値を検出したことがあるログイベントのみの処理を試行します。value, value, ...]
フィールドインデックスを活用して、多数のロググループの効率的なクエリを作成することもできます。filter コマンドの代わりにクエリで filterIndex コマンドを使用すると、フィールドインデックスを持つログイベントで選択したロググループに対してクエリが実行されます。これらのクエリは、最大 5 つのロググループ名のプレフィックスを指定することで、最大 10,000 個のロググループをスキャンできます。これが CloudWatch のクロスアカウントオブザーバビリティのモニタリングアカウントの場合は、すべてのソースアカウントを選択するか個々のソースアカウントを指定してロググループを選択できます。
インデックス付きのフィールドでは、大文字と小文字が区別されます。例えば、RequestId のフィールドインデックスは、requestId を含むログイベントと一致しません。
フィールドインデックスは、JSON ログとサービスログの構造化ログ形式でのみサポートされます。
CloudWatch Logs は、標準ログクラスのすべてのロググループにデフォルトのフィールドインデックスを提供します。デフォルトのフィールドインデックスは、次のフィールドで自動的に使用できます。
-
@logStream -
@aws.region -
@aws.account -
@source.log -
traceId
デフォルトのフィールドインデックスは、ポリシー内で定義した任意のカスタムフィールドインデックスに追加されます。デフォルトのフィールドインデックスは、フィールドインデックスクォータにはカウントされません。
CloudWatch Logs は、インデックスポリシーの作成後に取り込まれたログイベントのみをインデックス化します。ポリシーの作成前に取り込まれたログイベントはインデックス化されません。フィールドインデックスを作成すると、一致する各ログイベントは、ログイベントの取り込み時間から 30 日間インデックスが付いたままになります。
注記
モニタリングアカウントにフィールドインデックスポリシーを作成する場合、そのポリシーはリンクされたソースアカウントのロググループには使用されません。フィールドインデックスポリシーは、それが作成されたアカウントにのみ適用されます。
このセクションの残りのトピックでは、フィールドインデックスを作成する方法について説明します。クエリでフィールドインデックスを参照する方法については「filterIndex」および「フィルター」を参照してください。