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

2 分钟阅读
0

我在 Amazon EC2 自动扩缩组中有一个无互联网访问权限的 Amazon Elastic Compute Cloud(Amazon EC2)实例。我希望该实例向 Amazon CloudWatch 发送日志和指标。

解决方法

1.    在 Amazon EC2 实例上安装 CloudWatch 代理。此实例必须具有互联网连接。或者,您可以选择一个已使用 CloudWatch 代理将日志和指标推送到 CloudWatch 的 EC2 实例。

2.    验证 CloudWatch 代理是否正在从 EC2 实例推送指标和日志。

3.    为自动扩缩组创建启动模板。在您的启动模板中,完成高级设置中的以下步骤:
对于 IAM 实例配置文件,选择相关的正确的 AWS Identity and Access Management(IAM)角色,该角色允许实例将指标和日志推送到 CloudWatch。
对于用户数据,请输入类似于以下示例的脚本。使用此脚本的自定义版本根据第 1 步**中的 JSON 配置安装并配置 CloudWatch 代理:
注意:**以下用户数据脚本将 CloudWatch 代理安装在 EC2 Linux 实例中。该脚本用于配置代理,以监控内存和磁盘使用率,然后启动代理。您必须使用自动扩缩组中特定 AWS 区域的下载链接

#!/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

4.    为托管私有子网的 VPC 添加接口虚拟私有云(VPC)端点(用于 CloudWatch 监控和 Amazon 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 端点的注意事项部分。

5.    将 Amazon Simple Storage Service(Amazon S3)的 虚拟私有云(VPC)网关端点添加到托管私有子网的 VPC 中。这让私有子网中的实例用户数据脚本可以从 Amazon S3 访问并下载 CloudWatch 代理程序包。

6.    使用您在第 3 步中创建的启动模板来创建自动扩缩组(已激活私有子网)。CloudWatch 代理将在此自动扩缩组中启动的实例内运行。该代理还通过您在第 4 步中创建的 VPC 接口终端节点来发送指标和日志。

创建接口 VPC 端点的注意事项

  • 请务必使用与自动扩缩组所在的区域对应的端点。例如,如果自动扩缩组位于伦敦区域,则指标的端点为 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 接口端点。代理将从 EC2 实例的元数据中获取 ImageIdInstanceIdInstanceType 值。

AWS 官方
AWS 官方已更新 1 年前