
🧠 Overvåking av EC2-minne og -disk med CloudWatch Agent: trinnvis oppsett
EC2-instansen din har sluttet å svare, men CloudWatch viser at alt er i orden? Klassisk. AWS leverer CPU-, nettverks- og disk-I/O-metrikker ut av boksen, men det viser ikke minnebruk eller ledig diskplass. Disse tallene er skjult inne i den virtuelle maskinen, og inntil du henter dem ut, flyr du i blinde.
Når minnet går tomt, advarer ikke instansen deg; den krasjer bare. OOM Killer terminerer prosesser i tilfeldig rekkefølge, og du sitter igjen og gjetter: feilet en plugin? Gikk databasen ned? Den faktiske årsaken er at du gikk tom for gigabyte med RAM du ikke overvåket. Disk forteller samme historie: logger, sikkerhetskopier og midlertidige filer fyller opp lagringsplassen lydløst, og en morgen ser du No space left on device.
Løsningen er CloudWatch Agent, standardagenten fra AWS som samler inn minne, disk, swap og omtrent to dusin andre systemmetrikker og sender dem til CloudWatch. Oppsett tar 20 minutter og passer innenfor gratisnivået (10 egendefinerte metrikker per måned). Nedenfor følger en trinnvis veiledning fra IAM til et ferdig dashbord.
💡 Rask oversikt:
- Opprett en IAM-policy med
cloudwatch:PutMetricDataog knytt den til en bruker - Last ned og installer CloudWatch Agent på en Ubuntu-instans
- Konfigurer JSON-filen: minne, disk, swap
- Start agenten og bekreft at metrikker strømmer til CloudWatch
- Bygg et egendefinert dashbord med grafer for minne- og diskbruk
AWS identitets- og tilgangsstyring
Agenten trenger tillatelser til å sende metrikker til CloudWatch. Vi oppretter en IAM-policy og knytter den til en bruker med programmatisk tilgang.
IAM-policy
Åpne IAM-konsollen, gå til Policies → Create policy, og bytt til JSON-fanen. Lim inn dette 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 }
Klikk Review policy, angi et navn (for eksempel CloudWatchAgentPolicy), og klikk Create policy.
IAM-bruker
Gå til Users → Add user. Angi et navn og sørg for å huke av for «Programmatic access»; dette gir Access Key ID og Secret Access Key som agenten vil bruke for autentisering.

På tillatelsesskjermen velger du Attach existing policies directly. I filteret for policytype velger du Customer managed for raskt å finne CloudWatchAgentPolicy du nettopp opprettet.

Huk av policyen og klikk Next → Create user. AWS viser tilgangsnøklene. Lagre Access Key ID og Secret Access Key med en gang. Hvis du lukker siden, forsvinner nøklene for alltid, og du må opprette dem på nytt.

Installere CloudWatch Agent
De gamle Perl-overvåkingsskriptene (CloudWatchMonitoringScripts-1.2.2.zip) har lenge vært merket som utdaterte. Den nåværende tilnærmingen er den enhetlige CloudWatch Agent, som samler inn ikke bare minne og disk, men også swap, CPU-belastning, nettverksgrensesnitt og omtrent to dusin andre metrikker ut av boksen.
Nedlasting og installasjon
Koble til instansen via SSH og last ned agentpakken for Ubuntu:
1 wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
Installer pakken med dpkg:
1 sudo dpkg -i amazon-cloudwatch-agent.deb
Hvis pakkebehandleren klager over manglende avhengigheter, installer dem med én enkelt kommando:
1 sudo apt-get install -f
Agenten er installert, men vet ennå ikke hvilke metrikker som skal samles inn eller hvilke nøkler som skal brukes for CloudWatch-autentisering. La oss konfigurere den.
Merk: agenten er også tilgjengelig via AWS Systems Manager (SSM). Hvis du har dusinvis av instanser, er det mer praktisk å distribuere den sentralt via Run Command uten SSH til hver maskin. For én eller to instanser er manuell installasjon enklere og raskere.
Konfigurere agenten
Opprette konfigurasjonsfilen
CloudWatch Agent-konfigurasjonen er et JSON-dokument som beskriver hvilke metrikker som skal samles inn og med hvilket intervall. Kjør den innebygde veiviseren:
1 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
Veiviseren stiller flere spørsmål interaktivt: hvilken servertype (EC2/on-premises), hvor metrikker skal sendes (CloudWatch), og hvilke metrikker som skal samles inn. For å overvåke minne og disk, svar som følger:
- Operativsystem: Linux
- Bruker du Amazon EC2?: Ja
- Hvilke metrikker skal samles inn: Egendefinerte metrikker (
memogdisk_used_percent) - Oppløsning: 60 sekunder (Standard)
- Loggfiler: hopp over hvis du ikke trenger logger
Veiviseren genererer en config.json-fil i katalogen /opt/aws/amazon-cloudwatch-agent/bin/. Her er et minimalt fungerende eksempel for minnebruk i prosent + diskbruk i prosent + 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 }
resources-parameteren for disk angir monteringspunktet: "/" er rotvolumet på EBS NVMe SSD, instansens primære lagring. Hvis du har ekstra volumer (for eksempel /data), legg dem til i listen.
Agentlegitimasjon
Tilgangsnøklene som ble lagret under IAM-steget må gis til agenten. Opprett en legitimasjonsfil i brukerens hjemmekatalog:
1 sudo nano /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Legg til denne seksjonen:
1 [credentials] 2 shared_credential_profile = "AmazonCloudWatchAgent"
Legg deretter til legitimasjonen i standard AWS-legitimasjonsfil:
1 aws configure --profile AmazonCloudWatchAgent
Systemet vil be om Access Key ID, Secret Access Key og region. Etter at du har fylt dem inn, kan agenten sende metrikker på vegne av IAM-brukeren du opprettet.
En alternativ tilnærming er en IAM-rolle knyttet til instansen. Dette er sikrere (ingen nøkler lagret på disk) og enklere ved skalering. Hvis du starter EC2 med en IAM-rolle som har cloudwatch:PutMetricData, vil agenten plukke opp tillatelsene automatisk, og du kan hoppe over legitimasjonssteget.
Testing
Start agenten manuelt og bekreft at metrikker blir sendt:
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
Flagget -s starter agenten som en tjeneste. I løpet av et minutt eller to vil de første metrikkene dukke opp i CloudWatch. For å bekrefte at data flyter, åpne CloudWatch-konsollen, gå til Metrics → All metrics, og finn navnerommet CWAgent (agenten skriver dit som standard).

