Amazon EMR アプリケーションログを CloudWatch にプッシュする方法を教えてください。

所要時間3分
0

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 ログを監視する

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインの [ログ] で、[ロググループ] を選択します。
  3. 設定ファイルに基づいて、確認するロググループを選択します。
  4. 上記の例のサンプル 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 ファイルを参照します。

  1. 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 パラメータを作成する」を参照してください。

  2. パラメータを参照するようにブートストラップアクションスクリプトを更新します。

    # 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 エージェントを別のユーザーとして実行する

CloudWatch ログに送信されたログデータを確認する

Amazon EMR クラスターインスタンスからカスタムメトリクスを収集し、CloudWatch で監視する方法を教えてください

AWS公式
AWS公式更新しました 1年前
コメントはありません