aws中使用cloudwatch监控内存磁盘等指标

730 阅读4分钟

在 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 中查看内存指标

  1. 登录到 AWS 管理控制台,并导航到 CloudWatch
  2. 在左侧菜单中选择 Metrics (指标)
  3. 选择 CWAgent 命名空间,你会在这里找到与内存相关的自定义指标,例如 mem_used_percent
  4. 你可以创建图表来监控这些内存使用指标。

步骤 3: 创建 CloudWatch Alarm(警报)

为了确保你能够及时响应内存使用率高的问题,你可以为内存使用创建警报。

  1. 在 CloudWatch 控制台中选择 Alarms (警报)
  2. 点击 Create Alarm (创建警报)
  3. 选择内存使用的指标(例如 mem_used_percent),然后点击 Select Metric (选择指标)
  4. 设置阈值条件,例如内存使用超过 80% 时触发警报。
  5. 配置通知(通过 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 发送通知,使你能够及时收到有关高内存使用的警报。