Hello các bạn, hôm nay tụi mình sẽ tìm hiểu một dịch vụ cực kỳ quan trọng trong hệ sinh thái AWS – đó là Amazon CloudWatch. Về cơ bản thì CloudWatch giống như “camera giám sát” cho hệ thống của bạn. Nó giúp theo dõi hiệu năng, trạng thái hoạt động của các tài nguyên trên AWS như EC2, S3, RDS,… Nếu có chuyện gì xảy ra (như CPU tăng cao bất thường, ổ đĩa sắp đầy, hay ứng dụng bị lỗi), thì CloudWatch sẽ giúp bạn phát hiện và xử lý kịp thời.
Xem thêm:
Amazon S3 – Bài 16
Amazon Route 53 – Bài 15
Hướng dẫn cấu hình AWS RDS – Bài 13
1. CloudWatch Metrics – Các chỉ số theo dõi
1.1. Amazon CloudWatch Metrics là gì?
CloudWatch Metrics là các chỉ số dùng để theo dõi hiệu năng và hoạt động của tài nguyên AWS (ví dụ EC2, S3…).
Metrics (chỉ số) là những con số giúp bạn đo lường và giám sát hoạt động của tài nguyên. Ví dụ:
- CPUUtilization (CPU sử dụng bao nhiêu %)
- NetworkIn (dữ liệu nhận vào)
- BucketSize (kích thước S3 bucket)
Nói đơn giản, nó giống như đo nhiệt độ, nhịp tim, huyết áp của hệ thống vậy.
1.2. Cấu trúc của Metrics
Namespace (Nơi chứa các metrics): Mỗi dịch vụ AWS có một không gian riêng để chứa metric, ví dụ: AWS/EC2, AWS/S3, AWS/ELB…
Dimensions: Đây là ngữ cảnh để hiểu chỉ số, dựa vào dimensisions, CloudWatch sẽ biết biết đo cái gì cụ thể. Hiểu đơn giản, dimensisions như nhãn dán lên metric để biết nó thuộc về tài nguyên nào (EC2 nào, bucket nào…). Một metric có thể có tối đa 30 dimensions.
Ví dụ:
- CPUUtilization (chỉ số CPU sử dụng) thì phải biết là của máy EC2 nào, đúng không?
- Vậy dimension ở đây là InstanceId – để xác định máy EC2 cụ thể..
1.3. Tần suất thu thập
- Mặc định là 5 phút/lần
- Nếu bật Detailed Monitoring thì có thể giảm xuống 1 phút/lần
1.4. Xuất Metrics ra ngoài CloudWatch
Metrics có thể được stream theo thời gian thực. Bạn có thể đẩy metric sang các hệ thống khác để phân tích sâu hơn như:
- Amazon Kinesis Firehose → đẩy vào S3, Athena, Redshift, OpenSearch…
- Bên thứ 3: Datadog, New Relic, Splunk,…

1.5. Các thao tác cơ bản với CloudWatch Metrics
Vào CloudWatch Console → Metrics:
- Chọn namespace
- Chọn metric muốn xem
- Tùy chỉnh thời gian xem (15 phút, 1 giờ, 1 ngày,…)
- Có thể export ra CSV hoặc gửi link cho đồng nghiệp xem chung.

2. CloudWatch Logs – Lưu trữ và phân tích log
2.1. CloudWatch Logs là gì?
CloudWatch Logs là dịch vụ của AWS dùng để thu thập, lưu trữ và phân tích log của các ứng dụng hoặc tài nguyên AWS.
2.2. Cấu trúc lưu trữ Logs
CloudWatch Logs tổ chức dữ liệu theo:
- Log Groups: Là nhóm lưu trữ log chính (thường đại diện cho từng ứng dụng riêng biệt).
- Log Streams: Là các dòng log cụ thể trong từng log group (ví dụ: logs từ các EC2 khác nhau, containers khác nhau).
Cho phép tùy chỉnh thời gian lưu trữ logs (Retention Policy):
- Lưu trữ vô thời hạn (không xóa).
- Hoặc đặt thời gian tự động xóa từ 1 ngày đến 10 năm.
2.3. Xuất logs ra bên ngoài
Có hai hình thức xuất logs:
Xuất logs dạng batch (không real-time):
- Xuất logs ra Amazon S3.
- API dùng: CreateExportTask.
- Thời gian hoàn thành export lên tới 12 giờ.
Xuất logs dạng streaming (real-time hoặc gần real-time):
- Sử dụng Subscription Filters để stream logs liên tục.
- Có thể gửi logs trực tiếp vào các dịch vụ khác như:
- Kinesis Data Streams (phân tích thời gian thực, Lambda, EC2, Firehose…).
- Kinesis Data Firehose (stream vào S3, OpenSearch…).
- AWS Lambda (tự định nghĩa xử lý logs, tích hợp với OpenSearch).
- Có thể lọc logs khi stream (chỉ gửi logs theo điều kiện nhất định).

