ログの保存
EMR Serverless でのジョブの進行状況をモニタリングし、ジョブの失敗をトラブルシューティングするには、EMR Serverless がアプリケーションログを保存して処理する方法を選択します。ジョブ実行を送信する際に、ログ記録オプションとしてマネージドストレージ、Amazon S3、Amazon CloudWatch を指定します。
CloudWatch では、使用するログタイプとログの場所を指定するか、デフォルトのタイプと場所を受け入れます。CloudWatch のログの詳細については、「Amazon CloudWatch を使用した EMR Serverless のログ記録」を参照してください。マネージドストレージと S3 のログ記録について、次の表にマネージドストレージ、Amazon S3 バケット、または両方を選択した場合に想定されるログの場所と UI の可用性を一覧表示します。
| オプション | イベントログ | コンテナログ | アプリケーション UI |
|---|---|---|---|
|
マネージドストレージ |
マネージドストレージに保存 |
マネージドストレージに保存 |
サポート |
|
マネージドストレージと S3 バケットの両方 |
両方の場所に保存 |
S3 バケットに保存 |
サポート |
|
Amazon S3 バケット |
S3 バケットに保存 |
S3 バケットに保存 |
サポート外1 |
1 マネージドストレージオプションを選択したままにすることを提案します。それ以外の場合は、組み込みのアプリケーション UI を使用できません。
マネージドストレージを使用した EMR Serverless のログ記録
デフォルトでは、EMR Serverless はアプリケーションログを Amazon EMR マネージドストレージに最大 30 日間安全に保存します。
注記
デフォルトのオプションをオフにすると、Amazon EMR はユーザーに代わってジョブのトラブルシューティングを行うことができません。例: EMR Serverless コンソールから Spark-UI にアクセスできません。
EMR Studio からこのオプションをオフにするには、ジョブの送信ページの [追加設定] セクションの [AWS がログを 30 日間保持することを許可] チェックボックスをオフにします。
AWS CLI からこのオプションをオフにするには、ジョブ実行を送信するときに managedPersistenceMonitoringConfiguration 設定を使用します。
{ "monitoringConfiguration": { "managedPersistenceMonitoringConfiguration": { "enabled": false } } }
EMR Serverless アプリケーションが Amazon S3 の VPC エンドポイントを持つプライベートサブネットにあり、アクセスを制御するエンドポイントポリシーをアタッチする場合は、EMR Serverless がアプリケーションログを保存して処理するための次のアクセス許可を追加します。Resource を、Amazon S3 にアクセスするプライベートサブネットのサンプルポリシーの使用可能なリージョンテーブルの AppInfo バケットに置き換えます。
さらに、aws:SourceVpc 条件キーを使用して、リクエストが VPC エンドポイントがアタッチされている VPC を通過することを確認します。
Amazon S3 バケットを使用した EMR Serverless のログ記録
ジョブが Amazon S3 にログデータを送信できるようにするには、ジョブのランタイムロールのアクセス許可ポリシーに次のアクセス許可を設定します。 をログ記録バケットの名前に置き換えます。amzn-s3-demo-logging-bucket
AWS CLI のログを保存する Amazon S3 バケットを設定するには、ジョブの実行を開始する際に s3MonitoringConfiguration 設定を使用します。これを行うには、設定で以下の --configuration-overrides を指定します。
{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket/logs/" } } }
再試行が有効になっていないバッチジョブの場合、EMR Serverless はログを次のパスに送信します。
'/applications/<applicationId>/jobs/<jobId>'
Spark ドライバーログは、EMR Serverless によって以下のパスに保存されます
'/applications/<applicationId>/jobs/<jobId>/SPARK_DRIVER/'
Spark エグゼキュターログは、EMR Serverless によって以下のパスに保存されます
'/applications/<applicationId>/jobs/<jobId>/SPARK_EXECUTOR/<EXECUTOR-ID>'
<EXECUTOR-ID> は整数です。
EMR Serverless リリース 7.1.0 以降では、ストリーミングジョブとバッチジョブの再試行がサポートされています。再試行を有効にしてジョブを実行すると、EMR Serverless はログパスプレフィックスに試行番号を自動的に追加するため、ログをより適切に区別して追跡できます。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'
Amazon CloudWatch を使用した EMR Serverless のログ記録
EMR Serverless アプリケーションにジョブを送信する場合は、アプリケーションログを保存するためのオプションとして Amazon CloudWatch を選択します。これにより、CloudWatch Logs Insights や Live Tail などの CloudWatch ログ分析機能を使用できます。CloudWatch から OpenSearch などの他のシステムにログをストリーミングして、詳細に分析することもできます。
EMR Serverless は、ドライバーログのリアルタイムログ記録を可能にします。CloudWatch ライブテール機能、または CloudWatch CLI テールコマンドを使用して、ログにリアルタイムでアクセスできます。
デフォルトでは、EMR Serverless の CloudWatch ログ記録は無効になっています。有効にするには、AWS CLI の設定を使用してください。
注記
Amazon CloudWatch はログをリアルタイムで発行するため、ワーカーのより多くのリソースが消費されます。ワーカーの容量に対して小さな値を選択すると、ジョブの実行時間への影響が増加する可能性があります。CloudWatch のログ記録を有効にする場合は、より大きなワーカー容量の値を選択することを提案します。また、PutLogEvents の 1 秒あたりのトランザクション (TPS) レートが過剰に低い場合は、ログ発行がスロットリングする可能性があります。CloudWatch のスロットリング設定は、EMR Serverless を含むすべてのサービスに対してグローバルです。詳細については、AWS re:post の「How do I determine throttling in my CloudWatch logs?
CloudWatch でのログ記録に必要なアクセス許可
ジョブが Amazon CloudWatch にログデータを送信できるようにするには、ジョブランタイムロールのアクセス許可ポリシーに次のアクセス許可を設定します。
AWS CLI
AWS CLI から EMR Serverless のログを保存するように Amazon CloudWatch を設定するには、ジョブの実行を開始するときに cloudWatchLoggingConfiguration 設定を使用します。これを行うには、次の設定のオーバーライドを指定します。必要に応じて、ロググループ名、ログストリームプレフィックス名、ログタイプ、および暗号化キー ARN を指定します。
オプションの値を指定しない場合、CloudWatch はデフォルトのログストリーム /applications/ を使用して、デフォルトのロググループ applicationId/jobs/jobId/worker-type/aws/emr-serverless にログを発行します。
EMR Serverless リリース 7.1.0 以降では、ストリーミングジョブとバッチジョブの再試行がサポートされています。ジョブの再試行を有効にした場合、EMR Serverless はログパスプレフィックスに試行番号を自動的に追加するため、ログをより適切に区別して追跡できます。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/worker-type'
以下では、EMR Serverless のデフォルト設定で Amazon CloudWatch ログ記録を有効にするために必要な最小設定をデモンストレーションします。
{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true } } }
次の例は、EMR Serverless の Amazon CloudWatch ログ記録を有効にする際に指定する必須およびオプションのすべての設定を示しています。サポートされている logTypes 値もこの例の下に示されています。
{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true, // Required "logGroupName": "Example_logGroup", // Optional "logStreamNamePrefix": "Example_logStream", // Optional "encryptionKeyArn": "key-arn", // Optional "logTypes": { "SPARK_DRIVER": ["stdout", "stderr"] //List of values } } } }
デフォルトでは、EMR Serverless はドライバーの stdout と stderr ログのみを CloudWatch に発行します。他のログが必要な場合は、logTypes フィールドでコンテナロールと対応するログタイプを指定します。
次のリストは、logTypes 設定で指定するサポートされているワーカータイプを示しています:
- Spark
-
-
SPARK_DRIVER : ["STDERR", "STDOUT"] -
SPARK_EXECUTOR : ["STDERR", "STDOUT"]
-
- Hive
-
-
HIVE_DRIVER : ["STDERR", "STDOUT", "HIVE_LOG", "TEZ_AM"] -
TEZ_TASK : ["STDERR", "STDOUT", "SYSTEM_LOGS"]
-