Posted filed under Amazon AWS.


Monitoring EC2 with Custom Metrics


You can monitor your EC2 using CloudWatch using:

  • CPU
  • Network
  • Disk
  • Status Check

Please note that RAM Utilization is a customer metric. By Default Ec2 monitors is for 5 mins interval, unless you enable detailed monitoring which will then make it 1 min intervals ( it will cost more)


Let’s go to google and search for Amazon EC2 Metrics and Dimensions


we will do a lab and we will create a new EC2 and then we do customize Cloudwatch metric for Memory.


Step 1) We need to create a  CloudWatch Role for EC2 so the EC2 can send some information to CloudWatch


Step 2) Go to IAM , and create a new Role called EC2CloudWatch


Step 3) Pick CoudWatchFullAccess as a Policy


Step 4) Now we will go and create an EC2 instance, then attached above Role to it ; then we will use some Perl Script so that we get customize Memory Utilization


Step 5) Before we do our lab, let’s go to google and type Monitoring Memory and Disk Metrics for EC2 Linux instance

After we login into EC2 Linux, we will go to aparticular directory and run this Command


curl -O



Step 6) Now I will go to AWS and start new EC2 instance ( Linux)


Step 7) if you login into Linux, type these


sudo su

yum update –y


Step 8) Now we will install the Perl Script : ( install perl Syslogs and Protocols)


sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64


Step 9) Now I will make a directory that we will install all of our stuff


mkdir /cloudwatchlab

cd /cloudwatchlab

Step 10) now we will paste the curl commands from Amazon Websites

curl -O

Step 11) Now we will unzip it

Step 12) If you type ls we will see it did create a directory called aws-scripts-mon


Now I will remove the Zip file that we downloaded


rm –rf


Step 13) I go to the directory

cd aws-scripts-mon/

Then type ls and you see some perl script ( in green color)


Step 14) Now before we push these script to Ec2 , lets go back to AWS console and look at Cloudwatch and we will see there is no Metric for Memory , but after we push above perl scripts ; we will see the Memory Utilization metrics


Step 15) Go to the Dashboards and create a new Dashboards and put CPU utilization ( as we see we do not Memory Utilization)


Call the Dashboard EC2custommetric (make sure save it)


As you click on EC2 and you will see these metric (as I mentioned in the beginning of Lab)


You can monitor your EC2 using CloudWatch using:

  • CPU
  • Network
  • Disk
  • Status Check

Step 16) Now we go back to our terminal windows and copy and paste this command from AWS websites


I will put this line of code to test and see if our EC2 instance can talk to CloudWatch


./ –mem-util –verify –verbose


(Make sure run it at directory called aws-scripts-mon)


As we see we are ok Now.


Verification completed successfully. No actual metrics sent to CloudWatch.



Step 17) Now we will make sure we push the RAM utilization to cloud watch


Copy and paste


./ –mem-used-incl-cache-buff –mem-util –mem-used –mem-avail


As we see it say successful

Successfully reported metrics to CloudWatch. Reference Id: 37ce5b72-48ae-11e8-800c-6be073b72519


Step 18) Now we do not want to do manually the above task we want to automated and we can use a concept called “crontab


Step 19) Go to directory etc


cd /etc

nano crontab

then go all the way down and type


*/5 * * * * root ./ –mem-used-incl-cache-buff –mem-util –mem-used –mem-avail


Make sure in above remove the . and go to directory you had / cloudwatchlab/aws-scripts-mon


So correct line will be :

*/5 * * * * root /cloudwatchlab/aws-scripts-mon

/ –mem-used-incl-cache-buff –mem-util –mem-used –mem-avail


Hint remember the directory is case sensitive


Exit and make sure save it.


Comments are closed.