Quay lại

Kết hợp ALB Access Logs + Athena để Phân Tích & Giám Sát Hiệu Suất API Chuyên mục Devops    2025-11-04    1 Lượt xem    1 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Trong môi trường production, việc theo dõi hiệu suất APItình trạng hệ thống là vô cùng quan trọng. AWS cung cấp sẵn Application Load Balancer (ALB) Access Logs, nơi ghi lại toàn bộ request/response qua ALB, và Athena, công cụ truy vấn trực tiếp dữ liệu log trong S3 bằng SQL mà không cần hạ tầng phức tạp.

Bài viết này hướng dẫn chi tiết cách kết hợp ALB Access Logs với Athena để tạo hệ thống giám sát, thống kê và phân tích lỗi API nhanh chóng, tiết kiệm chi phí và dễ mở rộng.


🧰 1. Chuẩn bị môi trường

Yêu cầu:

  • Đã có ALB đang hoạt động.

  • AWS CLI được cấu hình sẵn quyền truy cập.

  • Một S3 bucket dùng để lưu access logs.


⚙️ 2. Bật ALB Access Logs

Trước tiên, bạn cần kích hoạt logging cho ALB của mình để ghi log vào S3.

# Thay thế các giá trị tương ứng
ALB_ARN="arn:aws:elasticloadbalancing:REGION:ACCOUNT:loadbalancer/app/YOUR-ALB-NAME/ID"
BUCKET_NAME="your-bucket-name"
LOG_PREFIX="alb-access-logs"

aws elbv2 modify-load-balancer-attributes \
  --load-balancer-arn $ALB_ARN \
  --attributes Key=access_logs.s3.enabled,Value=true \
               Key=access_logs.s3.bucket,Value=$BUCKET_NAME \
               Key=access_logs.s3.prefix,Value=$LOG_PREFIX \
  --region REGION

💡 Lưu ý: ALB sẽ ghi log chậm vài phút, vì vậy có thể mất 5–10 phút để log đầu tiên xuất hiện trong S3.


🧱 3. Tạo Database trong Athena

Vào Athena console hoặc dùng CLI, tạo database lưu dữ liệu log:

CREATE DATABASE IF NOT EXISTS alb_access_logs;

🧩 4. Tạo bảng Athena cho ALB Logs

Athena đọc dữ liệu trực tiếp từ S3 thông qua bảng external. Dưới đây là cấu trúc bảng dành cho ALB Access Logs với Partition Projection (tự động nhận biết phân vùng theo ngày, không cần MSCK REPAIR TABLE thủ công).

CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs.access_logs (
    type string,
    time string,
    elb string,
    client_ip string,
    client_port int,
    target_ip string,
    target_port int,
    request_processing_time double,
    target_processing_time double,
    response_processing_time double,
    elb_status_code int,
    target_status_code string,
    received_bytes bigint,
    sent_bytes bigint,
    request_verb string,
    request_url string,
    request_proto string,
    user_agent string,
    ssl_cipher string,
    ssl_protocol string,
    target_group_arn string,
    trace_id string,
    domain_name string,
    chosen_cert_arn string,
    matched_rule_priority string,
    request_creation_time string,
    actions_executed string,
    redirect_url string,
    lambda_error_reason string,
    target_port_list string,
    target_status_code_list string,
    classification string,
    classification_reason string,
    conn_trace_id string
)
PARTITIONED BY (day STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) "([^ ]*) (.*) (- |[^ ]*)" "([^"]*)" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) "([^"]*)" "([^"]*)" "([^"]*)" ([-.0-9]*) ([^ ]*) "([^"]*)" "([^"]*)" "([^ ]*)" "([^\\s]+?)" "([^\\s]+)" "([^ ]*)" "([^ ]*)" ?([^ ]*)? ?( .*)?'
)
LOCATION 's3://YOUR-BUCKET/alb-access-logs/AWSLogs/ACCOUNT-ID/elasticloadbalancing/REGION/'
TBLPROPERTIES (
  "projection.enabled" = "true",
  "projection.day.type" = "date",
  "projection.day.range" = "2025/01/01,NOW",
  "projection.day.format" = "yyyy/MM/dd",
  "projection.day.interval" = "1",
  "projection.day.interval.unit" = "DAYS",
  "storage.location.template" = "s3://YOUR-BUCKET/alb-access-logs/AWSLogs/ACCOUNT-ID/elasticloadbalancing/REGION/${day}"
);

Cần thay thế:

Placeholder Mô tả
YOUR-BUCKET Tên S3 bucket chứa log
ACCOUNT-ID AWS Account ID
REGION Vùng của ALB, ví dụ ap-northeast-1

📊 5. Một số truy vấn hữu ích trong Athena

Dưới đây là các truy vấn SQL phổ biến bạn có thể chạy ngay trong Athena console.

🔍 1. Tìm API có response time cao

SELECT time, request_url, target_processing_time, elb_status_code
FROM alb_access_logs.access_logs 
WHERE target_processing_time > 1.0
ORDER BY target_processing_time DESC
LIMIT 20;

Gợi ý: Dùng để phát hiện các API bị chậm bất thường, thường do backend xử lý lâu.


⚠️ 2. Tìm lỗi 4xx / 5xx

SELECT time, request_url, elb_status_code, target_status_code
FROM alb_access_logs.access_logs 
WHERE elb_status_code >= 400
ORDER BY time DESC
LIMIT 50;

Giúp xác định endpoint nào đang trả lỗi, kèm thời điểm cụ thể.


🔎 3. Lọc theo pattern URL cụ thể

SELECT time, request_url, target_processing_time
FROM alb_access_logs.access_logs 
WHERE request_url LIKE '%/api/v1/%'
LIMIT 100;

📅 4. Thống kê theo ngày

SELECT 
    DATE(time) as date,
    COUNT(*) as total_requests,
    AVG(target_processing_time) as avg_response_time,
    COUNT(CASE WHEN elb_status_code >= 400 THEN 1 END) as error_count
FROM alb_access_logs.access_logs 
WHERE day >= '2025/11/01'
GROUP BY DATE(time)
ORDER BY date DESC;

Tạo nhanh báo cáo tổng quan: tổng số request, thời gian phản hồi trung bình, và số lượng lỗi mỗi ngày.


🚨 6. Troubleshooting

Nếu không thấy dữ liệu trong Athena:

  1. Kiểm tra lại Access Log đã được bật trên ALB chưa.

  2. Đảm bảo S3 bucket có đúng quyền truy cập.

  3. Chờ ít nhất 10–15 phút sau khi bật log.

  4. Kiểm tra đường dẫn trong LOCATION có khớp với cấu trúc S3 thật không.


💡 7. Lợi ích của việc kết hợp ALB Logs + Athena

Lợi ích Mô tả
Phân tích tức thì Truy vấn log bằng SQL, không cần ETL hay database riêng.
Chi phí thấp Trả tiền theo lượng dữ liệu quét, không cần server.
Dễ tích hợp Có thể kết nối Athena với QuickSight hoặc Grafana để trực quan hóa dữ liệu.
Không cần bảo trì Không phải tạo hay xóa partition thủ công nhờ Partition Projection.

🎯 Kết luận

Với vài bước cấu hình đơn giản, bạn có thể biến ALB Access Logs + Athena thành một công cụ mạnh mẽ để:

  • Phân tích hiệu suất backend API

  • Theo dõi tỉ lệ lỗi theo thời gian

  • Điều tra nguyên nhân request chậm hoặc lỗi 5xx

  • Xây dựng dashboard giám sát realtime với QuickSight hoặc Grafana

Đây là một giải pháp giám sát production nhẹ, rẻ, và cực kỳ hiệu quả — đặc biệt phù hợp với các hệ thống dùng ECS hoặc microservices chạy sau ALB.

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