メモリ、CPU、ディスク容量の使用状況など、Amazon EMR クラスターインスタンスのカスタムメトリクスを設定したいです。その後、Amazon CloudWatch を使用してメトリクスをモニタリングしたいと考えています。
解決方法
Amazon Elastic Compute Cloud (Amazon EC2) で CloudWatch エージェントをインストールすることで、Amazon EMR クラスターからメトリクスを設定および収集できます。CloudWatch エージェントをインストールすると、Amazon EC2 インスタンス用にデフォルトで発行されたメトリクスに加えて、収集されたメトリクスを使用できます。
CloudWatch エージェントを使用して収集するメトリクスは、他の CloudWatch メトリクスと同様に、CloudWatch に保存および表示できます。CloudWatch エージェントによって収集されるメトリクスのデフォルトの名前空間は CWAgent です。ただし、エージェントを設定するときに別の名前空間を指定できます。
CloudWatch エージェントを設定し、Amazon EMR クラスターノードからカスタムメトリクスを発行するには、次のステップを実行します。
1. 次の設定例を使用して、サンプルの CloudWatch エージェント設定ファイル (config.json) を作成します。エージェント設定ファイルは、カスタムメトリクスを含め、エージェントが収集する必要があるメトリクスとログを指定する JSON ファイルです。Linux サーバーのメトリクスを収集する次の例では、4 つの CPU メトリクス、2 つのディスクメトリクス、1 つのメモリメトリクスが収集されています。エージェントは、collectd クライアントからこれらのメトリクスを受信するように設定されています。
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"resources": [
"*"
],
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}
2. 次のブートストラップスクリプト (例: emr-cloudwatchagent-bootstrap.sh) を Amazon Simple Storage Service (Amazon S3) の場所にコピーします。
------emr-cloudwatchagent-bootstrap.sh---------
#!/bin/bash
sudo yum install amazon-cloudwatch-agent -y
sudo amazon-linux-extras install collectd -y
aws s3 cp <s3 path for config.json> /home/hadoop/config.json
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:///home/hadoop/config.json
------------------------------
このスクリプトは、次の処理を行います。
- CloudWatch エージェントと collectd クライアントをインストールします。
- config.json ファイルを Amazon S3 からローカルパス /home/hadoop にコピーします。
- config.json ファイルを使用して CloudWatch エージェントを実行します。
3. Amazon EMR クラスターにブートストラップアクションを追加します。
collectd メトリクスを CloudWatch にインポートすると、これらのメトリクスを時系列グラフとして表示できます。また、指定した特定のしきい値をメトリクスが超えたときに通知されるようにアラームを設定することもできます。CloudWatch コンソールで collectd メトリクスを表示するには、エージェントによって収集されるメトリクスの名前空間を選択します。デフォルトでは、この名前空間は CWagent と呼ばれます。詳細については、「CloudWatch エージェントによってインポートされた collectd メトリクスの表示」を参照してください。