
🧠 Övervaka EC2-minne och disk med CloudWatch Agent: steg-för-steg-konfiguration
Din EC2-instans har slutat svara, men CloudWatch visar att allt är okej? Klassiskt. AWS tillhandahåller CPU-, nätverks- och disk-I/O-mätvärden direkt, men det visar inte minnesanvändning eller ledigt diskutrymme. De siffrorna finns gömda inuti den virtuella maskinen, och tills du plockar fram dem flyger du blint.
När minnet tar slut varnar inte instansen; den kraschar bara. OOM Killer avslutar processer i slumpmässig ordning, och du står där och gissar: gick en plugin sönder? Gick databasen ner? Den verkliga orsaken är att du fick slut på gigabyte RAM som du inte övervakade. Disken berättar samma historia: loggar, säkerhetskopior och temporära filer fyller upp lagringsutrymmet tyst, och en morgon ser du No space left on device.
Lösningen är CloudWatch Agent, den vanliga AWS-agenten som samlar in minne, disk, swap och ungefär två dussin andra systemmått och skickar dem till CloudWatch. Installationen tar 20 minuter och ryms inom free tier (10 anpassade mätvärden per månad). Nedan följer en steg-för-steg-guide från IAM till en färdig dashboard.
💡 Snabb översikt:
- Skapa en IAM-policy med
cloudwatch:PutMetricDataoch koppla den till en användare - Ladda ner och installera CloudWatch Agent på en Ubuntu-instans
- Konfigurera JSON-filen: minne, disk, swap
- Starta agenten och verifiera att mätvärden flödar till CloudWatch
- Bygg en anpassad dashboard med grafer för minnes- och diskanvändning
AWS identitets- och åtkomsthantering
Agenten behöver behörigheter för att skicka mätvärden till CloudWatch. Vi skapar en IAM-policy och kopplar den till en användare med programmatisk åtkomst.
IAM-policy
Öppna IAM-konsolen, gå till Policies → Create policy och växla till fliken JSON. Klistra in det här dokumentet:
1 { 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Sid": "CloudWatchAgentMetrics", 6 "Effect": "Allow", 7 "Action": [ 8 "cloudwatch:PutMetricData", 9 "ec2:DescribeTags", 10 "cloudwatch:GetMetricStatistics", 11 "cloudwatch:ListMetrics" 12 ], 13 "Resource": "*" 14 } 15 ] 16 }
Klicka på Review policy, ange ett namn (till exempel CloudWatchAgentPolicy) och klicka på Create policy.
IAM-användare
Gå till Users → Add user. Ange ett namn och se till att kryssa i rutan "Programmatic access"; detta ger det Access Key ID och Secret Access Key som agenten använder för autentisering.

På skärmen för behörigheter väljer du Attach existing policies directly. I filtret för policytyp väljer du Customer managed för att snabbt hitta CloudWatchAgentPolicy som du just skapade.

Markera policyn och klicka på Next → Create user. AWS visar åtkomstnycklarna. Spara Access Key ID och Secret Access Key direkt. Om du stänger sidan försvinner nycklarna för alltid, och du måste skapa dem igen.

Installera CloudWatch Agent
De gamla Perl-övervakningsskripten (CloudWatchMonitoringScripts-1.2.2.zip) har länge varit markerade som föråldrade. Den nuvarande metoden är den enhetliga CloudWatch Agent, som inte bara samlar in minne och disk utan även swap, CPU-belastning, nätverksgränssnitt och ungefär två dussin andra mätvärden direkt.
Nedladdning och installation
Anslut till instansen via SSH och ladda ner agentpaketet för Ubuntu:
1 wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
Installera paketet med dpkg:
1 sudo dpkg -i amazon-cloudwatch-agent.deb
Om pakethanteraren klagar på saknade beroenden installerar du dem med ett enda kommando:
1 sudo apt-get install -f
Agenten är installerad men vet ännu inte vilka mätvärden den ska samla in eller vilka nycklar som ska användas för CloudWatch-autentisering. Låt oss konfigurera den.
Obs: agenten är också tillgänglig via AWS Systems Manager (SSM). Om du har dussintals instanser är det smidigare att distribuera den centralt via Run Command utan SSH till varje maskin. För en eller två instanser är manuell installation enklare och snabbare.
Konfigurera agenten
Skapa konfigurationsfilen
CloudWatch Agent-konfigurationen är ett JSON-dokument som beskriver vilka mätvärden som ska samlas in och med vilket intervall. Kör den inbyggda guiden:
1 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
Guiden ställer flera frågor interaktivt: vilken servertyp (EC2/lokalt installerad), vart mätvärden ska skickas (CloudWatch) och vilka mätvärden som ska samlas in. För att följa minne och disk svarar du så här:
- Operativsystem: Linux
- Använder du Amazon EC2?: Ja
- Vilka mätvärden ska samlas in: Anpassade mätvärden (
memochdisk_used_percent) - Upplösning: 60 sekunder (Standard)
- Loggfiler: hoppa över om du inte behöver loggar
Guiden skapar en config.json-fil i katalogen /opt/aws/amazon-cloudwatch-agent/bin/. Här är ett minimalt fungerande exempel för minnesanvändning i procent + diskanvändning i procent + swap:
1 { 2 "agent": { 3 "metrics_collection_interval": 60, 4 "run_as_user": "root" 5 }, 6 "metrics": { 7 "metrics_collected": { 8 "mem": { 9 "measurement": [ 10 "mem_used_percent" 11 ] 12 }, 13 "disk": { 14 "measurement": [ 15 "disk_used_percent" 16 ], 17 "resources": [ 18 "/" 19 ] 20 }, 21 "swap": { 22 "measurement": [ 23 "swap_used_percent" 24 ] 25 } 26 } 27 } 28 }
Parametern resources för disk anger monteringspunkten: "/" är rotvolymen på EBS NVMe SSD, instansens primära lagring. Om du har ytterligare volymer (till exempel /data) lägger du till dem i arrayen.
Agentens autentiseringsuppgifter
Access-nycklarna som sparades under IAM-steget måste tillhandahållas agenten. Skapa en autentiseringsfil i användarens hemkatalog:
1 sudo nano /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Lägg till detta avsnitt:
1 [credentials] 2 shared_credential_profile = "AmazonCloudWatchAgent"
Lägg sedan till autentiseringsuppgifterna i den vanliga AWS-autentiseringsfilen:
1 aws configure --profile AmazonCloudWatchAgent
Systemet frågar efter Access Key ID, Secret Access Key och region. När du har fyllt i dem kan agenten skicka mätvärden för den IAM-användare du skapade.
Ett alternativt tillvägagångssätt är en IAM-roll kopplad till instansen. Detta är säkrare (inga nycklar lagras på disk) och enklare vid skalning. Om du startar EC2 med en IAM-roll som har cloudwatch:PutMetricData hämtar agenten behörigheterna automatiskt, och du kan hoppa över steget med autentiseringsuppgifter.
Testning
Starta agenten manuellt och kontrollera att mätvärden skickas:
1 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ 2 -a fetch-config \ 3 -m ec2 \ 4 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json \ 5 -s
Flaggan -s startar agenten som en tjänst. Inom en minut eller två dyker de första mätvärdena upp i CloudWatch. För att bekräfta att data flödar öppnar du CloudWatch-konsolen, går till Metrics → All metrics och letar upp namnrymden CWAgent (agenten skriver dit som standard).

Expandera namnrymden så ser du InstanceId-dimensioner uppdelade efter mätvärden: mem_used_percent, disk_used_percent och swap_used_percent. Klicka på valfri rad för att skapa en graf; du kan direkt verifiera att data kommer in och ser rimlig ut.
Fyra grundläggande mätvärden (minne, disk, swap, CPU) på två instanser blir 8 mätvärden. CloudWatchs kostnadsfria nivå inkluderar 10 anpassade mätvärden per månad, som beskrivs på prissidan. Du ryms inom den gränsen. Om du har fler än tre instanser kommer vissa mätvärden att överskrida gränsen, men kostnaden är blygsam: $0,30 per mätvärde och månad (AWS-data från och med 2026).
Konfigurera schemat
Som standard körs agenten som en systemd-tjänst och skickar mätvärden med det intervall som anges i metrics_collection_interval (60 sekunder i vår konfiguration). Inga ytterligare cron-poster behövs; systemd ser till att agenten hålls igång och startar om den kraschar.
Kontrollera statusen:
1 sudo systemctl status amazon-cloudwatch-agent
Kontrollera att tjänsten är active (running) och aktiverad för uppstart (enabled). Om inte, starta och aktivera den:
1 sudo systemctl enable amazon-cloudwatch-agent 2 sudo systemctl start amazon-cloudwatch-agent
Efter en omstart startar agenten automatiskt.
För en visuell demonstration av hela processen, från IAM till dashboard, se den här videon:
Bygga en anpassad dashboard
Mätvärdena strömmar in; nu behöver du paketera dem snyggt. Jag ska visa hur du bygger en dashboard för att övervaka en produktionsinstans: minne, disk, CPU-belastning och kreditbalans (för T-serien) på en skärm.
Skapa dashboarden
I CloudWatch-konsolen, gå till Dashboards → Create dashboard. Ange ett namn (till exempel Production-EC2) och välj en widget-typ.

Välj Line för den första grafen; denna typ passar bäst för att visa mätvärden över tid.

Graf-widget
Klicka på Add widget och välj typen Line, en enkel linjegraf och det bästa valet för de flesta mätvärden. I dialogrutan som öppnas, klicka på Configure och navigera till namnrymden CWAgent.

Hitta mätvärdet mem_used_percent för din instans (via InstanceId) och klicka på raden; CloudWatch visar omedelbart en graf.
Tips: typen Stacked area fungerar bra när en enskild widget har flera mätvärden (till exempel minne + swap); Number är användbart för att direkt avläsa det aktuella värdet (praktiskt i ett hörn av dashboarden); Text är för rubriker och anteckningar mellan grafer.
Finjustera grafen

Några inställningar som gör grafen läsbar:
Period: om agenten skickar mätvärden en gång i minuten, välj en 1-minutsperiod för att se datans fulla upplösning.
Title: byt namn på grafteckenförklaringen till något mänskligt läsbart, "RAM använt%" istället för
mem_used_percent / i-1234567890abcdef0.Y-axis maximum (Graph options): lås gränsen (till exempel 100 för procent eller 16 för 16 GB RAM). Utan detta autoskalar CloudWatch axeln, och en liten spik ser lika alarmerande ut som en kritisk situation. Med en fast gräns kan du direkt se hur nära kanten du är.

Klicka på Create widget; det första dashboard-blocket är klart. Upprepa för varje mätvärde: disk_used_percent, sedan swap_used_percent, sedan cpu_usage (ett inbyggt EC2-mätvärde, inte från CWAgent), och CPUCreditBalance för T-serien. Du kan dra, ändra storlek och redigera widgets. När allt ser bra ut, klicka på Save dashboard.

Dashboarden är klar. Lägg till den i favoriter (stjärnan i toppmenyn), och återvänd med ett klick när du behöver kontrollera instansens tillstånd före en deploy eller efter en trafikspik.
⁉️🤔 Vanliga frågor
Varför inkluderar inte standardmätvärdena för EC2 minne och disk?
AWS virtualiserar CPU och nätverk på hypervisor-nivå; dessa mätvärden är tillgängliga externt utan att gå in i gästoperativsystemet. Minne och disk är interna resurser i den virtuella maskinen; hypervisorn känner inte till dem. För att se dem behöver du en agent inuti operativsystemet som läser
/proc/meminfoochdfoch skickar datan till CloudWatch. Det är precis vad CloudWatch Agent gör: en gång i minuten frågar den systemräknare och skickar dem till namnrymdenCWAgent. Den fullständiga listan på ett tjugotal mätvärden finns i den officiella AWS-dokumentationen.
Hur mycket kostar detta?
För ett typiskt scenario med 1-2 instanser med 4 mätvärden vardera, ingenting. CloudWatch free tier inkluderar 10 anpassade mätvärden, 10 alarm och 3 dashboards per konto och månad, enligt CloudWatch prissida. Två instanser med 4 mätvärden vardera blir 8 av de 10 gratismätvärdena. Om du har fler än tre instanser kostar det 0,30 USD per mätvärde och månad att överskrida gränsen. För ett dussin servrar blir det 6-9 USD per månad, priset för att slippa överraskningar klockan tre på natten.
Varför är CloudWatch Agent bättre än de gamla Perl-skripten?
Perl-skripten (
mon-put-instance-data.pl) har varit officiellt föråldrade sedan 2023 och får inga uppdateringar. CloudWatch Agent är det officiellt stödda verktyget som skriver inte bara till CloudWatch utan också till Amazon Managed Prometheus; det samlar in mätvärden via StatsD och collectd; det kan skicka loggar och spår. Viktigast av allt, det integreras med Systems Manager, vilket innebär att du kan distribuera det till 50 instanser med ett enda kommando från konsolen, utan SSH. Om du fortfarande har Perl-skript igång, migrera: det gamlaawscreds.conf-formatet med nycklar i klartext på disk är ett säkerhetshål. CloudWatch Agent fungerar med IAM-roller och kräver inte att hemligheter lagras i en textfil.
Vad ska jag göra om mätvärden inte dyker upp i CloudWatch?
Kontrollera i ordning: (1) tjänstestatus via
systemctl status amazon-cloudwatch-agent, som ska varaactive; (2) agentloggar i/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log, där du hittar det specifika felet; (3) IAM-behörigheter, användaren eller rollen måste ha behörighetencloudwatch:PutMetricData; (4) region, agenten och konsolen måste peka mot samma AWS-region. Enligt min erfarenhet är den överväldigande majoriteten av problem antingen behörigheter eller regionfel.
Kan jag övervaka Windows-instanser?
Ja, CloudWatch Agent stöder Windows Server i samma utsträckning som Linux. Installationen sker via ett MSI-installationsprogram från samma S3-bucket (
amazon-cloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/). Konfigurationen använder samma JSON, men mätvärdesnamnen skiljer sig: istället förmem_used_percent, användMemory % Committed Bytes In Use. Konfigurationsguiden på Windows kommer automatiskt att ersätta med de korrekta namnen.
Vad minnes- och diskövervakning ger i praktiken
Du startade CloudWatch Agent på en Ubuntu-instans, konfigurerade insamling av minne, disk och swap, och lade till en dashboard med grafer. Vad förändrades? Exakt en sak: den blinda fläcken är borta. Du ser inte bara CPU och nätverk utan också de två främsta instansdödarna: minnesläckor och fulla diskar.
I praktiken innebär detta att du märker att minnet kryper uppåt tre dagar INNAN OOM Killer avslutar PHP-FPM. Du ser att disken fylldes nästan helt efter en temauppdatering och rensar loggarna INNAN databasen kraschar. Utan dessa mätvärden blir varje incident en post-mortem-utredning. Med dem får du en varning i kanalen en halvtimme före avbrottet.
Om du har fler än tre instanser, sätt upp CloudWatch Alarms på tröskelvärden (säg, mem_used_percent > 90 i 5 minuter) och koppla notifieringar via SNS till Slack eller Telegram. Agent + alarm = du får veta om problemet från AWS, inte från en kund.
Agentinstallation är en engångsinvestering på 20 minuter per instans. Därefter sköter den sig själv.



