Athena での Spark アプリケーションイベントをログに記録する - Amazon Athena

Athena での Spark アプリケーションイベントをログに記録する

Athena ノートブックエディタでは、Jupyter、Spark、Python の標準ログが可能です。df.show() を使用して PySpark DataFrame のコンテンツを表示したり、print("Output") を使用してセル出力に値を表示したりできます。計算の stdoutstderr、および results 出力は Amazon S3 のクエリ結果バケットの場所に書き込まれます。

Amazon CloudWatch への Spark アプリケーションイベントをログに記録する

Athena セッションでは、使用しているアカウントの Amazon CloudWatch にログを書き込むこともできます。

ログストリームとロググループを理解する

CloudWatch は、ログアクティビティをログストリームとロググループに整理します。

ログストリーム - CloudWatch ログストリーミングは、同じ出典を共有する一連のログイベントです。CloudWatch Logs でのログの各ソースで各ログストリームが構成されます。

ロググループ - CloudWatch ログで、ロググループは保持、モニタリング、アクセス制御について同じ設定を共有するログストリーミングのグループです。

1 つのロググループに属することができるログストリーミングの数に制限はありません。

Athena で初めてノートブックセッションを開始すると、次の例のように、Athena は Spark 対応のワークグループの名前を使用して CloudWatch にロググループを作成します。

/aws-athena/workgroup-name

このロググループは、少なくとも 1 つのログイベントを生成するセッションのエグゼキューターごとに 1 つのログストリームを受け取ります。エグゼキューターとは、ノートブックセッションが Athena にリクエストできる最小の計算単位です。CloudWatch では、ログストリームの名前はセッション ID とエグゼキューター ID で始まります。

CloudWatch ロググループとログストリームの詳細については、Amazon CloudWatch Logs ユーザーガイドの「ロググループとログストリームの操作」を参照してください。

Athena for Spark の標準ロガーオブジェクトを使用する

Athena for Spark セッションでは、次の 2 つのグローバルスタンダードロガーオブジェクトを使用して、Amazon CloudWatch にログを書き込むことができます。

  • athena_user_logger - ログを CloudWatch にのみ送信します。このオブジェクトは、次の例のように、Spark アプリケーションの情報を CloudWatch に直接ログ記録する場合に使用します。

    athena_user_logger.info("CloudWatch log line.")

    この例では、次のようにログイベントを CloudWatch に書き込みます。

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: CloudWatch log line.
  • athena_shared_logger - 同じログをサポート目的で CloudWatch および AWS と両方に送信します。このオブジェクトを使用して、次の例のように、トラブルシューティングのために AWS サービスチームとログを共有できます。

    athena_shared_logger.info("Customer debug line.") var = [...some variable holding customer data...] athena_shared_logger.info(var)

    この例では、debug の行と var の変数の値を CloudWatch Logs に記録し、各行のコピーを AWS Support に送信します。

    注記

    プライバシー保護のため、計算コードと結果は AWS と共有されません。AWS Support に表示する情報のみを書き込む athena_shared_logger への呼び出しを行ってください。

提供されているロガーは、Apache Log4j を介してイベントを書き込み、このインターフェイスのログレベルを継承します。指定できるログレベル値は DEBUGERRORFATALINFOWARNWARNING です。ロガーで対応する名前付き関数を使用して、これらの値を生成できます。

注記

名前 athena_user_logger または athena_shared_logger を再バインドしないでください。これを行うと、ログオブジェクトはセッションの残りの部分で CloudWatch に書き込むことができなくなります。

次の手順は、Athena ノートブックイベントを Amazon CloudWatch Logs にログ記録する方法を示しています。

Athena ノートブックイベントを Amazon CloudWatch Logs にログ記録するには
  1. Amazon Athena で Apache Spark を開始する に従って、一意の名前で Spark 対応のワークグループを Athena に作成します。このチュートリアルでは、ワークグループ名 athena-spark-example を使用します。

  2. ステップ 7: 独自のノートブックを作成する の手順に従ってノートブックを作成し、新しいセッションを開始します。

  3. Athena ノートブックエディタの新しいノートブックセルに、次のコマンドを入力します。

    athena_user_logger.info("Hello world.")
  4. セルを実行します。

  5. 次のいずれかを実行して、現在のセッション ID を取得します。

    • セル出力 (例: ... session=72c24e73-2c24-8b22-14bd-443bdcd72de4) を表示します。

    • 新しいセルで、マジックコマンド %session_id を実行します。

  6. セッション ID を保存します。

  7. ノートブックセッションの実行に使用しているのと同じ AWS アカウント で、https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

  8. CloudWatch コンソールのナビゲーションペインで、[Log groups] (ロググループ) を選択します。

  9. ロググループのリストで、次の例のように Spark 対応の Athena ワークグループの名前を持つロググループを選択します。

    /aws-athena/athena-spark-example

    [Log streams] (ログストリーム) セクションには、ワークグループの 1 つ以上のログストリームリンクのリストが含まれています。各ログストリーム名には、セッション ID、エグゼキューター ID、および一意の UUID がスラッシュ文字によって区切られています。

    例えば、セッション ID が 5ac22d11-9fd8-ded7-6542-0412133d3177 であり、エグゼキューター ID が f8c22d11-9fd8-ab13-8aba-c4100bfba7e2 の場合、ログストリームの名前は次の例のようになります。

    5ac22d11-9fd8-ded7-6542-0412133d3177/f8c22d11-9fd8-ab13-8aba-c4100bfba7e2/f012d7cb-cefd-40b1-90b9-67358f003d0b
  10. セッションのログストリームのログストリームを選択します。

  11. [Log events] (イベントのログ) ページで、[Message] (メッセージ) 列を表示します。

    実行したセルのログイベントは次のようになります。

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
  12. Athena ノートブックエディタに戻ります。

  13. 新しいセルに、次のコードを入力します。このコードは変数を CloudWatch にログします。

    x = 6 athena_user_logger.warn(x)
  14. セルを実行します。

  15. 同じログストリームの CloudWatch コンソールの [Log events] (ログイベント) ページに戻ります。

  16. ログストリームには、次のようなメッセージを含むログイベントエントリが含まれるようになりました。

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6