2.4. Aggregate logs từ nhiều account AWS
CloudWatch Logs cho phép tập trung logs từ nhiều tài khoản AWS vào một điểm chung để phân tích.
Các bước thực hiện cụ thể:
- Tài khoản gửi logs (sender) tạo Subscription Filter.
- Subscription filter gửi logs tới một Destination ở tài khoản nhận (recipient).
- Destination là đại diện của tài nguyên nhận logs (ví dụ: Kinesis Data Stream ở tài khoản recipient).
- Tài khoản nhận logs tạo Destination Access Policy, cho phép tài khoản sender gửi logs tới.
- Tài khoản nhận tạo IAM Role, cấp quyền ghi vào tài nguyên đích, và cho phép tài khoản sender assume role này.

3. CloudWatch Agent – Gửi log và metric từ EC2
Mặc định, EC2 không gửi log hay metric lên CloudWatch, nên bạn cần cài đặt CloudWatch Agent.
Có 2 loại CloudWatch Agent:
| Agent | Gửi log | Gửi metric | Hỗ trợ cấu hình tập trung | Ghi chú |
| CloudWatch Logs Agent | có | không | không | Agent cũ, chỉ gửi log |
| CloudWatch Unified Agent | có | có | có | Gửi cả log và metric chi tiết (RAM, swap, disk I/O, tiến trình,…).
Hỗ trợ máy chủ on-premises . Cấu hình dễ dàng qua SSM Parameter Store. |
4. CloudWatch Alarms
Amazon CloudWatch Alarms giúp giám sát hạ tầng bằng cách đặt ngưỡng trên các chỉ số để phát hiện sự cố và kích hoạt cảnh báo hoặc hành động tự động.
4.1. Cơ chế
CloudWatch Alarm sẽ:
- Theo dõi một metric
- So sánh với một ngưỡng
- Khi vượt ngưỡng → gửi cảnh báo hoặc thực hiện hành động
CloudWatch Alarm hoạt động trên một metric cụ thể, và có thể thiết lập nhiều kiểu điều kiện như:
- Giá trị trung bình (
Average) - Giá trị tối đa (
Maximum) - Phần trăm (
Percentile) - Số lượng (
SampleCount)
4.2. Trạng thái của Alarm:
OK: Bình thườngALARM: Có sự cố (vượt ngưỡng)INSUFFICIENT_DATA: Không đủ dữ liệu để đánh giá trạng thái hiện tại (ví dụ: metric chưa đủ số lượng hoặc chưa có cập nhật mới).
4.3. Chu kỳ đánh giá
Thời gian CloudWatch đánh giá metric được gọi là Period, có thể thiết lập từ 10 giây (với custom high-resolution metrics) đến 300 giây hoặc hơn cho các metric mặc định.
Một khi alarm chuyển sang trạng thái ALARM, ta có thể cấu hình thực hiện một hoặc nhiều hành động sau:
- Quản lý EC2 instance: dừng (Stop), khởi động lại (Reboot), kết thúc (Terminate), hoặc khôi phục (Recover).
- Tự động mở rộng (Auto Scaling): Scale in/out một nhóm EC2 tự động dựa vào tải thực tế.
- Gửi thông báo qua SNS (Simple Notification Service): có thể đẩy tiếp tới Lambda, Email, hoặc các webhook khác.
5. CloudWatch Logs – Hand On
Mục tiêu:
Cấu hình để gửi log từ một máy EC2 lên dịch vụ Amazon CloudWatch Logs
Cách thực hiện:
- Task 1: Tạo IAM Role gán cho EC2
- Task 2: Tạo EC2 Instance
- Task 3: Tạo Log Group & Log Stream
- Task 4: Kết nối EC2 Instance và cài CloudWatch Agent
- Task 5: Cấu hình CloudWatch Agent để gửi log
- Task 6: Khởi động CloudWatch Agent
Task 1: Tạo IAM Role gán cho EC2
Truy cập IAM Console Chọn Roles > Create role

Trusted entity: chọn AWS service → chọn EC2

Nhấn Next
Trong phần Permissions, tìm và tick chọn: CloudWatchAgentServerPolicy

Đặt tên: EC2CloudWatchLogsRole
Nhấn Next

Task 2: Tạo EC2 Instance
Truy cập EC2 Console > Launch instance
| Thiết lập | Giá trị |
|---|---|
| Name | CloudWatchLogEC2 |
| AMI | Amazon Linux 2 AMI |
| Instance type | t2.micro |
| Key pair | Chọn hoặc tạo mới |
| IAM instance profile | Chọn EC2CloudWatchLogsRole |
| Network | VPC mặc định |
| Subnet | Tự động hoặc chọn |
| Security Group | Cho phép SSH từ IP của bạn (port 22) |
Lưu ý: Nhớ gán IAM instance profile
Task 3: Tạo Log Group & Log Stream
Truy cập CloudWatch Logs, chọn giống region EC2
Tại menu bên trái, chọn Log groups.


