Thông tin chi tiết và phân tích log

Giám sát và Khắc phục sự cố trên AWS

John Q. Martin

Principal Consultant

Cấu trúc truy vấn Logs Insights

 

 

Cấu trúc truy vấn Logs Insights hiển thị các lệnh pipe nối nhau: fields, filter, stats, sort và limit

Giám sát và Khắc phục sự cố trên AWS

Ngôn ngữ truy vấn: cùng một truy vấn, ba cách

CloudWatch Logs Insights QL

fields @timestamp, @message, level
| filter level = "ERROR"
| filter @timestamp > ago(1h)
| sort @timestamp desc
| limit 20

OpenSearch PPL

source = `/aws/lambda/my-function`
| where level = 'ERROR' and @timestamp > ago(1h)
| fields @timestamp, @message, level
| sort - @timestamp
| head 20
Giám sát và Khắc phục sự cố trên AWS

Ngôn ngữ truy vấn: OpenSearch SQL

OpenSearch SQL

SELECT `@timestamp`, `@message`, level
FROM `/aws/lambda/my-function`
WHERE level = 'ERROR'
  AND `@timestamp` > ago(1h)
ORDER BY `@timestamp` DESC
LIMIT 20

 

  • Cú pháp chuẩn SELECT / FROM / WHERE
  • Thêm JOIN giữa các nhóm log
  • Chọn cách hợp với nhóm của bạn
Giám sát và Khắc phục sự cố trên AWS

Kịch bản 1: Tìm đột biến lỗi

fields @timestamp, @message, level
| filter level = "ERROR"
| stats count() as error_count by bin(5m)
| sort @timestamp desc
Nâng cao: nhóm theo loại lỗi
fields @timestamp, error_type, error_message
| filter level = "ERROR"
| stats count() as count by error_type, bin(5m)
| sort count desc
Giám sát và Khắc phục sự cố trên AWS

Kịch bản 2: Endpoint API chậm

fields @timestamp, endpoint, response_time, status_code
| filter response_time > 1000
| stats avg(response_time) as avg_time,
        max(response_time) as max_time,
        count() as slow_requests
        by endpoint
| sort avg_time desc
Drill-down
fields @timestamp, endpoint, response_time, user_id, request_id
| filter endpoint = "/api/users" and response_time > 1000
| sort response_time desc
| limit 20
Giám sát và Khắc phục sự cố trên AWS

Kịch bản 3: Xác thực thất bại

fields @timestamp, user_id, ip_address, action
| filter action = "login_failed"
| stats count() as failed_attempts by user_id, ip_address
| sort failed_attempts desc
| limit 50
Phân tích theo thời gian
fields @timestamp, user_id, ip_address
| filter action = "login_failed"
| stats count() as attempts by ip_address, bin(1h)
| filter attempts > 10
| sort attempts desc
Giám sát và Khắc phục sự cố trên AWS

Kịch bản 4 & 5: Quá hạn DB và rò rỉ bộ nhớ

Quá hạn kết nối cơ sở dữ liệu
fields @timestamp, @message
| filter @message like /database/ and @message like /timeout|error|failed/
| parse @message "timeout after * seconds" as timeout_duration
| stats count() as timeout_count,
        avg(timeout_duration) as avg_timeout
        by bin(5m)
Phát hiện rò rỉ bộ nhớ
fields @timestamp, memory_used_mb, heap_size_mb
| stats avg(memory_used_mb) as avg_memory,
        max(memory_used_mb) as max_memory
        by bin(1h)
| sort @timestamp asc
Giám sát và Khắc phục sự cố trên AWS

Kịch bản 6: Truy vết yêu cầu

fields @timestamp, @message, request_id, service, action
| filter request_id = "abc123def456"
| sort @timestamp asc
Truy vết nhiều dịch vụ
fields @timestamp, service, action, duration_ms, status
| filter request_id = "abc123def456"
| sort @timestamp asc
| display @timestamp, service, action, duration_ms, status
Giám sát và Khắc phục sự cố trên AWS

Kỹ thuật nâng cao: parse, Regex

Phân tích log không cấu trúc
fields @timestamp, @message
| parse @message "[*] User * failed to access resource * from IP *"
    as level, user, resource, ip
Phân tích bằng Regex
| parse @message /Request completed in (?<duration>\d+)ms with status (?<status>\d+)/
Giám sát và Khắc phục sự cố trên AWS

Kỹ thuật nâng cao: Trường tính toán

 

fields @timestamp, requests, errors
| fields error_rate = (errors / requests) * 100

fields @timestamp, status_code
| fields status_category =
    case(status_code < 300, "success",
         status_code < 500, "client_error",
         status_code >= 500, "server_error")
| stats count() as request_count by status_category
Giám sát và Khắc phục sự cố trên AWS

Tối ưu hóa truy vấn

 

Bốn quy tắc tối ưu truy vấn: đặt bộ lọc phạm vi thời gian trước khi tổng hợp, giới hạn kết quả và ưu tiên phép tổng hợp

Giám sát và Khắc phục sự cố trên AWS

Phát hiện bất thường và tương quan

Phát hiện bất thường thống kê
  • Tính baseline: trung bình và độ lệch chuẩn trong 7 ngày
  • So sánh giai đoạn hiện tại với baseline
  • Gắn cờ giá trị > 2 độ lệch chuẩn là bất thường
Tương quan tỷ lệ lỗi
fields @timestamp, level
| stats count() as total_requests,
        sum(case(level = "ERROR", 1, 0)) as errors
        by bin(5m)
| fields error_rate = (errors / total_requests) * 100
Giám sát và Khắc phục sự cố trên AWS

Tóm tắt

 

  • CloudWatch Logs Insights: dịch vụ truy vấn tương tác, không cần hạ tầng
  • Ba ngôn ngữ truy vấn: Logs Insights QL, OpenSearch PPL, OpenSearch SQL
  • Sáu kịch bản khắc phục sự cố: đột biến lỗi, endpoint chậm, xác thực lỗi, quá hạn DB, rò rỉ bộ nhớ, truy vết yêu cầu
  • Kỹ thuật nâng cao: parse cho văn bản không cấu trúc, bin() cho chuỗi thời gian, pct() cho percentile
  • Tương quan và phát hiện bất thường: phân tích tỷ lệ lỗi, so sánh baseline thống kê
  • Từ điều tra đến tự động hóa: bộ lọc metric và cảnh báo khép vòng
Giám sát và Khắc phục sự cố trên AWS

Cùng luyện tập nào!

Giám sát và Khắc phục sự cố trên AWS

Preparing Video For Download...