Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🧠 EC2-muistin ja levyn valvonta CloudWatch-agentilla: vaiheittainen asennus

🧠 EC2-muistin ja levyn valvonta CloudWatch-agentilla: vaiheittainen asennus

EC2-instanssisi lakkasi vastaamasta, mutta CloudWatch näyttää kaiken olevan kunnossa? Klassikko. AWS tarjoaa suorittimen, verkon ja levyn I/O-mittarit valmiina, mutta se ei näytä muistin käyttöä tai vapaata levytilaa. Nämä luvut ovat piilossa virtuaalikoneen sisällä, ja ennen kuin vedät ne ulos, lennät sokkona.

Kun muisti loppuu, instanssi ei varoita; se vain kaatuu. OOM Killer lopettaa prosesseja satunnaisessa järjestyksessä, ja sinulle jää arvailu: pettikö liitännäinen? Kaatuko tietokanta? Todellinen syy on, että sinulta loppuivat ne gigatavut RAM-muistia, joita et valvonut. Levyn kohdalla tarina on sama: lokit, varmuuskopiot ja väliaikaistiedostot täyttävät tallennustilan hiljaisesti, ja eräänä aamuna näet ilmoituksen No space left on device.

Ratkaisu on CloudWatch Agent, vakio-AWS-agentti, joka kerää muistin, levyn, swapin ja noin kaksikymmentä muuta järjestelmämittaria ja lähettää ne CloudWatchiin. Asennus vie 20 minuuttia ja mahtuu ilmaistasolle (10 mukautettua mittaria kuukaudessa). Alla on vaiheittainen opas IAM:sta valmiiseen hallintapaneeliin.

💡 Nopea yleiskatsaus:

  • Luo IAM-käytäntö, jossa on cloudwatch:PutMetricData, ja liitä se käyttäjään
  • Lataa ja asenna CloudWatch Agent Ubuntu-instanssille
  • Määritä JSON-tiedosto: muisti, levy, swap
  • Käynnistä agentti ja varmista, että mittarit virtaavat CloudWatchiin
  • Rakenna mukautettu hallintapaneeli, jossa on muistin ja levyn käytön kuvaajat

AWS:n identiteetin- ja pääsynhallinta

Agentti tarvitsee oikeudet lähettää mittareita CloudWatchiin. Luomme IAM-käytännön ja liitämme sen käyttäjään, jolla on ohjelmallinen pääsy.

IAM-käytäntö

Avaa IAM-konsoli, siirry kohtaan Käytännöt → Luo käytäntö ja vaihda JSON-välilehdelle. Liitä tämä dokumentti:

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}

Napsauta Tarkista käytäntö, anna nimi (esimerkiksi CloudWatchAgentPolicy) ja napsauta Luo käytäntö.

IAM-käyttäjä

Siirry kohtaan Käyttäjät → Lisää käyttäjä. Anna nimi ja varmista, että valitset "Ohjelmallinen pääsy" -valintaruudun; tämä antaa Access Key ID:n ja Secret Access Keyn, joita agentti käyttää todennukseen.

IAM-käyttäjän luominen ohjelmallisella pääsyllä

Käyttöoikeusnäytössä valitse Liitä olemassa olevat käytännöt suoraan. Valitse käytäntötyypin suodattimesta Asiakkaan hallinnoima löytääksesi nopeasti juuri luomasi CloudWatchAgentPolicy-käytännön.

CloudWatch-käytännön liittäminen IAM-käyttäjään

Valitse käytäntö ja napsauta Seuraava → Luo käyttäjä. AWS näyttää pääsyavaimet. Tallenna Access Key ID ja Secret Access Key heti. Jos suljet sivun, avaimet katoavat lopullisesti, ja joudut luomaan ne uudelleen.

IAM-pääsyavaimet käyttäjän luomisen jälkeen

CloudWatch Agentin asentaminen

Vanhat Perl-valvontaskriptit (CloudWatchMonitoringScripts-1.2.2.zip) on jo kauan sitten merkitty vanhentuneiksi. Nykyinen tapa on yhtenäinen CloudWatch Agent, joka kerää muistin ja levyn lisäksi myös swapin, suorittimen kuorman, verkkoliitännät ja noin kaksikymmentä muuta mittaria suoraan paketista.

Lataus ja asennus

Yhdistä instanssiin SSH:lla ja lataa agenttipaketti Ubuntulle:

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

Asenna paketti dpkg-komennolla:

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

Jos paketinhallinta valittaa puuttuvista riippuvuuksista, asenna ne yhdellä komennolla:

1sudo apt-get install -f

Agentti on asennettu, mutta se ei vielä tiedä, mitä mittareita kerätä tai mitä avaimia käyttää CloudWatch-todennukseen. Määritetään se.

