🔥

Athena Federated Queryを使ってCloudWatch Logsからクエリを実行する方法と制限事項

2023/03/19に公開

書くこと

  • Athena Federated Queryを使用して、CloudWatch Logsを接続先データソースとしてクエリを実行する方法
  • 制限事項: クエリの実行時間

データの流れ

データは次のような流れで取得されます:

CloudWatch Logs => Lambda => Athena

Athena Federated Queryを使用して、CloudWatch Logsを接続先データソースとしてクエリを実行する方法

  1. S3バケットの追加
  2. Athenaデータソースの追加
  3. サンプルクエリの実行

S3バケットの追加

LambdaアプリケーションがCloudWatch LogsとAthenaの接続を行うために使用するS3バケットを追加します。
今回は、「athena-cloudwatch-connector-spill-bucket-sample」という名前のバケットを作成しました。

Athenaデータソースの追加

  1. AWSマネジメントコンソールにログインし、Athenaを選択します。
  2. 左のサイドバーで「データソース」を選択し、「データソースの作成」をクリックします。
  3. データソースで「Amazon CloudWatch Logs」を選択します。
  4. データソースの詳細を入力します。
    1. データソース名: 例「AwsCloudWatchLogCatalog」
  5. 接続の詳細で「Lambda関数の作成」を選択します。
  6. アプリケーションの設定を行います。
    2. アプリケーション名: 例「AthenaCloudwatchConnector」
    3. SpillBucket: 「athena-cloudwatch-connector-spill-bucket-sample」
    4. AthenaCatalogName: 「cloudwatch_logs_catalog」
    5. 「このアプリがカスタム IAM ロールとリソースポリシーを作成することを承認します。」にチェックを入れます。
  7. 作成後、Athenaデータソース作成画面に戻ります。
  8. 接続の詳細を入力します。
    6. 先ほど作成したLambda関数を選択します。

Athenaデータソースの作成画面

Lambda関数の作成画面

クエリの実行

以下のようなデータソースの選択方法で参照できるようになります。

select *
from "AwsCloudWatchLogCataLog"."YourCloudWatchLogGroup"."all_log_streams"

制限事項: クエリの実行時間

クエリの実行時間は、900秒を超えることができません。
以下は、実行時に発生したエラーです。

GENERIC_USER_ERROR: Encountered an exception[null] from your LambdaFunction 

(...中略...)
 
 Task timed out after 900.06 seconds]

[付録]: Lambda関数の実行コード

参考文献

Discussion