如何从 Amazon EMR 集群实例收集自定义指标,然后在 CloudWatch 中进行监控?

上次更新日期:2022 年 8 月 31 日

我想要为 Amazon EMR 集群实例配置自定义指标,例如内存、CPU 和磁盘空间使用。然后,我想使用 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 服务器指标的以下示例中,将收集四个 CPU 指标、两个磁盘指标和一个内存指标。代理设置为从 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 指标


这篇文章对您有帮助吗?


您是否需要账单或技术支持?