Monitor CPU Utilization of EC2 via CloudWatch Alarms

Monitor CPU Utilization of EC2 via CloudWatch Alarms

avatar

Phong Nguyen

2024.03.21

Sử dụng CloudWatch Alarms notify đến Operator thông quan email khi CPU của EC2 đạt ngưỡng 80%. Đồng thời thực hiện reboot EC2 tự động.

Lab Details

  1. Bài lab này sẽ hướng dẫn monitor CPU utilization của EC2 thông qua CloudWatch alarms. 
  2. Duration: 30 minutes
  3. AWS Region: US East (N. Virginia) us-east-1
  4. Khi setting Network: chọn default VPC

Introduction

What is Cloud Watch Alarms ?

Cloudwatch Alarm là một công cụ hữu ích sử dụng để giám sát AWS resources và applications của bạn. Clouwatch Alarm cho phép bạn đặt các ngưỡng cảnh báo dựa trên các thông số (metrics) ví dụ như Mức sử dụng CPU (CPU utilization), RequestCountPerTarget, Average Network In / Out, hoặc bất kỳ custom metric nào. Alarms có thể được sử dụng để thông báo cho bạn về các vấn đề và trigger automated actions.

Một số lợi ích khi sử dụng CloudWatch alarms:

  1. Bạn có thể được thông báo về các vấn đề ngay khi chúng xảy ra. Alarm có thể được config để gửi notification cho bạn thông qua email, SMS hoặc SNS topic. Điều này cho phép bạn có những hành động thích hợp ngay khi xảy ra sự cố trước khi vấn đề trở nên nghiêm trọng hơn
  2. Bạn có thể cấu hình Alarm thực hiện các hành động 1 cách Automatic như: Khởi động lại EC2 Instance, Trigger Scaling ASG, hoặc gửi thông báo đên DevOps Team. Giúp bạn nhanh chóng xử lý vấn đề và giảm thiểu thời gian downtime
  3. Tối ưu hóa resource: Alarm có thể sử dụng để monitor Perfomance resource của bạn đảm bảo chúng đang sử dụng hiệu quả. Ví dụ như bạn có thể sử dụng Alarm để theo dõi mức sử dụng CPU của EC2. Tăng hoặc giảm số lượng EC2 khi cần thiết

Architecture Diagram

Task Details

  1. Launching EC2 Instance
  2. Creating SNS Topic
  3. Subscribing to the topic
  4. Creating a CloudWatch Alarm
  5. Test Alarm

1. Launching EC2 Instance

1.1 Create Security Group

  • Name: d-sg-SAA-ec2-for-cloudwatch-alarm
  • Description: Allow ssh from internet
  • VPC: Deafult
  • Inbound rules
    TypeProtocolPort rangeSource
    SSHTCP220.0.0.0/0
  • Outbound rules
    TypeProtocolPort rangeSource
    All trafficAllAll0.0.0.0/0
  • Tags
    Keyvalue
    Named-sg-SAA-ec2-for-cloudwatch-alarm

1.2 Create EC2 Instance

  • Name: d-ec2-SAA-for-cloudwatch-alarm
  • OS: Default (Amazon Linux 2023)
  • Instance type: Default (t2.micro)
  • Key pair: d-key-SAA-common (Nếu chưa có thì tạo mới)
  • Network Setting:
    • VPC: Default
    • Subnet: us-east-1a
    • Auto-assign public IP: Enable
    • Select existing security group: d-sg-SAA-ec2-for-cloudwatch-alarm

2. Creating SNS Topic

Vào Console của SNS -> Click Topic -> Create topic

  • Type: Standard
  • Name: d-sns-SAA-demo-topic
  • Display name - optional: AWS Notification
  • Tags - optional:
    • Key: Name
    • Value: d-sns-SAA-demo-topic
  • Các thuộc tính khác để như default

Kết quả:

3. Subscribing to the topic

Vào Console SNS -> Topic -> Click vào topic vừa tạo (d-sns-SAA-demo-topic) -> Create subscription:

Subscribe Email to SNS topic

Sau khi hoàn thành thì trạng thái của subscription như bên dưới. Endpoint email đang Pending confirmation.

Bạn sẽ nhận 1 email confirming your subscription to your email. Trường hợp không có trong Inbox, bạn kiểm tra trong mục Spam.

Hoàn tất

4. Creating a CloudWatch Alarm

Tại Console ClouWatch -> Menu All Alarm -> Create alarm

Step 1: Specify metric and conditions

  • Select metric -> EC2 -> Per-Instance Metrics
  • Search by Instance id and check CPUUtilization

Lấy Instance ID của EC2 đã tạo ở bước 1. Launching EC2 Instance bỏ vào ô tìm kiếm -> Enter

Chọn Metric: CPUUtilization

Chọn Select metric

Thế là đã xong phần chọn Metric:

Tiếp theo phần Condition

  • Mình sẽ config nếu mức sử dụng CPU >= 80% thì sẽ Alarm
  • Datapoints to alarm: 2 out of 2 có nghĩa là: Trong vòng 2 period (1 period là 5 phút), nếu như có 2 datapoint (dữ liệu metric) nằm trên mức 80% thì sẽ Alarm. Để hiểu thêm vầ việc đánh giá Alarm các bạn đọc thêm tại đây
  • Next

Step 2: Configure actions

Khi Alarm xảy ra chúng ta thực hiện 2 hành động

  • Notification đến SNS topic
  • Thực hiện Reboot instance

Step 3: Add name and description

Alarm name: d-cw-alarm-SAA-instance-high-cpu

Step 4: Preview and create

Review and create alarm

5. Test Alarm

Để test Alarm có 2 cách

  1. Stress test (Làm tăng cpu của instance trên 80%). Tham khảo tại đây
  2. Change alarm status sử dụng CLI

Để simple thì mình dùng cách 2

Sử dụng CLI chạy command bên dưới sử dụng gitbash

aws cloudwatch set-alarm-state --alarm-name "d-cw-alarm-SAA-instance-high-cpu" --state-value ALARM --state-reason "testing purposes"

Alarm sẽ chuyển trạng thái thành In Alarm

Khi ở trang thái In Alarm

  • Nhận email thông báo

  • Tự động reboot EC2 (quá trình này diễn ra nhanh chóng, chúng ta có thể confirm ở ClouTrail)

Clean up

Để tiếp tục thực hành với Event Bridge bạn chỉ cần delete CloudWatch Alarm và tiếp tục tại đây

Nếu bạn dừng tại đây, chúng ta sẽ xóa tất cả Resource đã tạo

  1. Delete CloudWatch Alarm d-cw-alarm-SAA-instance-high-cpu
  2. Delete SNS Topic: d-sns-SAA-demo-topic
  3. Delete subscription của d-sns-SAA-demo-topic
  4. Terminated EC2: d-ec2-SAA-for-cloudwatch-alarm
  5. Delete SG: d-sg-SAA-ec2-for-cloudwatch-alarm