Amazon Athena テーブルで AWS CloudTrail ログの SELECT クエリを実行しました。しかし、クエリの実行速度が遅い、結果が返されない、タイムアウトエラーで失敗などの問題が発生しています。
解決策
ユースケースに応じて、次に示すトラブルシューティング手順を実行します。
クエリが結果を返さない
Amazon S3 のロケーションパスが誤っている
CloudTrail ログについて、Amazon Simple Storage Service (Amazon S3) テーブルの場所を確認します。テーブル内の入力 LOCATION パスが正しくない場合、Athena はレコードを返しません。
パーティションがテーブルにロードされない
手動パーティショニングで CREATE TABLE ステートメントを使用してテーブルを作成した場合は、Athena テーブルにパーティションが読み込まれていることを確認します。パーティションがテーブルに読み込まれていない場合、Athena クエリは結果を返しません。
SHOW PARTITIONS ステートメントを使用して、テーブルに既に読み込まれたパーティションを確認できます。ALTER TABLE ADD PARTITION コマンドを使用して必要なパーティションを読み込み、クエリが結果を返すようにします。
パーティションの定義が誤っている
手動パーティショニングで CREATE TABLE ステートメントを使用してテーブルを作成した場合は、タイムスタンププロパティの範囲を確認します。projection.timestamp.range プロパティが Amazon S3 バケットの場所のパーティションと一致していることを確認します。
SELECT クエリが、projection.timestamp.range プロパティで設定した範囲を超える値のデータをフィルタリングしていないことを確認します。
ストレージクラス
Athena は S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive ストレージクラスのデータクエリをサポートしておらず、オブジェクトは無視されます。
CloudTrail ログがサポートされていない S3 ストレージクラスにあるかどうかを確認します。クエリ対象の Amazon S3 アーカイブオブジェクトを復元します。次に、復元した Amazon S3 オブジェクトをクエリします。
クエリの実行に時間がかかるか、タイムアウトエラーで失敗する
テーブルがパーティション化されていない
CloudTrail コンソールを使用して CloudTrail ログ用の Athena テーブルを作成した場合、パーティション化されていないテーブルが作成されます。
SELECT クエリは、パーティション化されていないテーブルを含む Amazon S3 バケット内のすべてのログファイルをスキャンします。DML クエリのタイムアウト制限を超えると、クエリの実行が遅くなったり、タイムアウトしたりすることがあります。
クエリのパフォーマンスを最適化するには、パーティション化したテーブルを作成するのがベストプラクティスです。クエリ時間を短縮するには、WHERE 句にパーティション列を指定し、Athena が一致したパーティションのデータのみをスキャンするようにします。
分割テーブルクエリで、パーティション列を使用してデータをフィルタリングしていない
SELECT クエリで WHERE 句のパーティション列を使用していない場合、Athena は Amazon S3 バケットのすべてのログファイルをスキャンします。
次のサンプルクエリには、すべてのログをスキャンしていることが原因で、実行速度が遅くなったパーティションプロジェクション CloudTrail テーブルがあります。
SELECT useridentity, sourceipaddress, eventtime
FROM cloudtrail_table
WHERE eventname = 'RunInstances'
AND eventtime >= '2023-10-30T00:00:00Z'
AND eventtime < '2023-10-30T00:04:00Z';
クエリ時間を短縮するには、WHERE 句にパーティション列を指定し、Athena が一致したパーティションのデータのみをスキャンするようにします。
次のクエリ例では、パーティション列のタイムスタンプに WHERE 句があり、2023/10/30 パーティションのログのみをスキャンします。
SELECT useridentity, sourceipaddress, eventtime
FROM cloudtrail_table
WHERE eventname = 'RunInstances'
AND eventtime >= '2023-10-30T00:00:00Z'
AND eventtime < '2023-10-30T00:04:00Z'
AND timestamp >= '2023/10/30'
AND timestamp < '2023/10/31'
詳細については、「Athena で CloudTrail データをクエリするときに発生する、タイムアウトの問題をトラブルシューティングする方法を教えてください」を参照してください。
関連情報
AWS CloudTrail ログを検索するための Amazon Athena テーブルを自動的に作成する方法を教えてください
AWS CloudTrail ログのクエリ