AWS Glue ジョブにより、Amazon CloudWatch に過剰な数のログが生成されるため、生成されるログの数を削減したいです。
簡単な説明
AWS Glue Spark の抽出/変換/読み込み (ETL) ジョブでは、内部障害の監視や失敗したジョブの診断を行う際参考となるログが大量に生成されます。AWS Glue ジョブがインスタンスで生成するログの数を制御することはできませんが、ログの詳細度を調整できます。
次の方法でログの詳細度を調整します。
- 連続ログ記録で標準フィルター設定を有効化します。
- Spark コンテキストのメソッド setLogLevel を指定します。
- カスタム log4j.properties ファイルを使用します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
連続ログ記録で標準フィルター設定を有効化する
ジョブで連続ログ記録が有効な場合、[ログのフィルター] オプションで標準フィルターを有効化します。
このフィルターを有効にするには、AWS CLI で次のジョブパラメータを追加します。
'--enable-continuous-cloudwatch-log': 'true''--enable-continuous-log-filter': 'true'
注: AWS Glue の連続ログ記録は AWS Glue 4.0 以前のバージョンでのみ使用できます。
Spark コンテキストメソッド setLogLevel を指定する
pyspark.context.SparkContext の setLogLevel メソッドでは、ジョブの記録レベルを設定できます。有効な記録レベルには、ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE、WARN が含まれます。詳細については、Apache Spark のウェブサイトで setLogLevel を参照してください。
Spark コンテキストメソッドをインポートしてログ記録のレベルを設定するには、AWS Glue ジョブに次のコードを追加します。
from pyspark.context import SparkContext
sc = SparkContext()
sc.setLogLevel("new-log-level")
注: new-log-level を新しいログレベルに置き換えてください。このコードはドライバーログの動作に影響しますが、エグゼキューターログは変更されません。
詳細については、Apache Spark のウェブサイトで「ログ記録の設定」を参照してください。
カスタム log4j.properties ファイルを使用する
AWS Glue 3.0 はログ記録動作に Log4j 1 を使用します。log4j.properties ファイルで動作をカスタマイズできます。AWS Glue 4.0 はログ記録動作に Log4j 2 を使用します。log4j2.properties ファイルで動作をカスタマイズできます。Log4j 2 の詳細については、Apache Logging Services のウェブサイトで「構成のプロパティ」を参照してください。
注: カスタム構成ファイル log4j.properties または log4j2.properties を適用する場合、AWS Glue は連続ログ記録を無効にします。なお、カスタム Log4j プロパティは AWS Glue 4.0 以前でのみ指定できます。
log4j2.properties ファイルには、ログ記録のプリファレンスを含めることができます。このファイルを Amazon Simple Storage Service (Amazon S3) にアップロードすると、AWS Glue ジョブで利用できます。
AWS Glue 4.0 でカスタム構成ファイルを使用するには、次の手順を実行します。
-
log4j2.properties という名前のファイルを作成し、ルートロガーレベルを error に設定します。
log4j2.properties ファイルの例:
rootLogger.level = error
rootLogger.appenderRef.stdout.ref = STDOUT
appender.console.type = Console
appender.console.name = STDOUT
appender.console.target = SYSTEM_ERR
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %c{2} (%F:%M(%L)): %m%n
-
log4j2.properties ファイルを Amazon S3 にアップロードし、ファイルの S3 URI をコピーします。
-
AWS Glue ジョブに次のパラメータを追加します。
--extra-files, s3://[objectpath]/log4j2.properties
注: s3://[objectpath]/log4j.properties を前のステップで取得した S3 URI に置き換えてください。
-
AWS Glue ジョブを保存して実行します。
-
/aws-glue/jobs/error ロググループ内の関連するログストリームを確認します。
関連情報
Amazon CloudWatch で監視を行う