Huomautus: agentti on saatavilla myös AWS Systems Managerin (SSM) kautta. Jos sinulla on kymmeniä instansseja, sen käyttöönotto keskitetysti Run Commandin avulla ilman SSH-yhteyttä joka koneelle on kätevämpää. Yhdelle tai kahdelle instanssille manuaalinen asennus on yksinkertaisempaa ja nopeampaa.

Agentin määrittäminen

Määritystiedoston luominen

CloudWatch Agentin määritys on JSON-dokumentti, joka kuvaa, mitä mittareita kerätään ja millä aikavälillä. Suorita sisäänrakennettu ohjattu toiminto:

1sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

Velho kysyy vuorovaikutteisesti useita kysymyksiä: mikä palvelintyyppi (EC2/on-premises), minne lähetetään metriikat (CloudWatch) ja mitä metriikoita kerätään. Seurataksesi muistia ja levyä vastaa seuraavasti:

  • Käyttöjärjestelmä: Linux
  • Käytätkö Amazon EC2:ta?: Kyllä
  • Mitä metriikoita kerätään: Mukautetut metriikat (mem ja disk_used_percent)
  • Resoluutio: 60 sekuntia (Standard)
  • Lokitiedostot: ohita, jos et tarvitse lokeja

Velho luo config.json-tiedoston hakemistoon /opt/aws/amazon-cloudwatch-agent/bin/. Tässä on minimaalinen toimiva esimerkki muistin käyttöprosentille + levyn käyttöprosentille + swapille:

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}

disk-kohdan resources-parametri määrittää liitoskohdan: "/" on juurivolyymi, EBS NVMe SSD -levy, eli instanssin ensisijainen tallennustila. Jos sinulla on lisävolyymeja (esimerkiksi /data), lisää ne taulukkoon.

Agentin tunnistetiedot

IAM-vaiheessa tallennetut pääsyavaimet on annettava agentille. Luo tunnistetiedosto käyttäjän kotihakemistoon:

1sudo nano /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml

Lisää tämä osio:

1[credentials]
2 shared_credential_profile = "AmazonCloudWatchAgent"

Lisää sitten tunnistetiedot AWS:n vakiotunnistetiedostoon:

1aws configure --profile AmazonCloudWatchAgent

Järjestelmä kysyy Access Key ID:tä, Secret Access Keytä ja aluetta. Kun täytät ne, agentti pystyy lähettämään metriikoita luomasi IAM-käyttäjän puolesta.

Vaihtoehtoinen tapa on instanssiin liitetty IAM-rooli. Tämä on turvallisempi (ei levylle tallennettuja avaimia) ja yksinkertaisempi skaalattaessa. Jos käynnistät EC2:n IAM-roolilla, jolla on cloudwatch:PutMetricData, agentti poimii oikeudet automaattisesti, ja voit ohittaa tunnistetietovaiheen.

Testaus

Käynnistä agentti manuaalisesti ja varmista, että metriikoita lähetetään:

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

-s-lippu käynnistää agentin palveluna. Parin minuutin kuluessa ensimmäiset metriikat ilmestyvät CloudWatchiin. Varmistaaksesi, että data kulkee, avaa CloudWatch-konsoli, siirry kohtaan Metrics → All metrics ja etsi CWAgent-nimiavaruus (agentti kirjoittaa sinne oletuksena).

Mittareissa liikkuminen CloudWatch-konsolissa

Laajenna nimiavaruus, niin näet InstanceId-dimensiot metriikoittain eriteltynä: mem_used_percent, disk_used_percent ja swap_used_percent. Klikkaa mitä tahansa riviä luodaksesi kuvaajan; voit heti todeta, että dataa saapuu ja se näyttää järkevältä.

Neljä perusmetriikkaa (muisti, levy, swap, CPU) kahdella instanssilla tarkoittaa 8 metriikkaa. CloudWatchin ilmainen taso sisältää 10 mukautettua metriikkaa kuukaudessa, kuten hinnoittelusivulla kerrotaan. Mahdut tähän rajaan. Jos sinulla on yli kolme instanssia, osa metriikoista ylittää rajan, mutta kustannus on maltillinen: 0,30 $ per metriikka kuukaudessa (AWS:n tiedot vuodelta 2026).

Aikataulun asettaminen

Oletuksena agentti toimii systemd-palveluna ja lähettää metriikat metrics_collection_interval-kohdassa määritetyin väliajoin (60 sekuntia konfiguraatiossamme). Erillisiä cron-merkintöjä ei tarvita; systemd varmistaa, että agentti pysyy käynnissä ja käynnistyy uudelleen, jos se kaatuu.