Utvid navnerommet, så ser du InstanceId-dimensjoner brutt ned på metrikker: mem_used_percent, disk_used_percent og swap_used_percent. Klikk på en rad for å generere en graf; du kan umiddelbart bekrefte at data ankommer og ser fornuftige ut.
Fire grunnleggende metrikker (minne, disk, swap, CPU) på to instanser utgjør 8 metrikker. CloudWatch sitt gratisnivå inkluderer 10 egendefinerte metrikker per måned, som beskrevet på prissiden. Du holder deg innenfor den grensen. Hvis du har mer enn tre instanser, vil noen metrikker overskride grensen, men kostnaden er beskjeden: $0,30 per metrikk per måned (AWS-data per 2026).
Sette opp tidsplanen
Som standard kjører agenten som en systemd-tjeneste og sender metrikker med intervallet spesifisert i metrics_collection_interval (60 sekunder i vår konfigurasjon). Ingen ekstra cron-oppføringer er nødvendig; systemd sørger for at agenten holder seg i live og starter på nytt hvis den krasjer.
Sjekk statusen:
1 sudo systemctl status amazon-cloudwatch-agent
Bekreft at tjenesten er active (running) og aktivert for oppstart (enabled). Hvis ikke, start og aktiver den:
1 sudo systemctl enable amazon-cloudwatch-agent 2 sudo systemctl start amazon-cloudwatch-agent
Etter en omstart starter agenten automatisk.
For en visuell demonstrasjon av hele prosessen, fra IAM til dashbord, se denne videoen:
Bygge et tilpasset dashbord
Metrikkene strømmer inn; nå må du pakke dem pent inn. Jeg skal vise deg hvordan du bygger et dashbord for overvåking av en produksjonsinstans: minne, disk, CPU-belastning og kredittsaldo (for T-serien) på én skjerm.
Opprette dashbordet
Gå til Dashboards → Create dashboard i CloudWatch-konsollen. Skriv inn et navn (for eksempel Production-EC2) og velg en widget-type.

Velg Line for den første grafen; denne typen egner seg best for å vise metrikker over tid.

Graf-widget
Klikk Add widget og velg typen Line, en enkel linjegraf og det beste valget for de fleste metrikker. I dialogen som åpnes klikker du Configure og navigerer til navnerommet CWAgent.

Finn metrikken mem_used_percent for instansen din (etter InstanceId) og klikk på raden; CloudWatch vil umiddelbart vise en graf.
Tips: typen Stacked area fungerer godt når én enkelt widget har flere metrikker (for eksempel minne + swap); Number er nyttig for å umiddelbart lese gjeldende verdi (praktisk i et hjørne av dashbordet); Text er for overskrifter og notater mellom grafer.
Finjustere grafen

Noen få innstillinger som gjør grafen lesbar:
Period: hvis agenten sender metrikker én gang i minuttet, velg en 1-minutts periode for å se dataenes fulle oppløsning.
Title: gi graftegnforklaringen et menneskevennlig navn, «RAM brukt%» i stedet for
mem_used_percent / i-1234567890abcdef0.Y-akse maksimum (Graph options): fastsett grensen (for eksempel 100 for prosenter eller 16 for 16 GB RAM). Uten dette vil CloudWatch autoskalere aksen, og en liten topp ser like alarmerende ut som en kritisk situasjon. Med en fast grense kan du med et øyekast se hvor nær kanten du er.

