如何在无互联网访问权限的 Auto Scaling 组中配置 EC2 实例以将指标和日志发送到 CloudWatch?

上次更新时间:2020 年 11 月 9 日

如何在无互联网访问权限的 Amazon EC2 Auto Scaling 组中配置 Amazon Elastic Compute Cloud (Amazon EC2) 实例以将指标和日志发送到 Amazon CloudWatch?

解决方案

  1. 在 Amazon EC2 实例上安装 CloudWatch 代理。此实例必须具有互联网连接。或者,您可以选择一个已使用 CloudWatch 代理将日志和指标推送到 CloudWatch 的 Amazon EC2 实例。
  2. 验证 CloudWatch 代理是否正在从 Amazon EC2 实例推送指标和日志。
  3. 为 Auto Scaling 组创建启动模板。要让实例将指标和日志推送到 CloudWatch,请在启动模板中提供正确的 AWS Identity and Access Management (IAM) 角色。在高级设置中,使用类似于以下内容的脚本定义用户数据。使用此脚本的自定义版本根据第 1 步中的 JSON 配置安装和配置 CloudWatch 代理。
    注意:此示例用户数据脚本将 CloudWatch 代理安装在 Amazon EC2 Linux 实例中。该脚本用于配置代理,以监控内存和磁盘使用率,然后启动代理。您必须使用 Auto Scaling 组的特定区域的下载链接
#!/bin/bash
cd /tmp
wget https://s3.<region>.amazonaws.com/amazoncloudwatch-agent-<region>/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
rpm -U ./amazon-cloudwatch-agent.rpm
cat << EOF > /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
  "agent": {
    "metrics_collection_interval": 60
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "\${aws:InstanceId}"
    },
    "metrics_collected": {
      "disk": {
        "measurement": [
          "disk_used_percent"
        ],
        "resources": [
          "*"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used_percent"
        ]
      }
    }
  }
}
EOF
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

  • 为托管私有子网的 VPC 添加 Virtual Private Cloud (VPC) 接口终端节点(用于 CloudWatch 监控和 CloudWatch Logs)。要查找正确的终端节点,请参阅 Amazon CloudWatch 终端节点和配额。要仅允许在这些 VPC 终端节点中执行所需的 CloudWatch 操作,请使用自定义策略更新终端节点策略。

    CloudWatch 监控 VPC 终端节点的策略示例:

  • {
      "Statement": [
        {
          "Sid": "PutOnly",
          "Principal": "*",
          "Action": [
            "cloudwatch:PutMetricData"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }

    CloudWatch Logs VPC 终端节点的策略示例:

    {
      "Statement": [
        {
          "Sid": "PutOnly",
          "Principal": "*",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }

    有关更多详细信息,请参阅后面的“创建 VPC 接口终端节点的注意事项”。

  • 将 Amazon S3 的 Virtual Private Cloud (VPC) 网关终端节点添加到托管私有子网的 VPC 中。此终端节点允许私有子网中的实例用户数据脚本从 Amazon S3 访问和下载 CloudWatch 代理程序包。
  • 使用您在第 3 步中创建的启动模板来创建 Auto Scaling 组(启用私有子网)。CloudWatch 代理将在此 Auto Scaling 组中启动的实例内运行。该代理还通过您在第 4 步中创建的 VPC 接口终端节点来发送指标和日志。
  • 创建 VPC 接口终端节点的注意事项

    • 请务必使用与 Auto Scaling 组所在的 AWS 区域对应的终端节点。例如,如果 Auto Scaling 组位于伦敦区域,则指标的终端节点为 monitoring.eu-west-2.amazonaws.com。在这种情况下,日志的终端节点为 logs.eu-west-2.amazonaws.com
    • 确认已启用启用私有 DNS 名称选项。仅当 VPC 的启用 DNS 主机名启用 DNS 支持属性设置为 true 时,才能启用此选项。如果禁用该选项,则 VPC 接口终端节点不会映射到服务终端节点。因此,实例将无法访问公共服务终端节点。启用此选项会将服务终端节点映射到 VPC 接口终端节点,并使其与服务终端节点的通信变为专用通信。默认情况下,CloudWatch 代理将连接到此终端节点。如果需要,您可以使用代理配置文件中的 endpoint_override 参数覆盖默认终端节点。
    • 确认安全组规则允许终端节点网络接口与 VPC 中负责与服务通信的资源进行通信。用于推送日志和指标的 API 调用是基于 HTTPS 的 GET/POST 请求。终端节点网络接口安全组需要来自源 IP 的 HTTPS 协议的入站规则。源 IP 地址是负责推送指标和日志的 EC2 实例或 VPC CIDR 的 IP 地址。
    • 如果实例属于 Auto Scaling 组,请在代理配置文件中将其中一个维度指定为 Auto Scaling 组名称。为了查找 Auto Scaling 组的名称,代理会从 Amazon EC2 终端节点获取与实例关联的标签。您必须为 Amazon EC2 服务添加 VPC 接口终端节点。代理将从 Amazon EC2 实例的元数据中获取 ImageIdInstanceIdInstanceType 值。
    • </ul

    这篇文章对您有帮助吗?


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