如何在无互联网访问权限的自动扩缩组中配置 EC2 实例以将指标和日志发送到 CloudWatch?
我在 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 实例的元数据中获取 ImageId、InstanceId 和 InstanceType 值。
相关内容
- AWS 官方已更新 5 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 2 年前