如何通过CloudWatch监控 EC2 内存硬盘等指标

如何通过CloudWatch监控 EC2 内存硬盘等指标

Amazon 的 CloudWatch 为 EC2 提供了一系列的指标的跟踪和收集,方便用户去了解 EC2 的使用情况,但部分涉及用户数据的性能指标是无法直接通过**CloudWacth** 来获取,如硬盘的使用情况,内存占用等。为了能获取这些指标,需要用户自行在 EC2 上安装 **CloudWacth Agent** 来获取 EC2 上的资源使用情况,并通过 **CloudWacth Agent** 将数据发送到 CloudWatch。
如何通过CloudWatch监控 EC2 内存硬盘等指标 2023-03-14 09:22:16
如何通过CloudWatch监控 EC2 内存硬盘等指标 0
如何通过CloudWatch监控 EC2 内存硬盘等指标
本教程主要有三个部分: 1.  对于单台或者少量 EC2,可以 ssh 登录到 EC2 中手动运行脚本实现设置 2.  对于还未启动的实例,通过 userdata 的方式在 EC2 创建时的启动脚本,以便开机自动实现此功能。 3.  对于多台 EC2 ,可以利用 System Manager 做批量设置。 您可以根据自己的需求选择对应的安装方法。 **注:本次实验区域是在 us-east-1,使用的实例 AMI 是 Amazon Linux 2,可以根据自己的区域和实例 AMI 对文档中的一些操作自行做一些调整。本教程中使用的由 Amazon 提供的默认监控指标(如硬盘使用,内存,网络接口,硬盘读写和读写时间等),如果有其他指标的话可以通过修改配置文件的方法,或者启动配置向导的方法来自行添加监控指标。linux 下的可监控指标参考:**[Linux下的可监控指标](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html#linux-metrics-enabled-by-CloudWatch-agent?trk=cndc-detail)。 1. 对于单台或者少量 EC2,可以 ssh 登录到 EC2 中手动运行脚本实现设置 通过脚本的方式来安装 CloudWatch Agent 到实例 1.1 选择 IAM 服务,并创建 Role ![image.png](https://dev-media.amazoncloud.cn/b5c719140c3a4eb1a067a3584c104bd4_image.png "image.png") 如上图所示:在进入 IAM 控制台后选择1处的角色,然后选择箭头2处的创建角色。 ![image.png](https://dev-media.amazoncloud.cn/a49b17b2b6944b71933e3ae7c691dbfe_image.png "image.png") 如上图所示:选择箭头1处的 Amazon **产品**,选择2处的 **EC2**,然后点击箭头3处的 **下一步:权限**然后开始附加权限 在这一步我们需要给创建的 Role 附加下面的策略: ![image.png](https://dev-media.amazoncloud.cn/7acb36ced8f54252a6935ffb8cdec13a_image.png "image.png") 在附加这个策略后,然后我们点击**下一步:标签**,点击**下一步:审核**,在最后一步我们给角色命名为 **CloudWatchAgentServerRole** 然后点击创建角色以创建角色。 我们先给需要做监测的 EC2 上附加我们在前面创建的 Role ![image.png](https://dev-media.amazoncloud.cn/86b82555acd5493193b72c8bd04af593_image.png "image.png") 上图所示,进入到下面的界面 ![image.png](https://dev-media.amazoncloud.cn/1f9fc909bb5043f1b3125602deab8b0f_image.png "image.png") 如上图所示,在 EC2 控制台给 EC2 附加在创建的角色 **CloudWatchAgentServerRole** 1.2 登陆 EC2 并运行 shell 脚本来启动 CloudWatch Agent 在通过1.1的步骤创建并附加 Role 后,我们连接上 EC2([连接EC2教程](https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/EC2\_GetStarted.html#ec2-connect-to-instance-linux?trk=cndc-detail))后,将**文档附录**的**默认shell脚本**复制进命令行运行。 在运行成功后,我们可以下面的指令检查 CloudWatch Agent 的运行状态: sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status 当出现下面的状态后就表示 CloudWatch Agent 成功运行: ![image.png](https://dev-media.amazoncloud.cn/62b908fedb03464aa8b12db88a59ad53_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/ab529687e0274987a3a9e1d2a0af5ed5_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/d5ea5ed1e71f4f76ae59e96045c9b0ae_image.png "image.png") 如上图箭头处所示,点击 **MyCustomNamespace_demo(这个名称可以在附录的脚本中的 namespace 处定义,脚本默认的命名空间是MyCustomNamespace)** 即可查看我们通过 shell 脚本定义的默认监控指标: 点击下面箭头处即可查看**硬盘监控和内存监控**,其他指标如**网络接口监控**,**硬盘写入读取,硬盘读取写入时间,cpu 使用情况**等也可以点击相应的指标进行查看。 ![image.png](https://dev-media.amazoncloud.cn/35120f9db87843c086992dbc00144758_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/9077bff3040c4b4e9141dcaca7fb6a91_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/9e4c0c3d830646ed9eeaaebc2e203b37_image.png "image.png") 如果想做一些自定义的指标监控,可以[修改配置文件的方式来修改监控指标](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html?trk=cndc-detail),配置文件默认的位置是: /opt/aws/amazon-cloudwatch-agent/bin/config.json 修改好配置文件后,可以用下面的指令来重启动 CloudWacth Agent: sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json也可以[通过配置文件向导 amazon-cloudwatch-agent-config-wizard的方式来自定义监控指标](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html?trk=cndc-detail)。 2. **对于还未启动的实例,通过 userdata 的方式在 EC2 创建时的启动脚本,以便开机自动实现此功能** **通过 userdata 启动带 CloudWatch Agent 的实例**** 2.1 选择IAM服务,并创建 Role 参考步骤 1.1 创建 Role 部分 2.2 启动实例并添加 userdata 启动 ec2 实例的教程可以参考文档:[启动实例](https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html?trk=cndc-detail) 如下图所示,选择需要的 EC2 实例,在本教程使用的是 Amazon Linux 2实例。在配置实例给实例附加在第一步中创建的 IAM 角色。 ![image.png](https://dev-media.amazoncloud.cn/ca46c5d9b2a748efb7900d962750ffb8_image.png "image.png") 在高级详细信息设置用户数据,点击**以文本形式**的复选框,然后将**文档附录**中的 shell 脚本复制到箭头处的白板中,在本文档使用的 CloudWatch Agent 的配置是由官方提供的默认配置,如果有需求的话可以对文档中的配置部分做进一步的修改。 ![image.png](https://dev-media.amazoncloud.cn/b5d9599efefa458db254e8726b346e86_image.png "image.png") 然后点击审核和启动(本教程主要是在 EC2 上用脚本的形式安装 CloudWatch Agent,使用的是默认由 Amazon 提供的[默认配置](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html#CloudWatch-Agent-Configuration-File-Complete-Example?trk=cndc-detail),忽略了其他配置步骤,用户可以根据自己的需求酌情选择) 之后我们等待实例启动,等机器在**2/2安全检查**结束后,可以登陆上实例,用下面的指令检查 CloudWatch Agent 的运行状态: sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status当出现下面的状态后就表示 CloudWatch Agent 成功运行: ![image.png](https://dev-media.amazoncloud.cn/786fc6634fe544debbd60a48eb4ae0fc_image.png "image.png") 2.3 查看定义的内存,硬盘等的指标 参考步骤 1.3 3. 对于多台 EC2 ,可以利用 System Manager 做批量设置 通过SSM批量安装 CloudWatch Agent 到实例 3.1 选择 IAM 服务,并创建 Role(与1.1不同,这一步需要额外添加一个策略) ![image.png](https://dev-media.amazoncloud.cn/29e6d298a5c24190997df3f5c7baee0d_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/73c8fb4fd9d64536b8d0b663ecf2a493_image.png "image.png") 如上图所示:在进入 IAM 控制台后选择1处的角色,然后选择箭头2处的创建角色。 ![image.png](https://dev-media.amazoncloud.cn/d26fa0cd632c4db3b48fb054d9a6bb74_image.png "image.png") 上图所示:选择箭头1处的 **Amazon 产品**,选择2处的 **EC2**,然后点击箭头3处的 **下一步:权限**然后开始附加权限 在这一步我们需要给创建的 Role 附加两个策略: ![image.png](https://dev-media.amazoncloud.cn/a42bf9ce81d94bc1b02ad7fd3ab7fe5c_image.png "image.png") ![image.png](https://dev-media.amazoncloud.cn/b3a35db088f14b94a4dfb00a12aaa076_image.png "image.png") 在附加这两个策略后,然后我们点击**下一步:标签**,点击**下一步:审核**,在最后一步我们给角色命名为 **CloudWatchAgentServerRole** 然后点击创建角色以创建角色。 我们先给需要做监测的 EC2 上附加我们在前面创建的 Role ![image.png](https://dev-media.amazoncloud.cn/f80433524b0d49e7a7ef384b681f25c4_image.png "image.png") 上图所示,进入到下面的界面 ![image.png](https://dev-media.amazoncloud.cn/adadc6048b0a4dc6962635d3bcb36c1d_image.png "image.png") 如上图所示,在 EC2 控制台给 EC2 附加在创建的角色CloudWatchAgentServerRole 3.2 通过 System Manager 去配置实例,启动指标监控 先进入到 System Manger 的控制台,如下所示: ![image.png](https://dev-media.amazoncloud.cn/179137b18e354f60b807c53b77cc8cab_image.png "image.png") 然后点击**运行命令**进入到**运行命令**界面: ![image.png](https://dev-media.amazoncloud.cn/d1ca8d513d4a42f58ad46f27f3ee216a_image.png "image.png") 在运行命令界面下,命令文档部分选择 **Amazon-RunShellScript**,如下: ![image.png](https://dev-media.amazoncloud.cn/479c270750894202b0181a884bcadc98_image.png "image.png") 在**命令参数**部分,将文档附录的 shell 脚本复制上去: ![image.png](https://dev-media.amazoncloud.cn/3758d6cc7f824d1ea3c0e40ad87e97c1_image.png "image.png") 在**目标**部分我们选择自己需要开启额外指标监控的实例(**可以在 Instances 处批量选择实例**): ![image.png](https://dev-media.amazoncloud.cn/6ae1ab0f31c144ae83f5f03e2103f48e_image.png "image.png") 点击底下的 **运行** 即可,出现下面的界面时即代表配置完成 ![image.png](https://dev-media.amazoncloud.cn/5abfa1c9277a463bb7f261ab8630f69a_image.png "image.png") 3.3 查看定义的内存,硬盘等的指标 参考步骤 1.3 附录:使用 system manager 批量设置的 shell 脚本 **注意:在这个 shell 脚本中,所使用的 CloudWacth Agent 的架构是AMD64,适用于Amazon Linux 和 Amazon Linux 2。可以根据自己的 AMI 类型更改下载超链**,[根据实际情况选择下载超链](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html?trk=cndc-detail)。 ``` \#!/bin/bash sudo yum update -y \#可以根据自己的AMI 类型修改此处的donwloadlink链接来获取合适的cloudwatch版本 downloadlink="https\://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm" sudo wget $downloadlink sudo rpm -U ./amazon-cloudwatch-agent.rpm sudo -s sudo cat >/opt/aws/amazon-cloudwatch-agent/bin/config.json<<'EOF' { "agent": { "metrics_collection_interval": 10, "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" }, "metrics": { "namespace": "MyCustomNamespace", "metrics_collected": { "cpu": { "resources": \[ "\*" ], "measurement": \[ {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"}, {"name": "cpu_usage_nice", "unit": "Percent"}, "cpu_usage_guest" ], "totalcpu": false, "metrics_collection_interval": 10, "append_dimensions": { "customized_dimension_key\_1": "customized_dimension_value\_1", "customized_dimension_key\_2": "customized_dimension_value\_2" } }, "disk": { "resources": \[ "/", "/tmp" ], "measurement": \[ {"name": "free", "rename": "DISK_FREE", "unit": "Gigabytes"}, "total", "used" ], "ignore_file_system_types": \[ "sysfs", "devtmpfs" ], "metrics_collection_interval": 60, "append_dimensions": { "customized_dimension_key\_3": "customized_dimension_value\_3", "customized_dimension_key\_4": "customized_dimension_value\_4" } }, "diskio": { "resources": \[ "\*" ], "measurement": \[ "reads", "writes", "read_time", "write_time", "io_time" ], "metrics_collection_interval": 60 }, "swap": { "measurement": \[ "swap_used", "swap_free", "swap_used_percent" ] }, "mem": { "measurement": \[ "mem_used", "mem_cached", "mem_total" ], "metrics_collection_interval": 1 }, "net": { "resources": \[ "eth0" ], "measurement": \[ "bytes_sent", "bytes_recv", "drop_in", "drop_out" ] }, "netstat": { "measurement": \[ "tcp_established", "tcp_syn_sent", "tcp_close" ], "metrics_collection_interval": 60 }, "processes": { "measurement": \[ "running", "sleeping", "dead" ] } }, "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "aggregation_dimensions" : \[\["ImageId"], \["InstanceId", "InstanceType"], \["d1"],\[]], "force_flush_interval" : 30 }, "logs": { "logs_collected": { "files": { "collect_list": \[ { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log", "log_group_name": "amazon-cloudwatch-agent.log", "log_stream_name": "amazon-cloudwatch-agent.log", "timezone": "UTC" }, { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", "log_group_name": "test.log", "log_stream_name": "test.log", "timezone": "Local" } ] } }, "log_stream_name": "my_log_stream_name", "force_flush_interval" : 15 } } EOF sudo mkdir -p /usr/share/collectd/ sudo touch /usr/share/collectd/types.db ``` sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json 参考文档 - [手动创建或编辑 CloudWatch 代理配置文件](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html?trk=cndc-detail) - [使用命令行安装 CloudWatch 代理](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/installing-cloudwatch-agent-commandline.html?trk=cndc-detail) - [使用 AWS Systems Manager 安装 CloudWatch 代理](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/installing-cloudwatch-agent-ssm.html?trk=cndc-detail) - [创建 IAM 角色和用户以用于 CloudWatch 代理](https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html?trk=cndc-detail)