如何在无互联网访问权限的 Auto Scaling 组中配置 EC2 实例以将指标和日志发送到 CloudWatch?
上次更新时间:2020 年 11 月 9 日
如何在无互联网访问权限的 Amazon EC2 Auto Scaling 组中配置 Amazon Elastic Compute Cloud (Amazon EC2) 实例以将指标和日志发送到 Amazon CloudWatch?
解决方案
- 在 Amazon EC2 实例上安装 CloudWatch 代理。此实例必须具有互联网连接。或者,您可以选择一个已使用 CloudWatch 代理将日志和指标推送到 CloudWatch 的 Amazon EC2 实例。
- 验证 CloudWatch 代理是否正在从 Amazon EC2 实例推送指标和日志。
- 为 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
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 接口终端节点的注意事项”。
创建 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 实例的元数据中获取 ImageId、InstanceId 和 InstanceType 值。 </ul