Athena ノートブックエディタでは、Jupyter、Spark、Python の標準ログが可能です。df.show()
を使用して PySpark DataFrame のコンテンツを表示したり、print("Output")
を使用してセル出力に値を表示したりできます。計算の stdout
、stderr
、および 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 に記録し、各行のコピーを Support に送信します。注記
プライバシー保護のため、計算コードと結果は AWS と共有されません。Support に表示する情報のみを書き込む
athena_shared_logger
への呼び出しを行ってください。
提供されているロガーは、Apache Log4jDEBUG
、ERROR
、FATAL
、INFO
、WARN
、WARNING
です。ロガーで対応する名前付き関数を使用して、これらの値を生成できます。
注記
名前 athena_user_logger
または athena_shared_logger
を再バインドしないでください。これを行うと、ログオブジェクトはセッションの残りの部分で CloudWatch に書き込むことができなくなります。
次の手順は、Athena ノートブックイベントを Amazon CloudWatch Logs にログ記録する方法を示しています。
Athena ノートブックイベントを Amazon CloudWatch Logs にログ記録するには
-
Amazon Athena で Apache Spark を開始する に従って、一意の名前で Spark 対応のワークグループを Athena に作成します。このチュートリアルでは、ワークグループ名
athena-spark-example
を使用します。 -
ステップ 7: 独自のノートブックを作成する の手順に従ってノートブックを作成し、新しいセッションを開始します。
-
Athena ノートブックエディタの新しいノートブックセルに、次のコマンドを入力します。
athena_user_logger.info("Hello world.")
-
セルを実行します。
-
次のいずれかを実行して、現在のセッション ID を取得します。
-
セル出力 (例:
... session=72c24e73-2c24-8b22-14bd-443bdcd72de4
) を表示します。 -
新しいセルで、マジックコマンド
%session_id
を実行します。
-
-
セッション ID を保存します。
-
ノートブックセッションの実行に使用しているのと同じ AWS アカウント で、https://console.aws.amazon.com/cloudwatch/
にある CloudWatch コンソールを開きます。 -
CloudWatch コンソールのナビゲーションペインで、[Log groups] (ロググループ) を選択します。
-
ロググループのリストで、次の例のように 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
-
セッションのログストリームのログストリームを選択します。
-
[Log events] (イベントのログ) ページで、[Message] (メッセージ) 列を表示します。
実行したセルのログイベントは次のようになります。
AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
-
Athena ノートブックエディタに戻ります。
-
新しいセルに、次のコードを入力します。このコードは変数を CloudWatch にログします。
x = 6 athena_user_logger.warn(x)
-
セルを実行します。
-
同じログストリームの CloudWatch コンソールの [Log events] (ログイベント) ページに戻ります。
-
ログストリームには、次のようなメッセージを含むログイベントエントリが含まれるようになりました。
AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6