Monitor CPU Utilization of EC2 via CloudWatch Alarms
Phong Nguyen
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
- Bài lab này sẽ hướng dẫn monitor CPU utilization của EC2 thông qua CloudWatch alarms.
- Duration: 30 minutes
- AWS Region: US East (N. Virginia) us-east-1
- 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:
- 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
- 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
- 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
- Launching EC2 Instance
- Creating SNS Topic
- Subscribing to the topic
- Creating a CloudWatch Alarm
- 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
Type Protocol Port range Source SSH TCP 22 0.0.0.0/0 - Outbound rules
Type Protocol Port range Source All traffic All All 0.0.0.0/0 - Tags
Key value Name d-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
- VPC:
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
- Key:
- 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
- Stress test (Làm tăng cpu của instance trên 80%). Tham khảo tại đây
- 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
- Delete CloudWatch Alarm
d-cw-alarm-SAA-instance-high-cpu
- Delete SNS Topic:
d-sns-SAA-demo-topic
- Delete subscription của
d-sns-SAA-demo-topic
- Terminated EC2:
d-ec2-SAA-for-cloudwatch-alarm
- Delete SG:
d-sg-SAA-ec2-for-cloudwatch-alarm