Tarkista tila:

1sudo systemctl status amazon-cloudwatch-agent

Varmista, että palvelu on active (running) ja käynnistykseen aktivoitu (enabled). Jos ei, käynnistä ja aktivoi se:

1sudo systemctl enable amazon-cloudwatch-agent
2sudo systemctl start amazon-cloudwatch-agent

Uudelleenkäynnistyksen jälkeen agentti käynnistyy automaattisesti.

Katso tästä videosta visuaalinen esitys koko prosessista IAM:sta hallintapaneeliin:

Oman kojelaudan rakentaminen

Mittarit saapuvat; nyt sinun täytyy paketoida ne siististi. Näytän, miten rakennat kojelaudan tuotantoinstanssin valvontaan: muisti, levy, suorittimen kuorma ja luottosaldo (T-sarjalle) yhdellä näytöllä.

Kojelaudan luominen

Siirry CloudWatch-konsolissa kohtaan Dashboards → Create dashboard. Anna nimi (esimerkiksi Production-EC2) ja valitse widget-tyyppi.

Uuden koontinäytön luominen CloudWatchissa

Valitse Line ensimmäiselle kuvaajalle; tämä tyyppi sopii parhaiten mittarien näyttämiseen ajan kuluessa.

Mukautetun koontinäytön nimen syöttäminen

Kuvaajawidget

Klikkaa Add widget ja valitse Line-tyyppi, yksinkertainen viivakuvaaja ja paras valinta useimmille mittareille. Avautuvassa valintaikkunassa klikkaa Configure ja siirry CWAgent-nimiavaruuteen.

Viivakaaviotyypin valitseminen widgetille

Etsi instanssisi mem_used_percent-mittari (InstanceId-tunnisteen perusteella) ja klikkaa riviä; CloudWatch näyttää kuvaajan välittömästi.

Vinkki: Stacked area -tyyppi toimii hyvin, kun yhdessä widgetissä on useita mittareita (esimerkiksi muisti + swap); Number on hyödyllinen nykyisen arvon nopeaan lukemiseen (kätevä kojelaudan nurkassa); Text on otsikoita ja muistiinpanoja varten kuvaajien välissä.

Kuvaajan hienosäätö

Mittarikaavion määrittäminen ja ajanjakson valinta

Muutama asetus, jotka tekevät kuvaajasta luettavan:

  • Period: jos agentti lähettää mittarit kerran minuutissa, valitse 1 minuutin jakso nähdäksesi datan täydellä tarkkuudella.

  • Title: nimeä kuvaajan selite uudelleen joksikin inhimilliseksi, kuten "RAM used%" eikä mem_used_percent / i-1234567890abcdef0.

  • Y-akselin maksimi (Graph options): lukitse raja (esimerkiksi 100 prosenteille tai 16, jos RAM-muistia on 16 Gt). Ilman tätä CloudWatch skaalaa akselin automaattisesti, ja pieni piikki näyttää yhtä hälyttävältä kuin kriittinen tilanne. Kiinteällä rajalla näet yhdellä silmäyksellä, kuinka lähellä reunaa olet.

Kaavioasetukset-välilehti ja Y-akselin maksimiasetus

Klikkaa Create widget; ensimmäinen kojelautalohko on valmis. Toista jokaiselle mittarille: disk_used_percent, sitten swap_used_percent, sitten cpu_usage (sisäänrakennettu EC2-mittari, ei CWAgentilta) ja CPUCreditBalance T-sarjalle. Voit raahata, muuttaa kokoa ja muokata widgettejä. Kun kaikki näyttää hyvältä, klikkaa Save dashboard.

Kootun koontinäytön tallentaminen CloudWatchissa

Kojelauta on valmis. Lisää se suosikkeihin (tähti ylävalikossa) ja palaa yhdellä klikkauksella aina, kun sinun täytyy tarkistaa instanssin tila ennen julkaisua tai liikennepiikin jälkeen.

⁉️🤔 Usein kysytyt kysymykset

Miksi vakio-EC2-mittarit eivät sisällä muistia ja levyä?

AWS virtualisoi suorittimen ja verkon hypervisor-tasolla; nämä mittarit ovat saatavilla ulkoisesti ilman, että vieras-käyttöjärjestelmään mennään sisälle. Muisti ja levy ovat virtuaalikoneen sisäisiä resursseja; hypervisor ei tiedä niistä. Jotta näet ne, tarvitset agentin käyttöjärjestelmän sisällä, joka lukee /proc/meminfo- ja df-tiedostot ja lähettää datan CloudWatchiin. Juuri tätä CloudWatch Agent tekee: kerran minuutissa se kysyy järjestelmälaskureita ja lähettää ne CWAgent-nimiavaruuteen. Täydellinen, noin kahden tusinan mittarin lista on virallisessa AWS-dokumentaatiossa.

