filterIndex
filterIndex を使用してインデックス付きデータのみを返すには、クエリで指定したフィールドでインデックス付けされたロググループのみをスキャンするようクエリに強制します。このフィールドでインデックス付けされるこれらのロググループの場合、インデックス付けされたフィールドのクエリで指定されたフィールドを含む任意のログイベントを持たないロググループをスキップすることで、クエリがさらに最適化されます。さらに、このフィールドインデックスのクエリで指定された値に一致するこれらのロググループのログイベントのみをスキャンしようとすることで、スキャンされるボリュームが減少します。フィールドインデックスおよびその作成方法の詳細については「フィールドインデックスを作成してクエリパフォーマンスを改善し、スキャン量を削減する」を参照してください。
インデックス付きフィールドで filterIndex を使用すると、実際の検索スペースをフィールドインデックスを持つロググループとログイベントに制限することで、ペタバイトのログデータを含むロググループを効率的にクエリできます。
例えば、アカウントの一部のロググループで IPaddress のフィールドインデックスを作成したとします。その後、次のクエリを作成してアカウント内のすべてのロググループをクエリし、IPaddress フィールドの値 198.51.100.0 を含むログイベントを検索できます。
fields @timestamp, @message | filterIndex IPaddress = "198.51.100.0" | limit 20
filterIndex コマンドにより、このクエリは IPaddress においてインデックス付けされていないすべてのロググループをスキップしようとします。さらに、インデックス付けされたロググループ内で、クエリは IPaddress フィールドを持つもののそのフィールドの値として 198.51.100.0 が観測されないログイベントをスキップします。
IN 演算子を使用して、インデックス付きフィールドの複数の値のいずれかに結果を展開します。次の例では、IPaddress フィールドで値 198.51.100.0 または 198.51.100.1 を含むログイベントを検索します。
fields @timestamp, @message | filterIndex IPaddress in ["198.51.100.0", "198.51.100.1"] | limit 20
CloudWatch Logs は、標準ログクラスのすべてのロググループにデフォルトのフィールドインデックスを提供します。デフォルトのフィールドインデックスは、次のフィールドで自動的に使用できます。
-
@logStream -
@aws.region -
@aws.account -
@source.log -
traceId
デフォルトのフィールドインデックスは、ポリシー内で定義した任意のカスタムフィールドインデックスに追加されます。デフォルトのフィールドインデックスは、フィールドインデックスクォータにはカウントされません。
filterIndex と filter の比較
filterIndex と filter の違いを説明するために、次のクエリ例を検討してください。IPaddress のフィールドインデックスを 4 つのロググループ向けに作成したものの、5 番目のロググループには作成していないとします。filterIndex を使用する次のクエリは、フィールドのインデックスが付けられていないロググループのスキャンをスキップします。インデックス付きロググループごとに、インデックス付きフィールドを持つログイベントのみをスキャンしようとします。また、フィールドインデックスの作成後からの結果のみを返します。
fields @timestamp, @message | filterIndex IPaddress = "198.51.100.0" | limit 20
対照的に、同じ 5 つのロググループのクエリに filterIndex の代わりに filter を使用する場合、クエリはインデックス付きロググループの値を含むログイベントだけではなく、インデックス化されていない 5 番目のロググループもスキャンし、その 5 番目のロググループ内のすべてのログイベントをスキャンします。
fields @timestamp, @message | filter IPaddress = "198.51.100.0" | limit 20