Jak monitorować użycie pamięci RAM na AWS EC2

How to monitor memory usage on AWS EC2

Jeśli otworzysz sobie panel z metrykami od EC2, to zauważysz, że nie ma tam metryk od zużycia pamięci RAM. W CloudWatch także ich nie znajdziesz. Jeśli nie masz własnego systemu monitoringu i nie chcesz za każdym razem logować się na wirtualną maszynę, żeby sprawdzić użycie pamięci. To jest możliwość, żeby AWS pokazał Ci takie metryki.

aws memory utilization percent install

Monitorując użycie pamięci RAM, zyskujemy także jeszcze jedną bardzo ważną rzecz. AWS będzie na ich podstawie mógł automatycznie określić dla nas rekomendacje wielkości maszyn EC2, jakich powinniśmy używać. Bez tego może co najwyżej zarekomendować nam maszynki na podstawie CPU, dysku czy sieci, co jest trochę słabe niestety.

aws ec2 recommendation 2021

W tym artykule pokażę krok po kroku, co należy zrobić, żeby takie metryki użycia pamięci można zobaczyć na platformie AWS. Nie jest to bardzo prosty proces dla osób początkujących w AWS, ponieważ zakłada pewną znajomość platformy. Jednak postaram się, by był jak najbardziej zrozumiały. Postępując po kolei według wskazówek z tego artykułu na pewno uda ci się włączyć takie metryki.

1) Rola IAM dla EC2

Jeśli twoja maszyna EC2 ma przypisaną rolę IAM, to będziesz musiał ją odszukać i upewnić się, czy ma przypisane odpowiednie uprawnienia – “CloudWatchFullAccess”. Jeśli jeszcze nie masz przypisanej żadnej roli, to poniżej znajdziesz opis jak ją utworzyć i poprawnie przypisać do maszyny EC2.

Na początku utwórz rolę IAM. Będzie ona potrzebna po to, by dodać do niej uprawnienia i przypisać ją do maszyny EC2. Wyszukaj IAM, z menu wybierz “Roles” i kliknij na “Create Role”.

AWS-tworzenie roli IAM - create roles

Świetnie. Teraz wybierz EC2 i kliknij na Next. Ponieważ chcesz, żeby była ona widziana przez twoje maszyny EC2. W tym miejscu możesz także wybrać kontenery lub inne komponenty AWS, którym chcesz pozwolić na używanie tej roli.

AWS-tworzenie roli IAM dla EC2

Teraz wyszukaj rolę “CloudWatchFullAccess”, zaznacz ją i przejdź dalej.

AWS create role attach permissions

W tym miejscu możesz także dodać dodatkowe uprawnienia, które chciałbyś, żeby posiadała twoja maszyna EC2 z przypisaną taką rolą. Możesz np. zezwolić maszynie EC2 na dostęp do S3 bez podawania hasła. Jeśli jesteś zainteresowany jak to zrobić, to możesz przejść do tego artykułu – Dostęp do prywatnego AWS S3 bucket z EC2 bez loginu i hasła w 5 krokach.

Gdy skończysz z uprawnieniami, to możesz dodać jakieś TAGi i przejść dalej do podsumowania. Na ostatniej karcie nadajesz nazwę swojej roli i możesz dodać do niej jakiś opis. Zachęcam, żebyś dodał opis i nie musiał się za rok zastanawiać, do czego ta rola służy 😉

aws create role review

Jeśli poprawnie utworzyłeś rolę, to teraz wystarczy ją tylko przypisać do maszyny EC2. W tym celu wybierz maszynę z listy instancji EC2, zaznacz ją i kliknij na Action/ Security/ Modify IAM role. Następnie z rozwijanej listy wybierz utworzoną rolę i kliknij Save.

AWS - EC2 modify IAM

2) Instalacja CloudWatch Agent

Poniżej znajdziesz opis jak zainstalować CloudWatch Agenta na maszynie z Ubuntu. Jeśli posiadasz inny system operacyjny, to udaj się do dokumentacji AWS i wykonaj polecenia dedykowane dla twojego systemu. Tutaj znajdziesz dokumentację dotyczącą CloudWatch. Na początku należy zalogować się na wirtualnej maszynie i pobrać odpowiedni plik oraz wykonać poniższe polecenia:

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

sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

Jeśli chcesz, żeby CloudWatch Agent wysyłał informacje na temat użycia ramu co 60 sekund, to musisz za pomocą swojego ulubionego edytora utworzyć plik /opt/aws/amazon-cloudwatch-agent/bin/config.json. Ja do tego celu użyję nano. Oczywiście możesz ustawić taki interwał, jaki będzie potrzebny.

nano /opt/aws/amazon-cloudwatch-agent/bin/config.json

Plik powinien zawierać:

{
   "metrics":{
      "metrics_collected":{
         "mem":{
            "measurement":[
               "mem_used_percent"
            ],
            "metrics_collection_interval":60
         }
      },
      "append_dimensions": {
        "InstanceId": "${aws:InstanceId}"
      }
   }
}

Teraz wystarczy tylko uruchomić CloudWatch Agenta za pomocą poniższej komendy i to by było na tyle.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

Jeśli wszystko zrobiłeś poprawnie, to w konsoli Cloudwatch powinieneś zobaczyć nowy namespace CWAgent.

aws namespace cloudwatch cwagent

Ważne jest to, że namespace w CloudWatch musi zawierać InstanceID!! Jeśli tego nie będzie, to nie otrzymsz od AWS rekomendacji na podstawie użycia pamięci.

AWS MEMORY UTILIZATION

Jeśli wystąpią problemy, to możesz przejrzeć logi, które powinny znajdować się w /opt/aws/amazon-cloudwatch-agent/logs/ . Możesz także użyć jednego z poniższych poleceń, by sprawdzić status albo zatrzymać agenta.

Tym poleceniem możesz sprawdzić status agenta ClouWatch:

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status

Żeby zatrzymać agenta użyj polecenia:

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop

Jeśli wszystko działa prawidłowo, to AWS powinien po minimum 24h móc ustalić rekomendacje na podstawie użycia pamięci.

AWS ec2 recommendation MEMORY UTILIZATION 2

Podsumowanie

Wszystkie polecenia wykonane w artykule da się zautomatyzować za pomocą IaC, Chef Puppet itp automatycznie uruchomionych komend na EC2. Ja miałem jednak na celu pokazanie prostego sposobu, by zrozumieć co i dlaczego jest robione. Zachęcam do automatyzacji tych kroków, bo jeśli masz sporo instancji EC2 i chciałbyś monitorować zużycie pamięci na wszystkich, to czeka cię dużo pracy, jeśli wykonasz ją ręcznie.

Powodzenia, a na koniec mała prośba. Jeśli spodobał ci się artykuł, to podziel się nim ze znajomymi na social mediach.

Jeśli chcesz, to w jednym z najbliższych wpisów mogę przygotować prosty poradnik wprowadzający w automatyzację. Daj znać w komentarzu, jeśli interesuje Cię ten temat. Tymczasem zachęcam także do zerknięcia na inne artykuły z kategorii AWS.

2 myśli na “Jak monitorować użycie pamięci RAM na AWS EC2”

  1. Pracuję już rok z chmurą i nie wiedziałem, że tak można. Bardzo przydatny wpis, już rozesłałem do znajomych linka 🙂

    Ja dopiero zaczynam z automatyzacją, więc bardzo by mi się przydał taki artykuł gdzie krok po kroku jest opisane co i jak. Regularnie czytam bloga, więc czekam z niecierpliwością na kolejny wpis 🙂

    Pozdrawiam Adam

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *