How to monitor free disk space at AWS EC2 with Cloud Watch in windows
In Windows EC2 instance (tested on Server 2019) Download and install CloudWatch Agent based on your instance type.
AWS CloudWatch Agent Installation
After that you'll notice a new service called Amazon CloudWatch Agent: it won't start until you configure it.
To configure that run the wizard located at C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-config-wizard.exe
Answer to all questions (you can skip log analysis and choos Basic metric for free storage percentage) and eventually a file called config.json will be created at C:\Program Files\Amazon\AmazonCloudWatchAgent
Move this file to C:\ProgramData\Amazon\AmazonCloudWatchAgent, rename it as amazon-cloudwatch-agent.json and start the service Cloudwatch Agent.
The service should start and collect metrics,check the log to see if there's are any error
If in log located at C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs you see this...
2020/05/27 16:11:27 I! Config has been translated into TOML C:\ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.toml 2020-05-27T14:11:31Z I! cloudwatch: get unique roll up list [] 2020-05-27T14:11:31Z I! Starting AmazonCloudWatchAgent 2020-05-27T14:11:31Z I! Tags enabled: host=[your host] 2020-05-27T14:11:31Z I! Agent Config: Interval:1m0s, Quiet:false, Hostname:[your host], Flush Interval:1s 2020-05-27T14:11:31Z I! cloudwatch: publish with ForceFlushInterval: 1m0s, Publish Jitter: 23s 2020-05-27T14:11:31Z I! Started the statsd service on :8125 2020-05-27T14:11:31Z I! Statsd listener listening on: [::]:8125
...all's gone well, as long as you have attached a IAM role to your instance to give it permissions to report to cloudwatch.
See this: CloudWatch permissions
Then you can find all your new defined metrics at CWAgent Parameters section in Cloudwatch, so that you can create an alarm
- Download and install the latest EC2Config to your windows instance (https://aws.amazon.com/developertools/5562082477397515)
- Edit the settings file here C:\Program Files\Amazon\Ec2ConfigService\Settings\AWS.EC2.Windows.CloudWatch.json
Insert some counters in the appropriate place
{
"Id": "PerformanceCounterMemory",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Available MBytes",
"InstanceName": "",
"MetricName": "Available-Memory",
"Unit": "Gigabytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "PerformanceCounterDisk",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "LogicalDisk",
"CounterName": "% Free Space",
"InstanceName": "C:",
"MetricName": "FreeDiskPct",
"Unit": "Percent",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
}
Make sure to include them in the flow section:
"Flows": {
"Flows":
[
"(ApplicationEventLog,SystemEventLog),CloudWatchLogs",
"(PerformanceCounterMemory,PerformanceCounterDisk),CloudWatch"
]
}
Remember to set the key and secret of a user with cloudwatch policy rights.
- Restart the EC2Config service. Follow progress in the log: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
- Create an alarm in cloudwatch on your new FreeDiskPct counter.
This is how to configure a Windows 2016 EC2 instance to report free disk space (or any other performance counter on your server)
Download a sample
AWS.EC2.Windows.CloudWatch.json
file. This is where I found one. https://s3.amazonaws.com/ec2-downloads-windows/CloudWatchConfig/AWS.EC2.Windows.CloudWatch.jsonCopy the sample AWS.EC2.Windows.CloudWatch.json file on your Windows Server 2016 EC2 Instance here
C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\
Edit AWS.EC2.Windows.CloudWatch.json and set IsEnabled true
Add additional metrics as required. There is a sample one in the config for memory usage. Copy/paste this and alter the Metric name like this:
{
"Id": "PerformanceCounterDisk",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "LogicalDisk",
"CounterName": "% Free Space",
"InstanceName": "C:",
"MetricName": "FreeDiskPercentage",
"Unit": "Percent",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
}
Run Powershell as administrator and run
Restart-Service AmazonSSMAgent
New CloudWatch metrics appear almost instantly in AWS CloudWatch.
Configure AWS CloudWatch alarms as required.
Additionally, I made a short video with some tips on setting this up on Windows Server 2016.
https://www.youtube.com/watch?v=xKVrJJyG-4I
The following guide from AWS contains a step by step guide. http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/send_logs_to_cwl_instances.html#send_logs_cwl_configfile