Quay lại

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    comment-3 Created with Sketch Beta. 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:

 
sudo dnf install -y amazon-cloudwatch-agent

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:

 
/var/www/html/storage/logs/*.log

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

  1. Vào AWS Console → CloudWatch → Logs

  2. Chọn Log Group:

    • stg-backend-php

    • stg-backend-nginx

  3. Bạn sẽ thấy Log Stream tên dạng:

 
i-0abc123def45-php

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 awslogs driver

❗ 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:

 
dev-backend-php
stg-backend-php
prd-backend-php​

✔ 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)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday