Skip to content
🧠 Overvåking av EC2-minne og -disk med CloudWatch Agent: trinnvis oppsett

🧠 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:PutMetricData og 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.

Opprette en IAM-bruker med programmatisk tilgang

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

Legge til CloudWatch-policyen for IAM-brukeren

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.

IAM-tilgangsnøkler etter opprettelse av bruker

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:

1wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

Installer pakken med dpkg:

1sudo dpkg -i amazon-cloudwatch-agent.deb

Hvis pakkebehandleren klager over manglende avhengigheter, installer dem med én enkelt kommando:

1sudo 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:

1sudo /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 (mem og disk_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:

1sudo 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:

1aws 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:

1sudo /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).

Navigere i måledata i CloudWatch-konsollen

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:

1sudo systemctl status amazon-cloudwatch-agent

Bekreft at tjenesten er active (running) og aktivert for oppstart (enabled). Hvis ikke, start og aktiver den:

1sudo systemctl enable amazon-cloudwatch-agent
2sudo 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.

Opprette et nytt dashbord i CloudWatch

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

Angi et navn for det egendefinerte dashbordet

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.

Velge linjediagramtype for widgeten

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

Konfigurere målediagrammet med periodevalg

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.

Diagramalternativer-fane med innstilling for Y-akse-maksimum

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.

Lagre det sammensatte dashbordet i CloudWatch

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/meminfo og df og 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 navnerommet CWAgent. 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 gamle awscreds.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ære active; (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 tillatelsen cloudwatch: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 for mem_used_percent, bruk Memory % 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.