Paljonko tämä maksaa?

Tyypillisessä skenaariossa, jossa on 1-2 instanssia ja kullakin 4 mittaria, ei mitään. CloudWatchin ilmainen taso sisältää 10 mukautettua mittaria, 10 hälytystä ja 3 kojelautaa tiliä kohden kuukaudessa CloudWatch-hinnoittelusivun mukaan. Kaksi instanssia, joissa kummassakin on 4 mittaria, vastaa 8:aa 10:stä ilmaisesta mittarista. Jos sinulla on yli kolme instanssia, rajan ylitys maksaa 0,30 dollaria per mittari kuukaudessa. Tusinalle palvelimia se on 6-9 dollaria kuukaudessa, hinta yllätysten välttämisestä kolmelta aamuyöllä.

Miksi CloudWatch Agent on parempi kuin vanhat Perl-skriptit?

Perl-skriptit (mon-put-instance-data.pl) on virallisesti vanhentunut vuodesta 2023, eivätkä ne saa päivityksiä. CloudWatch Agent on virallisesti tuettu työkalu, joka kirjoittaa CloudWatchin lisäksi myös Amazon Managed Prometheukseen; se kerää mittareita StatsD:n ja collectd:n kautta; se voi lähettää lokeja ja jälkiä. Mikä tärkeintä, se integroituu Systems Manageriin, mikä tarkoittaa, että voit ottaa sen käyttöön 50 instanssille yhdellä komennolla konsolista ilman SSH:ta. Jos sinulla on vielä Perl-skriptejä käynnissä, migroi: vanha awscreds.conf-formaatti, jossa avaimet ovat levylle tallennettuna selkokielisinä, on tietoturva-aukko. CloudWatch Agent toimii IAM-roolien kanssa eikä vaadi salaisuuksien tallentamista tekstitiedostoon.

Mitä minun pitäisi tehdä, jos mittarit eivät näy CloudWatchissa?

Tarkista järjestyksessä: (1) palvelun tila komennolla systemctl status amazon-cloudwatch-agent, jonka pitäisi olla active; (2) agentin lokit polussa /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log, josta löydät tarkan virheen; (3) IAM-oikeudet, käyttäjällä tai roolilla on oltava cloudwatch:PutMetricData-oikeus; (4) alue, agentin ja konsolin on osoitettava samaan AWS-alueeseen. Kokemukseni mukaan valtaosa ongelmista on joko oikeuksia tai alueen ristiriitaa.

Voinko valvoa Windows-instansseja?

Kyllä, CloudWatch Agent tukee Windows Serveriä samalla tasolla kuin Linuxia. Asennus tapahtuu MSI-asentimella samasta S3-ämpäristä (amazon-cloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/). Konfigurointi käyttää samaa JSONia, mutta mittarien nimet eroavat: mem_used_percent-mittarin sijaan käytä Memory % Committed Bytes In Use. Windowsin konfigurointivelho korvaa oikeat nimet automaattisesti.

Mitä muistin ja levyn valvonta tarjoaa käytännössä

Käynnistit CloudWatch Agentin Ubuntu-instanssilla, määritit muistin, levyn ja swapin keruun ja lisäsit kojelaudan kuvaajineen. Mikä muuttui? Tasan yksi asia: sokea piste on poissa. Näet suorittimen ja verkon lisäksi myös kaksi tärkeintä instanssin tappajaa: muistivuodot ja täydet levyt.

Käytännössä tämä tarkoittaa, että huomaat muistin hiipivän ylöspäin KOLME PÄIVÄÄ ennen kuin OOM Killer lopettaa PHP-FPM:n. Näet, että levy täyttyi melkein kokonaan teemapäivityksen jälkeen ja tyhjennät lokit ENNEN kuin tietokanta kaatuu. Ilman näitä mittareita jokaisesta häiriöstä tulee jälkikäteistutkinta. Niiden kanssa saat hälytyksen kanavaan puoli tuntia ennen käyttökatkoa.

Jos sinulla on yli kolme instanssia, määritä CloudWatch-hälytykset raja-arvoille (esimerkiksi mem_used_percent > 90 5 minuutin ajan) ja yhdistä ilmoitukset SNS:n kautta Slackiin tai Telegramiin. Agentti + hälytykset = saat tiedon ongelmasta AWS:ltä, et asiakkaalta.

Agenttiasennus on kertaluonteinen sijoitus, 20 minuuttia per instanssi. Sen jälkeen se pyörii itsestään.