本文更新于2023年9月,中国区测试通过
一、背景
为了实现Windows的内存监控、文件系统使用率监控等,需要部署CloudWatch Agent。
在创建EC2时候,这个工作可以通过Userdata脚本自动部署。如果EC2 Windows创建时候没有使用Userdata,那么也可以通过Powershell执行命令完成自动安装。
此外,为了方便安装软件,本文的脚本也将部署choco包管理工具。
二、准备工作
1、为CloudWatch生成具有上传监控数据的IAM Role角色
进入IAM,点击左侧角色,点击右侧新建角色。如下截图。

在界面上选择AWS Service,从下方选择使用本角色的服务是EC2,点击下一步继续。如下截图。

从策略界面中,搜索如下两个策略:
- AmazonSSMManagedInstanceCore
- CloudWatchAgentAdminPolicy
注意:每次只能搜索一条。因此搜索一条,选中一条;然后继续搜索另外一条。另外很多策略名字很相似,只有几个字母的差别,请务必仔细选择正确的策略。策略一个字母的差别就无法正常工作。如下截图。

选中后点击下一步,设置IAM Role的名字,例如ec2-ssm-login
等名字,并保存下来用于下一步配置。
2、预设CloudWatch Agent的配置文件
构建CloudWatch Agent for Windows所需要的配置文件,如下例子是最小化的监控参数,只采集内存使用率和文件系统使用率。如果您需要监控更多Windows OS操作系统级别的参数,那么请参考本文末尾的CloudWatch文档链接中的配置说明。
{
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
}
}
}
}
本文已经将这个文件放到了可以在AWS中国区和AWS海外区域部署的CDN下载点上,并且加入了Userdata脚本,按照下文即可自动安装。
三、新创建EC2时候通过Userdata脚本自动安装
本章节讲述新创建一台EC2时候通过Userdata脚本自动部署CloudWatch。如果您是为现有EC2配置CloudWatch Agent,那么请跳过本章节。
1、创建EC2时使用IAM Role
在2023年新版的创建EC2界面中,点击创建页面最下方的Advance
高级选项按钮,展开菜单。如下截图。

在选择IAM Instance Profile
的位置,选择上一步创建的IAM角色的名字。如下截图中选择的名称部分请替换为您前一步自己指定的名字。如下截图。

不要急于创建EC2,继续向下滚动页面。
2、打开启用增强监控的选项
在高级设置部分,继续向下滚动页面,找到Detailed CloudWatch monitoring
增强监控的位置,将其选为启用。如下截图。

不要急于创建EC2,继续向下滚动页面。
3、填写Userdata脚本
向下滚动到页面最下方,然后输入如下脚本。如下截图。

在AWS中国区部署CloudWatch Agent时候从中国区S3下载Agent的脚本内容如下:
<powershell>
# Cloudwatch Agent download from China
# 以下为中国区域下载例子,海外区域请替换下载地址
Invoke-WebRequest https://s3.cn-north-1.amazonaws.com.cn/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi -O C:\Users\Administrator\Downloads\amazon-cloudwatch-agent.msi
# Installation
Start-Process C:\Users\Administrator\Downloads\amazon-cloudwatch-agent.msi
rm -Force C:\Users\Administrator\Downloads\amazon-cloudwatch-agent.msi
# Download configuration file for Windows
Invoke-WebRequest https://blogimg.bitipcman.com/workshop/cloudwatch/cloudwatch-windows-config.json -O 'C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json'
# Start service
# Please keep & in the front of below command
# 如下命令前边的&符号不要去掉,否则无法执行
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json"
# Choco package management
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install grep -y
# Finally, Restart EC2
# 以上配置不需要重启即可生效,如果改动了本脚本还安装了别的软件可按需重启
# Restart-Computer -Force
</powershell>
如果是海外区域部署,请替换把第一段的下载地址从中国区的:
https://s3.cn-north-1.amazonaws.com.cn/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi
替换为海外区域的:
https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi
这样即可在快速完成下载,不会遇到网络问题导致下载失败。
最后按创建按钮,完成EC2创建。
四、现有EC2的配置
本章节讲述为已经存在的现有EC2配置CloudWatch Agent。如果您是新创建一台EC2、且已经按照上一章节的流程配置好了Userdata,那么本章节请跳过。
1、为EC2额外配置CloudWatch Agent上传监控数据需要的IAM Role
如果您的EC2以前绑定过别的IAM Role,那么可以找到现有Role后,向其中添加一条名为CloudWatchAgentAdminPolicy
的IAM Policy即可生效。如果您的EC2之前没有绑定任何IAM Role,那么请按照本流程做配置。
找到现有EC2选中之,点击更多操作,从下拉框中找到安全,选择Modify IAM Role
。如下截图。

在选择IAM Role的位置,选择前文创建的IAM Role。然后点击保存生效。如下截图。

如果EC2之前没有绑定过IAM Role,可能需要30分钟才能完全生效。如果您不想等待30分钟,可重启EC2即可立刻生效。如果是生产环境不能重启,那么什么都不用做,只需要等待5~30分钟后IAM Role完全生效。(下文有方法验证是否生效)
2、打开EC2增强监控
选中EC2,选择更多操作,从下拉框中找到增强监控,并启用之。如下截图。

3、通过Powershell执行命令安装CloudWatch Agent
点击开始菜单,对其中的Powershell点击鼠标右键,选择使用管理员权限打开Powershell。如下截图。

打开Powershell后,执行上文Userdata的Powershell脚本即可。执行时候请注意不需要输入Userdata开头和结尾的<powershell>及</powershell>标识。这两个标签只是在Userdata使用,在Windows的Powershell下直接执行脚本即可。
至此Agent安装完成。
五、验证EC2 Instance Profile绑定的IAM Role生效
为了验证EC2 Instance Profile绑定的IAM Role生效,也就意味着EC2有权限上传监控数据到CloudWatch了,这里使用Session Manager登陆EC2来进行测试。
进入EC2界面,选中要登陆的Windows EC2,点击页面上方的“连接”按钮。如下截图。

在页面上方连接方式的位置,选择Session Manager,点击连接。即可打开Powershell控制台。如下截图。

登录成功的话,就表示EC2 Instance Profile绑定的IAM Role生效。如下截图。

六、检查CloudWatch数据
当新EC2启动完成大约5~10分钟后,访问Cloudwatch,检查。监控数据是否正常发布。如果是先有EC2修改配置,那么根据IAM Role生效时间,可能需要更长(例如30分钟)完全生效。
进入CloudWatch服务,首先选择正确的区域,因为CloudWatch是区域型的服务。然后点击All metrics
所有指标查看监控数据,再找到Custome namespaces
自定义命名空间,从中可以看到名为CWAgent
的目录,点击进入。如下截图。

即可看到Cloudwatch Windows Agent返回的内存使用情况数据。

由于Agent刚配置好,监控数据看起来曲线还不连续,等待一段时间,即可观察到连续的曲线。
至此配置完成。
七、参考资料
CloudWatch Agent下载(中国区域):
CloudWatch Agent下载(海外区域):
Cloudwatch Agent安装说明:
更多CloudWatch参数的配置说明: