在 AWS 中,默认情况下,Amazon CloudWatch 不会自动监控 EC2 实例的内存使用情况,因为 EC2 的内存使用是操作系统层面的指标。为了监控 EC2 实例的内存消耗,你需要配置 CloudWatch 以收集自定义指标。以下是如何在 AWS 中设置 CloudWatch 来监控 EC2 实例的内存使用情况的步骤:
步骤 1: 安装 CloudWatch Agent
AWS 提供了 CloudWatch Agent,它可以收集 EC2 实例上的内存使用、磁盘利用率等系统级指标。首先,需要在你的 EC2 实例上安装和配置 CloudWatch Agent。
1.1 安装 CloudWatch Agent
在 Amazon Linux 或 Ubuntu 上,可以通过以下命令安装 CloudWatch Agent:
# 对于 Amazon Linux 和 Amazon Linux 2
sudo yum install amazon-cloudwatch-agent -y
# 对于 Ubuntu
sudo apt-get update
sudo apt-get install amazon-cloudwatch-agent -y
# 手动安装
#!/bin/bash
wget https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip
unzip AmazonCloudWatchAgent.zip
sudo ./install.sh
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:/alarm/AWS-CWAgentConfig -s
# 这个ssm 的params的参数名称,可以自己定义。这样,就可以把参数放在aws上,方便在不同ec2之间共用
1.2 配置 CloudWatch Agent
配置 CloudWatch Agent 以收集内存和其他系统指标。可以手动创建配置文件或使用默认配置文件。
运行以下命令生成 CloudWatch Agent 的配置文件:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
你将被引导通过几个问题,例如是否需要收集内存使用率、磁盘利用率等系统指标。生成的配置文件会存储在 /opt/aws/amazon-cloudwatch-agent/bin/config.json。
你可以通过修改配置文件来启用内存监控。这里是一个示例配置文件,启用了内存监控:
{
"metrics": {
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
# 更加复杂的配置
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "",
"log_group_name": ".",
"log_stream_name": "{instance_id}",
"retention_in_days": 1
},
{
"file_path": "",
"log_group_name": ".",
"log_stream_name": "{instance_id}",
"retention_in_days": 1
}
]
}
}
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"disk": {
"measurement": [
"used_percent"
],
"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"
}
}
},
"traces": {
"buffer_size_mb": 3,
"concurrency": 8,
"insecure": false,
"traces_collected": {
"xray": {
"bind_address": "127.0.0.1:2000",
"tcp_proxy": {
"bind_address": "127.0.0.1:2000"
}
}
}
}
}
1.3 启动 CloudWatch Agent
完成配置后,使用以下命令启动 CloudWatch Agent:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a start \
-m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
# -c 后面可以是 [Amazon Systems Manager]中的 Parameter Store 配置的参数
步骤 2: 在 CloudWatch 中查看内存指标
- 登录到 AWS 管理控制台,并导航到 CloudWatch。
- 在左侧菜单中选择 Metrics (指标)。
- 选择
CWAgent命名空间,你会在这里找到与内存相关的自定义指标,例如mem_used_percent。 - 你可以创建图表来监控这些内存使用指标。
步骤 3: 创建 CloudWatch Alarm(警报)
为了确保你能够及时响应内存使用率高的问题,你可以为内存使用创建警报。
- 在 CloudWatch 控制台中选择 Alarms (警报)。
- 点击 Create Alarm (创建警报)。
- 选择内存使用的指标(例如
mem_used_percent),然后点击 Select Metric (选择指标)。 - 设置阈值条件,例如内存使用超过 80% 时触发警报。
- 配置通知(通过 SNS 发送电子邮件、短信等)。
步骤 4: 验证 CloudWatch Agent 的运行
你可以使用以下命令检查 CloudWatch Agent 是否在运行并发送指标:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
这个命令会显示 CloudWatch Agent 的当前状态。
遇到的问题
需要正确配置ec2的 IAM role,否则cloudwatch-agent上传会报错
报错日志在:
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
这个role可以考虑配置以下权限
- AmazonSSMFullAccess (读取ssm的参数)
- AmazonEC2FullAccess (需要获取ec2的tag等信息)
- CloudWatchFullAccess (上传数据到cloudwatch)
总结
通过安装和配置 CloudWatch Agent,你可以轻松监控 EC2 实例的内存消耗,以及其他系统级指标,如磁盘和 CPU 利用率。CloudWatch 支持通过 SNS 发送通知,使你能够及时收到有关高内存使用的警报。