Standard: Dùng cho log thường xuyên truy cập. Hỗ trợ đầy đủ tính năng như: Live Tail (xem log real-time), Metric filter, Tạo cảnh báo (Alarms), Phân tích mẫu log (Log patterns), Bảo vệ dữ liệu (Data protection).
Infrequent Access: Dùng cho log ít khi cần xem (Logs Insights). Giúp tiết kiệm chi phí, vẫn có thể truy vấn khi cần để phân tích sự cố sau này.
Click vào demo-log-groups > Create log stream Tên: nhập MyLogStreamManual

Task 4: Kết nối EC2 Instance và cài CloudWatch Agent
Cài đặt agent:
sudo yum install -y amazon-cloudwatch-agent
Task 5: Cấu hình CloudWatch để gửi log
sudo nano /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "demo-log-groups",
"log_stream_name": "MyLogStreamManual"
}
]
}
}
}
}
Task 6: Khởi động CloudWatch Agent
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 //Kiem tra trang thai sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status //Tao log test logger "Log test sau khi gán IAM role" //Ghi log từ journalctl sang file /var/log/messages sudo yum install -y rsyslog sudo systemctl enable rsyslog sudo systemctl start rsyslog sudo tail -n 10 /var/log/messages
Kiểm tra kết quả:
Quay lại CloudWatch Log Groups
Chọn demo-log-groups→ MyLogStreamManual

6. Giám sát CPU, RAM, Disk trên EC2 – Hand On
Mục tiêu:
- Cài đặt CloudWatch Agent trên EC2 để thu thập thông tin về CPU, RAM, Disk.
- Hiển thị và giám sát metric (CPU, RAM, Disk) trên CloudWatch.
- Tạo Alarm cảnh báo khi vượt ngưỡng qua Email.
Cách thực hiện:
- Task 1: Gán IAM Role với quyền
CloudWatchAgentServerPolicy(Đã làm ở phần trước) - Task 2: Cài đặt CloudWatch Agent: sudo yum install -y amazon-cloudwatch-agent
- Task 3: Cấu hình CloudWatch Agent để gửi metric
- Task 4: Khởi động CloudWatch Agent
- Task 5: Tạo dashboard metric trên CloudWatch
- Task 6: Tạo CloudWatch Alarm (cảnh báo)
Task 1, Task 2: Xem ở phần CloudWatch Logs – Hand on (Task 1, Task 4)
Task 3: Cấu hình CloudWatch Agent để gửi metric
sudo tee /opt/aws/amazon-cloudwatch-agent/bin/config.json > /dev/null <<EOF
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root",
"region": "ap-southeast-1"
},
"metrics": {
"append_dimensions": {
"InstanceId": "\${aws:InstanceId}"
},
"metrics_collected": {
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
},
"disk": {
"measurement": ["disk_used_percent"],
"metrics_collection_interval": 60,
"resources": ["*"]
}
}
}
}
EOF
Task 4: Khởi động CloudWatch Agent
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
//Kiem tra trang thai
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

Task 5: Tạo dashboard metric trên CloudWatch
Bạn có thể tạo một dashboard theo thời gian thực hiển thị CPU, RAM, Disk bằng cách:
- Vào CloudWatch > Dashboards
- Chọn Create dashboard
- Thêm widget kiểu Line hoặc Number
- Gắn các metric sau:
- CWAgent > InstanceId > mem_used_percent
- CWAgent > InstanceId > disk_used_percent (xvda1)
- EC2 > Per-Instance Metrics > CPUUtilization





Task 6: Tạo CloudWatch Alarm (cảnh báo)
Bước 1:
- Chọn Alarms > All alarms
- Nhấn Create alarm

Bước 2:
- Nhấn Select metric
- Chọn tab Browse
- Điều hướng: CWAgent > InstanceId
- Tick chọn metric cpu_usage_idle
- Nhấn Select metric

Bước 3: Đặt điều kiện cảnh báo
- Threshold type: Static
- Whenever cpu_total_active is… → Greater than 80

Bước 4: Hành động cảnh báo
- Nhấn Create new topic
- Đặt tên: HighCPUAlertTopic
- Nhập email nhận cảnh báo
- AWS sẽ gửi email xác nhận → nhớ xác nhận

Bước 6: Đặt tên Alarm và tạo
- Alarm name: HighCPUUsageAlarm
- Nhấn Create alarm

Cảm ơn bạn đã tham khảo AWS Certified Solutions Architect Associate – SAA-C03 trên ttnguyen.net
Xem thêm: