New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Amazon EMR アプリケーションログを CloudWatch にプッシュする方法を教えてください。
Amazon EMR バージョン 5.30.0 以降の Amazon EMR アプリケーションログを Amazon CloudWatch にプッシュしたいです。
簡単な説明
CloudWatch エージェントを使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスからメトリクスとログを収集します。次に、アプリケーションログを CloudWatch に発行するように Amazon EMR クラスターインスタンスを設定します。
解決策
前提条件
CloudWatch エージェント設定ファイルを作成します。
設定ファイルを作成する
Amazon EMR インスタンスから特定のアプリケーションログをプッシュするには、以下の例のいずれかを使用して設定ファイルを作成します。
すべてのノードの YARN アプリケーションのログをプッシュする
次のサンプル設定ファイルは、各 Amazon EMR インスタンスからコンテナログをプッシュします。
{ "agent": { "metrics_collection_interval": 300, "run_as_user": "yarn" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*", "log_group_name": "/emr/applications/", "log_stream_name": "{instance_id}-{ip_address}", "publish_multi_logs" : true } ] } } } }
注: /var/log/hadoop-yarn/containers/application_*/container*/* は、実際のファイルパスの位置に置き換えます。
プライマリノード上の YARN および Hive Server 2 アプリケーションのログをプッシュする
次のサンプル設定ファイルは、EMR プライマリノードから Yarn リソースマネージャーのログと Hive サーバーのログをプッシュします。
{ "agent": { "metrics_collection_interval": 300, "run_as_user": "hadoop" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*", "log_group_name": "/emr/master/logs", "log_stream_name": "{instance_id}-{ip_address}-resourcemanager.log" }, { "file_path": "/mnt/var/log/hive/hive-server2.log", "log_group_name": "/emr/master/logs", "log_stream_name": "{instance_id}-{ip_address}-hive-server2.log" } ] } } } }
注: /mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-* は、実際のファイルパスの位置に置き換えます。
設定ファイルを S3 バケットにアップロードする
Amazon Simple Storage Service (Amazon S3) バケットに設定ファイルをアップロードします。
注: Amazon EMR クラスターには、S3 バケットにアクセスするための AWS Identity and Access Management (IAM) アクセス許可が必要です。
Amazon EMR を起動する
Amazon EMR ブートストラップアクションの一部として、次のスクリプトを実行して CloudWatch エージェントを設定し、CloudWatch エージェントプロセスを開始します。
# == Install CloudWatch Agent == echo "=================== BootstrapActions: Install CloudWatch Agent ===================" sudo yum install amazon-cloudwatch-agent -y sudo amazon-linux-extras install collectd -y # Copy config file on the instance sudo aws s3 cp s3://<your-s3-path>/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json # Start the agent with the created config file sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json # Status CW Agent echo "Status CW Agent" sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
注: **s3://<your-s3-path>/config.json ** は、お使いの環境のパスで置き換えます。
(オプション) Spark アプリケーションを送信する
サンプルアプリケーションのログを生成するには、Amazon EMR クラスターリーダーノードから次のコマンドを実行して Spark アプリケーションを起動します。
spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
CloudWatch コンソールを使用して CloudWatch ログを監視する
- CloudWatch コンソールを開きます。
- ナビゲーションペインの [ログ] で、[ロググループ] を選択します。
- 設定ファイルに基づいて、確認するロググループを選択します。
- 上記の例のサンプル config.json ファイルを使用する場合は、次のタスクのいずれかを実行します。
アプリケーションログを確認するには、/emr/applications を選択します。
リーダーログを表示するには、/emr/master/logs を選択します。
注: CloudWatch イベントログは、ロググループに保持ポリシーを設定した場合にのみ自動的に削除されます。また、保持設定を構成してコストを最適化することもできます。詳細については、「CloudWatch Logs のログデータ保持設定を変更する」を参照してください。
(オプション) Systems Manager を使用して Amazon EMR に CloudWatch エージェントをインストールする
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS Systems Manager を使用してエージェントファイルのコンテンツを保存します。次に、CloudWatch エージェントを起動するときに Systems Manager ファイルを参照します。
-
Systems Manager コンソールまたは AWS CLI を使用して、Systems Manager パラメータを作成します。次に、エージェントファイルの内容を保存します。次の例では、AWS CLI を使用してパラメータを作成します。
aws ssm put-parameter \ --name "AmazonCloudWatch-Config.json" \ --value "{ "agent": { "metrics_collection_interval": 300, "run_as_user": "yarn" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*", "log_group_name": "/emr/applications/", "log_stream_name": "{instance_id}", "publish_multi_logs" : true } ] } } } }" \ --type String
注: /var/log/hadoop-yarn/containers/application_*/container*/* は、実際のファイルパスの位置に置き換えます。上記の例では、設定ファイルにより、各 Amazon EMR インスタンスからコンテナログをプッシュします。Systems Manager パラメータの詳細については、「Systems Manager パラメータを作成する」を参照してください。
-
パラメータを参照するようにブートストラップアクションスクリプトを更新します。
# Start the agent with the created config file sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c ssm:AmazonCloudWatch-Config.json
関連情報
CloudWatch エージェントを別のユーザーとして実行する
Amazon EMR クラスターインスタンスからカスタムメトリクスを収集し、CloudWatch で監視する方法を教えてください

関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 7ヶ月前lg...
- AWS公式更新しました 2年前