Tối Ưu Hóa Hệ Thống Với CloudWatch Logs: Hướng Dẫn Triển Khai & Thu Thập Log Chuẩn Bài Trên AWS Chuyên mục Devops 2025-12-10 0 Lượt xem 0 Lượt thích 0 Bình luận
Trong bất kỳ hệ thống backend nào, log luôn là “xương sống” để bạn theo dõi hoạt động, truy vết lỗi, phân tích performance và tối ưu vận hành. Không có log, chúng ta gần như “mù thông tin”. Và trên AWS, dịch vụ mạnh mẽ nhất cho việc thu thập và phân tích log chính là Amazon CloudWatch Logs.
Bài viết này sẽ hướng dẫn bạn từ A → Z, bao gồm:
-
CloudWatch Logs hoạt động thế nào
-
Tại sao nên đưa log lên CloudWatch
-
Hướng dẫn cài đặt CloudWatch Agent
-
Cách cấu hình thu thập log từ EC2, Docker, Laravel
-
Test, verify và xử lý lỗi
-
Kèm theo best practices trong thực tế DevOps
Đây là bài dành cho người mới lẫn kỹ sư DevOps muốn triển khai CloudWatch Logs chuẩn chỉnh.
🌩 CloudWatch Logs là gì và tại sao bạn nên dùng?
CloudWatch Logs là hệ thống thu thập log tập trung của AWS, cho phép bạn:
✔ Lưu trữ log tập trung (centralized logging)
Không còn phải SSH vào từng server để tìm file log.
✔ Tìm kiếm, lọc, phân tích log trong vài giây
Dùng Filter Pattern, Metric Filter, Insights Query.
✔ Tạo alert khi có error
Ví dụ: khi thấy “ErrorException”, “CRITICAL”, “500”, CloudWatch sẽ gửi cảnh báo.
✔ Theo dõi log theo thời gian thực (real-time stream)
Hỗ trợ debug nhanh.
✔ Kết hợp nhiều nguồn log
EC2, ECS, Lambda, API Gateway, Load Balancer, Docker container…
🔧 Hai cách phổ biến để đưa log lên CloudWatch Logs
AWS cung cấp nhiều cách, nhưng dễ dùng nhất là:
1️⃣ Docker logging driver (awslogs) – realtime, đơn giản
Phù hợp nếu container log ra stdout.
→ Không cần cài agent.
2️⃣ CloudWatch Agent – đọc file log trên server
Phù hợp với Laravel / PHP-FPM / NGINX / hệ thống có file log.
→ Cách này chi tiết nhất nên sẽ hướng dẫn đầy đủ.
🏗 1. Cài đặt CloudWatch Agent trên EC2
Amazon Linux 2023:
Kiểm tra agent:
sudo systemctl status amazon-cloudwatch-agent
Nếu chưa chạy, không sao — ta sẽ start sau khi cấu hình.
📦 2. Chuẩn bị log từ ứng dụng (Laravel + Docker)
Laravel thường ghi log vào:
Nếu bạn đang chạy trong Docker, hãy mount log ra host:
docker run -d \
--name php \
-v /home/ec2-user/php_logs:/var/www/html/storage/logs \
your-laravel-php-image
Sau khi chạy, bạn sẽ thấy file log xuất hiện trên host:
ls -l /home/ec2-user/php_logs
✏️ 3. Tạo file cấu hình CloudWatch Agent
Tạo file:
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
Thêm nội dung:
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/home/ec2-user/php_logs/*.log",
"log_group_name": "stg-chime-backend-php",
"log_stream_name": "{instance_id}-php",
"timestamp_format": "TIMESTAMP",
"multi_line_start_pattern": "^\\[\\d{4}-\\d{2}-\\d{2}"
},
{
"file_path": "/home/ec2-user/nginx/logs/*.log",
"log_group_name": "stg-chime-backend-nginx",
"log_stream_name": "{instance_id}-nginx",
"timestamp_format": "%Y/%m/%d %H:%M:%S"
}
]
}
}
}
}
Bạn có thể đổi stg-backend-php theo môi trường dev/stg/prd.
▶️ 4. Khởi động CloudWatch Agent và apply config
Chạy:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
-s
Kiểm tra trạng thái:
sudo systemctl status amazon-cloudwatch-agent
🔍 5. Kiểm tra log đã lên CloudWatch chưa
-
Vào AWS Console → CloudWatch → Logs
-
Chọn Log Group:
-
stg-backend-php -
stg-backend-nginx
-
-
Bạn sẽ thấy Log Stream tên dạng:
Test nhanh:
echo "demo cloudwatch test" >> /home/ec2-user/php_logs/test.log
→ Sau 5–15 giây log sẽ có trên CloudWatch.
🧰 6. Xử lý lỗi & debugging
❗ Không thấy log?
-
Kiểm tra
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log -
Kiểm tra IAM Role của EC2 có policy
CloudWatchAgentServerPolicy -
Kiểm tra quyền đọc file của agent:
sudo ls -l /home/ec2-user/php_logs
❗ Log lên chậm?
-
CloudWatch Agent batch logs mỗi vài giây
-
Nếu cần realtime → dùng docker
awslogsdriver
❗ Timestamp sai?
Thêm timestamp_format:
"timestamp_format": "%Y-%m-%d %H:%M:%S"
🧭 7. Best Practices khi triển khai CloudWatch Logs
✔ Dùng retention policy:
Tránh tốn tiền log giữ quá lâu:
aws logs put-retention-policy \
--log-group-name stg-backend-php \
--retention-in-days 30
✔ Luôn đặt tên log group theo môi trường
VD:
✔ Mount logs ra host nếu dùng container
Để agent đọc log chuẩn xác.
✔ Nên dùng structured logs (JSON)
Dễ tìm kiếm trong CloudWatch Logs Insights.
✔ Tự động hóa deploy config bằng SSM Document
Đảm bảo mọi lần deploy đều đồng nhất.
🎯 Kết luận
Việc đưa log lên CloudWatch Logs không chỉ giúp bạn giảm thời gian debug mà còn tăng khả năng quan sát, giám sát và tự động hóa. Với CloudWatch, bạn có thể:
-
Theo dõi lỗi real-time
-
Tạo cảnh báo khi ứng dụng gặp sự cố
-
Hợp nhất tất cả log từ nhiều server/container
-
Phân tích log hiệu quả hơn
CloudWatch Logs là một phần quan trọng trong stack DevOps hiện đại, đặc biệt khi bạn triển khai backend bằng EC2 + Docker hoặc microservices.
Bình luận (0)