Klikk Create widget; den første dashbordblokken er klar. Gjenta for hver metrikk: disk_used_percent, deretter swap_used_percent, så cpu_usage (en innebygd EC2-metrikk, ikke fra CWAgent), og CPUCreditBalance for T-serien. Du kan dra, endre størrelse og redigere widgets. Når alt ser riktig ut, klikker du Save dashboard.

Dashbordet er klart. Legg det til i favoritter (stjernen i toppmenyen), og gå tilbake med ett klikk når du trenger å sjekke instansens tilstand før en deploy eller etter en trafikktopp.
⁉️🤔 Ofte stilte spørsmål
Hvorfor inkluderer ikke standard EC2-metrikker minne og disk?
AWS virtualiserer CPU og nettverk på hypervisor-nivå; disse metrikkene er tilgjengelige eksternt uten å gå inn i gjeste-OS-et. Minne og disk er interne ressurser i den virtuelle maskinen; hypervisoren kjenner ikke til dem. For å se dem trenger du en agent inne i OS-et som leser
/proc/meminfoogdfog sender dataene til CloudWatch. Det er nøyaktig det CloudWatch Agent gjør: én gang i minuttet spør den systemtellere og sender dem til navnerommetCWAgent. Den fullstendige listen på omtrent to dusin metrikker finnes i den offisielle AWS-dokumentasjonen.
Hvor mye koster dette?
For et typisk scenario med 1-2 instanser med 4 metrikker hver, ingenting. CloudWatch sitt gratisnivå inkluderer 10 egendefinerte metrikker, 10 alarmer og 3 dashbord per konto per måned, ifølge prissiden for CloudWatch. To instanser med 4 metrikker hver utgjør 8 av de 10 gratis metrikkene. Har du mer enn tre instanser, koster det $0,30 per metrikk per måned å overskride grensen. For et dusin servere blir det $6-9 per måned, prisen for å unngå overraskelser klokken tre om natten.
Hvorfor er CloudWatch Agent bedre enn de gamle Perl-skriptene?
Perl-skriptene (
mon-put-instance-data.pl) har vært offisielt utfaset siden 2023 og mottar ingen oppdateringer. CloudWatch Agent er det offisielt støttede verktøyet som ikke bare skriver til CloudWatch, men også til Amazon Managed Prometheus; det samler metrikker via StatsD og collectd; det kan sende logger og traces. Viktigst av alt, det integreres med Systems Manager, noe som betyr at du kan distribuere det til 50 instanser med én enkelt kommando fra konsollen, uten SSH. Hvis du fortsatt har Perl-skript kjørende, migrer: det gamleawscreds.conf-formatet med nøkler i klartekst på disk er et sikkerhetshull. CloudWatch Agent fungerer med IAM-roller og krever ikke lagring av hemmeligheter i en tekstfil.
Hva bør jeg gjøre hvis metrikker ikke vises i CloudWatch?
Sjekk i rekkefølge: (1) tjenestestatus via
systemctl status amazon-cloudwatch-agent, som skal væreactive; (2) agentlogger i/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log, hvor du finner den spesifikke feilen; (3) IAM-tillatelser, brukeren eller rollen må ha tillatelsencloudwatch:PutMetricData; (4) region, agenten og konsollen må peke til samme AWS-region. Etter min erfaring er det overveldende flertallet av problemer enten tillatelser eller region-mismatch.
Kan jeg overvåke Windows-instanser?
Ja, CloudWatch Agent støtter Windows Server på lik linje med Linux. Installasjon skjer via et MSI-installasjonsprogram fra samme S3-bøtte (
amazon-cloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/). Konfigurasjon bruker samme JSON, men metrikknavn er forskjellige: i stedet formem_used_percent, brukMemory % Committed Bytes In Use. Konfigurasjonsveiviseren på Windows vil automatisk erstatte med de korrekte navnene.
Hva minne- og diskovervåking gir i praksis
Du startet CloudWatch Agent på en Ubuntu-instans, konfigurerte innsamling av minne, disk og swap, og la til et dashbord med grafer. Hva endret seg? Nøyaktig én ting: den blinde flekken er borte. Du ser ikke bare CPU og nettverk, men også de to viktigste instans-dreperne: minnelekkasjer og fulle disker.
I praksis betyr dette at du merker at minnet kryper oppover tre dager FØR OOM Killer terminerer PHP-FPM. Du ser at disken ble nesten helt full etter en tema-oppdatering og tømmer loggene FØR databasen krasjer. Uten disse metrikkene blir hver hendelse en post-mortem-undersøkelse. Med dem får du et varsel i kanalen en halvtime før nedetiden.
Har du mer enn tre instanser, sett opp CloudWatch Alarms på terskelverdier (for eksempel mem_used_percent > 90 i 5 minutter) og koble varslinger via SNS til Slack eller Telegram. Agent + alarmer = du får vite om problemet fra AWS, ikke fra en kunde.
Agent-oppsett er en engangsinvestering på 20 minutter per instans. Etter det går den av seg selv.



