{"id":2277,"date":"2026-04-15T12:06:28","date_gmt":"2026-04-15T12:06:28","guid":{"rendered":"https:\/\/sreschool.com\/blog\/?p=2277"},"modified":"2026-04-27T12:11:23","modified_gmt":"2026-04-27T12:11:23","slug":"manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh","status":"publish","type":"post","link":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/","title":{"rendered":"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Lab Goal<\/h2>\n\n\n\n<p>Install and configure CloudWatch Agent manually inside an Ubuntu EC2 instance using SSH so that CloudWatch can collect:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memory usage<\/li>\n\n\n\n<li>Disk usage<\/li>\n\n\n\n<li>CPU details<\/li>\n\n\n\n<li>System logs<\/li>\n\n\n\n<li>Application logs, if available<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Prerequisites<\/h1>\n\n\n\n<p>Before logging into Ubuntu, make sure these are ready.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.1 EC2 Instance<\/h2>\n\n\n\n<p>You need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ubuntu EC2 instance running<\/li>\n\n\n\n<li>SSH access using key pair<\/li>\n\n\n\n<li>Security group allowing SSH port <code>22<\/code> from your IP<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1.2 IAM Role Attached to EC2<\/h2>\n\n\n\n<p>Your EC2 instance must have an IAM role with this AWS managed policy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CloudWatchAgentServerPolicy\n<\/code><\/pre>\n\n\n\n<p>Recommended also:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AmazonSSMManagedInstanceCore\n<\/code><\/pre>\n\n\n\n<p>Even though this guide uses SSH, SSM permission is useful for future console-based management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.3 Check Region<\/h2>\n\n\n\n<p>Remember the AWS Region where your EC2 instance is running, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ap-south-1\nus-east-1\neu-west-1\n<\/code><\/pre>\n\n\n\n<p>You will check CloudWatch in the same Region.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. SSH into Ubuntu EC2<\/h1>\n\n\n\n<p>From your local machine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i your-key.pem ubuntu@your-ec2-public-ip\n<\/code><\/pre>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i my-lab-key.pem ubuntu@13.201.10.25\n<\/code><\/pre>\n\n\n\n<p>After login, update packages:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Check System Architecture<\/h1>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uname -m\n<\/code><\/pre>\n\n\n\n<p>Expected output is usually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x86_64\n<\/code><\/pre>\n\n\n\n<p>or:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aarch64\n<\/code><\/pre>\n\n\n\n<p>Use this to choose the right CloudWatch Agent package.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Download CloudWatch Agent Package<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">For Ubuntu x86_64 \/ amd64<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/amazoncloudwatch-agent.s3.amazonaws.com\/ubuntu\/amd64\/latest\/amazon-cloudwatch-agent.deb\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">For Ubuntu ARM64 \/ aarch64<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/amazoncloudwatch-agent.s3.amazonaws.com\/ubuntu\/arm64\/latest\/amazon-cloudwatch-agent.deb\n<\/code><\/pre>\n\n\n\n<p>Most normal Ubuntu EC2 instances use <strong>amd64<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Install the CloudWatch Agent<\/h1>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg -i -E .\/amazon-cloudwatch-agent.deb\n<\/code><\/pre>\n\n\n\n<p>Verify installation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/opt\/aws\/amazon-cloudwatch-agent\/bin\/amazon-cloudwatch-agent-ctl -h\n<\/code><\/pre>\n\n\n\n<p>You can also check package status:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dpkg -l | grep amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Create CloudWatch Agent Configuration File<\/h1>\n\n\n\n<p>Now create the agent configuration file.<\/p>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/opt\/aws\/amazon-cloudwatch-agent\/etc\n<\/code><\/pre>\n\n\n\n<p>Open a file using nano:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/opt\/aws\/amazon-cloudwatch-agent\/etc\/amazon-cloudwatch-agent.json\n<\/code><\/pre>\n\n\n\n<p>Paste this configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"agent\": {\n    \"metrics_collection_interval\": 60,\n    \"run_as_user\": \"root\"\n  },\n  \"metrics\": {\n    \"namespace\": \"CWAgent\",\n    \"append_dimensions\": {\n      \"InstanceId\": \"${aws:InstanceId}\",\n      \"InstanceType\": \"${aws:InstanceType}\",\n      \"ImageId\": \"${aws:ImageId}\"\n    },\n    \"metrics_collected\": {\n      \"cpu\": {\n        \"measurement\": &#91;\n          \"cpu_usage_idle\",\n          \"cpu_usage_user\",\n          \"cpu_usage_system\",\n          \"cpu_usage_iowait\"\n        ],\n        \"metrics_collection_interval\": 60,\n        \"totalcpu\": true\n      },\n      \"mem\": {\n        \"measurement\": &#91;\n          \"mem_used_percent\",\n          \"mem_available\",\n          \"mem_total\"\n        ],\n        \"metrics_collection_interval\": 60\n      },\n      \"disk\": {\n        \"measurement\": &#91;\n          \"used_percent\",\n          \"free\",\n          \"total\"\n        ],\n        \"metrics_collection_interval\": 60,\n        \"resources\": &#91;\n          \"\/\"\n        ]\n      },\n      \"diskio\": {\n        \"measurement\": &#91;\n          \"reads\",\n          \"writes\",\n          \"read_bytes\",\n          \"write_bytes\"\n        ],\n        \"metrics_collection_interval\": 60,\n        \"resources\": &#91;\n          \"*\"\n        ]\n      },\n      \"net\": {\n        \"measurement\": &#91;\n          \"bytes_sent\",\n          \"bytes_recv\",\n          \"packets_sent\",\n          \"packets_recv\"\n        ],\n        \"metrics_collection_interval\": 60,\n        \"resources\": &#91;\n          \"*\"\n        ]\n      },\n      \"swap\": {\n        \"measurement\": &#91;\n          \"swap_used_percent\"\n        ],\n        \"metrics_collection_interval\": 60\n      }\n    }\n  },\n  \"logs\": {\n    \"logs_collected\": {\n      \"files\": {\n        \"collect_list\": &#91;\n          {\n            \"file_path\": \"\/var\/log\/syslog\",\n            \"log_group_name\": \"\/aws\/ec2\/ubuntu\/syslog\",\n            \"log_stream_name\": \"{instance_id}\"\n          },\n          {\n            \"file_path\": \"\/var\/log\/auth.log\",\n            \"log_group_name\": \"\/aws\/ec2\/ubuntu\/auth\",\n            \"log_stream_name\": \"{instance_id}\"\n          },\n          {\n            \"file_path\": \"\/var\/log\/cloud-init.log\",\n            \"log_group_name\": \"\/aws\/ec2\/ubuntu\/cloud-init\",\n            \"log_stream_name\": \"{instance_id}\"\n          }\n        ]\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Save the file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CTRL + O\nENTER\nCTRL + X\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Start CloudWatch Agent Manually<\/h1>\n\n\n\n<p>Run this command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo \/opt\/aws\/amazon-cloudwatch-agent\/bin\/amazon-cloudwatch-agent-ctl \\\n-a fetch-config \\\n-m ec2 \\\n-c file:\/opt\/aws\/amazon-cloudwatch-agent\/etc\/amazon-cloudwatch-agent.json \\\n-s\n<\/code><\/pre>\n\n\n\n<p>Meaning:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>-a fetch-config<\/code><\/td><td>Load configuration<\/td><\/tr><tr><td><code>-m ec2<\/code><\/td><td>Running on EC2<\/td><\/tr><tr><td><code>-c file:...<\/code><\/td><td>Use local config file<\/td><\/tr><tr><td><code>-s<\/code><\/td><td>Start the agent<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Check Agent Status<\/h1>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo \/opt\/aws\/amazon-cloudwatch-agent\/bin\/amazon-cloudwatch-agent-ctl -m ec2 -a status\n<\/code><\/pre>\n\n\n\n<p>Expected output should show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"status\": \"running\"\n}\n<\/code><\/pre>\n\n\n\n<p>Also check with systemd:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<p>Enable it to start after reboot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Check Agent Logs on Ubuntu<\/h1>\n\n\n\n<p>If something goes wrong, check the CloudWatch Agent local log:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -f \/opt\/aws\/amazon-cloudwatch-agent\/logs\/amazon-cloudwatch-agent.log\n<\/code><\/pre>\n\n\n\n<p>Common problems appear here, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IAM permission issue<\/li>\n\n\n\n<li>Invalid JSON config<\/li>\n\n\n\n<li>Wrong log file path<\/li>\n\n\n\n<li>CloudWatch endpoint access problem<\/li>\n\n\n\n<li>Region detection issue<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Verify Metrics in AWS Console<\/h1>\n\n\n\n<p>Now go to AWS Console.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>CloudWatch<\/strong>.<\/li>\n\n\n\n<li>Go to <strong>Metrics<\/strong>.<\/li>\n\n\n\n<li>Click <strong>All metrics<\/strong>.<\/li>\n\n\n\n<li>Look for namespace:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>CWAgent\n<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Open it.<\/li>\n\n\n\n<li>Look for your EC2 instance ID.<\/li>\n\n\n\n<li>Select metrics such as:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>mem_used_percent\ndisk_used_percent\ncpu_usage_user\ncpu_usage_system\nswap_used_percent\n<\/code><\/pre>\n\n\n\n<ol start=\"8\" class=\"wp-block-list\">\n<li>Graph the metrics.<\/li>\n<\/ol>\n\n\n\n<p>It may take a few minutes for metrics to appear.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Verify Logs in AWS Console<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>CloudWatch<\/strong>.<\/li>\n\n\n\n<li>Go to <strong>Logs<\/strong>.<\/li>\n\n\n\n<li>Open <strong>Log groups<\/strong> or <strong>Log Management<\/strong>.<\/li>\n\n\n\n<li>Look for:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/aws\/ec2\/ubuntu\/syslog\n\/aws\/ec2\/ubuntu\/auth\n\/aws\/ec2\/ubuntu\/cloud-init\n<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Open a log group.<\/li>\n\n\n\n<li>Open the log stream named with your EC2 instance ID.<\/li>\n\n\n\n<li>Confirm log events are visible.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Run Basic Logs Insights Query<\/h1>\n\n\n\n<p>Go to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CloudWatch \u2192 Logs \u2192 Logs Insights\n<\/code><\/pre>\n\n\n\n<p>Select:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/aws\/ec2\/ubuntu\/syslog\n<\/code><\/pre>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fields @timestamp, @message\n| sort @timestamp desc\n| limit 20\n<\/code><\/pre>\n\n\n\n<p>Search for errors:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fields @timestamp, @message\n| filter @message like \/error|ERROR|failed|FAILED|Exception\/\n| sort @timestamp desc\n| limit 20\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Create a Memory Alarm<\/h1>\n\n\n\n<p>Now create an alarm from the new CloudWatch Agent metric.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>CloudWatch<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Alarms<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Create alarm<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Select metric<\/strong>.<\/li>\n\n\n\n<li>Choose:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>CWAgent\n<\/code><\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Select:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>mem_used_percent\n<\/code><\/pre>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>Choose your instance.<\/li>\n\n\n\n<li>Click <strong>Select metric<\/strong>.<\/li>\n\n\n\n<li>Configure:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>Statistic: Average\nPeriod: 5 minutes\nCondition: Greater than 80\n<\/code><\/pre>\n\n\n\n<ol start=\"10\" class=\"wp-block-list\">\n<li>Name it:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>Ubuntu-EC2-High-Memory-Usage\n<\/code><\/pre>\n\n\n\n<ol start=\"11\" class=\"wp-block-list\">\n<li>Create the alarm.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Create a Disk Usage Alarm<\/h1>\n\n\n\n<p>Repeat the same process with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>disk_used_percent\n<\/code><\/pre>\n\n\n\n<p>Suggested threshold:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Greater than 80\n<\/code><\/pre>\n\n\n\n<p>Alarm name:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ubuntu-EC2-High-Disk-Usage\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Create a Basic Dashboard<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>CloudWatch<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Dashboards<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Create dashboard<\/strong>.<\/li>\n\n\n\n<li>Name:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>Ubuntu-EC2-CloudWatch-Agent-Dashboard\n<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Add a <strong>Line<\/strong> widget.<\/li>\n\n\n\n<li>Add these <code>CWAgent<\/code> metrics:\n<ul class=\"wp-block-list\">\n<li><code>mem_used_percent<\/code><\/li>\n\n\n\n<li><code>disk_used_percent<\/code><\/li>\n\n\n\n<li><code>cpu_usage_user<\/code><\/li>\n\n\n\n<li><code>cpu_usage_system<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Add an alarm widget.<\/li>\n\n\n\n<li>Select your memory and disk alarms.<\/li>\n\n\n\n<li>Save dashboard.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Useful Agent Commands<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Start Agent<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Stop Agent<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Restart Agent<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Check Status<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Reload Config and Start<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo \/opt\/aws\/amazon-cloudwatch-agent\/bin\/amazon-cloudwatch-agent-ctl \\\n-a fetch-config \\\n-m ec2 \\\n-c file:\/opt\/aws\/amazon-cloudwatch-agent\/etc\/amazon-cloudwatch-agent.json \\\n-s\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">View Agent Logs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -f \/opt\/aws\/amazon-cloudwatch-agent\/logs\/amazon-cloudwatch-agent.log\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. Common Issues and Fixes<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Issue 1: Metrics Not Showing in CloudWatch<\/h2>\n\n\n\n<p>Check:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status amazon-cloudwatch-agent\n<\/code><\/pre>\n\n\n\n<p>Check logs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -n 100 \/opt\/aws\/amazon-cloudwatch-agent\/logs\/amazon-cloudwatch-agent.log\n<\/code><\/pre>\n\n\n\n<p>Common fixes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Attach <code>CloudWatchAgentServerPolicy<\/code>.<\/li>\n\n\n\n<li>Check AWS Region.<\/li>\n\n\n\n<li>Wait 2\u20135 minutes.<\/li>\n\n\n\n<li>Restart the agent.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Issue 2: Logs Not Showing<\/h2>\n\n\n\n<p>Check if file exists:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -l \/var\/log\/syslog\nls -l \/var\/log\/auth.log\n<\/code><\/pre>\n\n\n\n<p>If the file does not exist, remove it from the config or use a valid log file.<\/p>\n\n\n\n<p>Then restart:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo \/opt\/aws\/amazon-cloudwatch-agent\/bin\/amazon-cloudwatch-agent-ctl \\\n-a fetch-config \\\n-m ec2 \\\n-c file:\/opt\/aws\/amazon-cloudwatch-agent\/etc\/amazon-cloudwatch-agent.json \\\n-s\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Issue 3: JSON Config Error<\/h2>\n\n\n\n<p>Validate JSON:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 -m json.tool \/opt\/aws\/amazon-cloudwatch-agent\/etc\/amazon-cloudwatch-agent.json\n<\/code><\/pre>\n\n\n\n<p>If valid, it will print formatted JSON.<\/p>\n\n\n\n<p>If invalid, fix missing commas, brackets, or quotes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Issue 4: Permission Error<\/h2>\n\n\n\n<p>Check IAM role from EC2 console.<\/p>\n\n\n\n<p>The instance role must include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CloudWatchAgentServerPolicy\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Final Lab Flow for Students<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>1. SSH into Ubuntu EC2.\n2. Check architecture.\n3. Download CloudWatch Agent package.\n4. Install the package.\n5. Create JSON config file.\n6. Start agent with config.\n7. Check agent status.\n8. Verify CWAgent metrics in CloudWatch.\n9. Verify log groups in CloudWatch Logs.\n10. Run Logs Insights query.\n11. Create memory alarm.\n12. Create disk alarm.\n13. Create dashboard.\n<\/code><\/pre>\n\n\n\n<p>That is the full manual SSH-based installation and configuration process for AWS CloudWatch Agent on Ubuntu EC2.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lab Goal Install and configure CloudWatch Agent manually inside an Ubuntu EC2 instance using SSH so that CloudWatch can collect: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2277","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School\" \/>\n<meta property=\"og:description\" content=\"Lab Goal Install and configure CloudWatch Agent manually inside an Ubuntu EC2 instance using SSH so that CloudWatch can collect: [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/\" \/>\n<meta property=\"og:site_name\" content=\"SRE School\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-15T12:06:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-27T12:11:23+00:00\" \/>\n<meta name=\"author\" content=\"Rajesh Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rajesh Kumar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/\",\"url\":\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/\",\"name\":\"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School\",\"isPartOf\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#website\"},\"datePublished\":\"2026-04-15T12:06:28+00:00\",\"dateModified\":\"2026-04-27T12:11:23+00:00\",\"author\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\"},\"breadcrumb\":{\"@id\":\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sreschool.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sreschool.com\/blog\/#website\",\"url\":\"https:\/\/sreschool.com\/blog\/\",\"name\":\"SRESchool\",\"description\":\"Master SRE. Build Resilient Systems. Lead the Future of Reliability\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sreschool.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\",\"name\":\"Rajesh Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"caption\":\"Rajesh Kumar\"},\"sameAs\":[\"http:\/\/sreschool.com\/blog\"],\"url\":\"https:\/\/sreschool.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/","og_locale":"en_US","og_type":"article","og_title":"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School","og_description":"Lab Goal Install and configure CloudWatch Agent manually inside an Ubuntu EC2 instance using SSH so that CloudWatch can collect: [&hellip;]","og_url":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/","og_site_name":"SRE School","article_published_time":"2026-04-15T12:06:28+00:00","article_modified_time":"2026-04-27T12:11:23+00:00","author":"Rajesh Kumar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rajesh Kumar","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/","url":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/","name":"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH - SRE School","isPartOf":{"@id":"https:\/\/sreschool.com\/blog\/#website"},"datePublished":"2026-04-15T12:06:28+00:00","dateModified":"2026-04-27T12:11:23+00:00","author":{"@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201"},"breadcrumb":{"@id":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sreschool.com\/blog\/manual-installation-aws-cloudwatch-agent-on-ubuntu-ec2-using-ssh\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sreschool.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Manual Installation: AWS CloudWatch Agent on Ubuntu EC2 Using SSH"}]},{"@type":"WebSite","@id":"https:\/\/sreschool.com\/blog\/#website","url":"https:\/\/sreschool.com\/blog\/","name":"SRESchool","description":"Master SRE. Build Resilient Systems. Lead the Future of Reliability","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sreschool.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":"Person","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201","name":"Rajesh Kumar","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","caption":"Rajesh Kumar"},"sameAs":["http:\/\/sreschool.com\/blog"],"url":"https:\/\/sreschool.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/comments?post=2277"}],"version-history":[{"count":1,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2277\/revisions"}],"predecessor-version":[{"id":2278,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2277\/revisions\/2278"}],"wp:attachment":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/media?parent=2277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/categories?post=2277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/tags?post=2277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}