0
0
Lập trình
Admin Team
Admin Teamtechmely

Biến dòng log thành cảnh báo mà không cần hệ thống quan sát phức tạp

Đăng vào 2 tháng trước

• 6 phút đọc

Biến dòng log thành cảnh báo mà không cần hệ thống quan sát phức tạp

Giới thiệu

Sự thật lạnh lùng là: vấn đề thường xuất hiện trong log trước tiên. Bí quyết là biến những dòng "ôi thôi" đó thành một thông báo trong hộp thư của bạn trước khi người dùng cảm thấy điều gì đó không ổn. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng AWS để tự động hóa quy trình này mà không cần phải xây dựng một hệ thống quan sát toàn diện.

Sơ đồ tổng quan

CloudWatch Logs → Metric Filter → Alarm → SNS (Email/Slack)
Không cần chạy dịch vụ mới. Không cần thêm tác nhân. Chỉ cần kết nối.

Tại sao điều này hiệu quả?

Hãy nghĩ về CloudWatch Logs như một dòng sông. Các bộ lọc metric là những cái lưới nhỏ mà bạn thả xuống: "bắt bất kỳ điều gì trông giống như ERROR" hoặc "lấy JSON mà level=ERROR và service=payments". Mỗi lần bắt được sẽ tăng một chỉ số. Các cảnh báo sẽ theo dõi chỉ số đó và boom; email, Slack, PagerDuty, hoặc bất cứ cái gì bạn thích.

Giá rẻ. Nhanh chóng. Không cần thay đổi ứng dụng.

plaintext Copy
App → CloudWatch Logs ──(metric filter)──▶ Metric  
│  
└──▶ Alarm ──▶ SNS ──▶ Email/Slack

Các bước thực hiện

Bước 1: Tạo một chủ đề SNS (để bạn nhận thông báo)

bash Copy
aws sns create-topic --name app-alarms
# sao chép "TopicArn" từ đầu ra
TOPIC_ARN="arn:aws:sns:REGION:ACCOUNT_ID:app-alarms"

# đăng ký email của bạn (xác nhận email để kích hoạt)
aws sns subscribe \
  --topic-arn "$TOPIC_ARN" \
  --protocol email \
  --notification-endpoint you@example.com

Bước 2: Thêm bộ lọc metric vào nhóm log của bạn

Tùy chọn A — từ khóa đơn giản (“ERROR” nhưng không phải health checks):

bash Copy
LOG_GROUP="/aws/lambda/my-fn"

aws logs put-metric-filter \
  --log-group-name "$LOG_GROUP" \
  --filter-name "ErrorCount" \
  --filter-pattern '"ERROR" -HealthCheck' \
  --metric-transformations \
      metricName=ErrorCount,metricNamespace="App/Alerts",metricValue=1,defaultValue=0

Tùy chọn B — log JSON có cấu trúc (được khuyến nghị):

bash Copy
aws logs put-metric-filter \
  --log-group-name "$LOG_GROUP" \
  --filter-name "PaymentsErrors" \
  --filter-pattern '{ $.level = "ERROR" && $.service = "payments" }' \
  --metric-transformations \
      metricName=PaymentsErrorCount,metricNamespace="App/Alerts",metricValue=1

Bước 3: Tạo một cảnh báo trên chỉ số đó

Cảnh báo nếu chúng ta thấy ≥ 1 lỗi mỗi phút trong 3 phút:

bash Copy
aws cloudwatch put-metric-alarm \
  --alarm-name "LambdaErrorBurst" \
  --metric-name ErrorCount \
  --namespace "App/Alerts" \
  --statistic Sum \
  --period 60 \
  --evaluation-periods 3 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --treat-missing-data notBreaching \
  --alarm-actions "$TOPIC_ARN" \
  --ok-actions "$TOPIC_ARN"

Bước 4: Kiểm tra nó (đừng bỏ qua)

  1. Log một ERROR phù hợp với bộ lọc của bạn.
  2. Trong CloudWatch Metrics → App/Alerts, đảm bảo rằng chỉ số tăng lên.
  3. Quan sát cảnh báo chuyển thành ALARM và kiểm tra email của bạn.

Nếu không có gì xảy ra, hãy vào Nhóm Log của bạn → Bộ lọc metric → Kiểm tra mẫu và dán một dòng log thực tế. Nó sẽ cho bạn biết nếu mẫu của bạn khớp.

Dành cho những ai thích Terraform? Đây là toàn bộ quy trình

hcl Copy
resource "aws_sns_topic" "app_alarms" {
  name = "app-alarms"
}

resource "aws_sns_topic_subscription" "email" {
  topic_arn = aws_sns_topic.app_alarms.arn
  protocol  = "email"
  endpoint  = "you@example.com"
}

resource "aws_cloudwatch_log_metric_filter" "errors" {
  name           = "ErrorCount"
  log_group_name = "/aws/lambda/my-fn"
  pattern        = "\"ERROR\" -HealthCheck"

  metric_transformation {
    name          = "ErrorCount"
    namespace     = "App/Alerts"
    value         = "1"
    default_value = "0"
  }
}

resource "aws_cloudwatch_metric_alarm" "error_alarm" {
  alarm_name          = "LambdaErrorBurst"
  namespace           = "App/Alerts"
  metric_name         = "ErrorCount"
  statistic           = "Sum"
  period              = 60
  evaluation_periods  = 3
  threshold           = 1
  comparison_operator = "GreaterThanOrEqualToThreshold"
  treat_missing_data  = "notBreaching"
  alarm_actions       = [aws_sns_topic.app_alarms.arn]
  ok_actions          = [aws_sns_topic.app_alarms.arn]
}

Những vấn đề thường gặp (học được từ kinh nghiệm)

  • Chú ý đến chữ hoa. ERROR ≠ error. Khớp với những gì bạn thực sự ghi lại.
  • Khớp từng dòng. Bộ lọc xem xét từng dòng một. Nếu stack trace trải dài qua nhiều dòng, hãy phụ thuộc vào trường level trong JSON.
  • Tài khoản/khu vực đúng. Bộ lọc metric phải sống trong nhóm log.
  • Tránh tăng cao cardinality. Giữ một metric cho mỗi tín hiệu; không đưa ID vào tên metric.
  • Không có cảnh báo trong thời gian yên tĩnh. Cài đặt "treat missing data" là viên thuốc an thần của bạn.

Những biến thể bạn có thể muốn

  • Slack/Teams: SNS → lambda → Slack (điểm & nhấp).
  • PagerDuty/Opsgenie: SNS → EventBridge → công cụ xử lý sự cố của bạn.
  • **Ng阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐阐
  • Cảnh báo thông minh: Thử cảnh báo phát hiện bất thường khi bạn có lưu lượng cơ bản.
  • Cảnh báo hợp thành: “Chỉ cảnh báo nếu lỗi tăng và độ trễ p50 xấu.”

Bạn không cần phải xây dựng lại một hệ thống quan sát khổng lồ để nhận được những cảnh báo hữu ích. Bắt đầu với một hoặc hai mẫu tín hiệu cao như timeouts, 5xx, “thanh toán thất bại” và kết nối chúng với email, sau đó lặp lại.

Nỗ lực nhỏ. Mạng an toàn lớn.

Kết luận

Việc thiết lập cảnh báo từ log có thể giúp bạn phát hiện và xử lý sự cố trước khi người dùng gặp phải vấn đề. Bằng cách sử dụng AWS CloudWatch, bạn có thể tạo ra một hệ thống cảnh báo hiệu quả mà không cần phải đầu tư vào một hệ thống quan sát phức tạp. Hãy bắt đầu ngay hôm nay và bảo vệ ứng dụng của bạn khỏi những rủi ro không đáng có!

Câu hỏi thường gặp

  1. Tôi cần làm gì nếu cảnh báo không hoạt động?
    • Kiểm tra lại cấu hình của bạn trong CloudWatch và đảm bảo rằng bộ lọc của bạn khớp với định dạng log thực tế.
  2. Có cách nào khác để nhận cảnh báo không?
    • Bạn có thể sử dụng các công cụ như PagerDuty hoặc Opsgenie để nhận cảnh báo từ SNS.
  3. Tôi có thể sử dụng cách này cho tất cả các loại log không?
    • Có, bạn có thể tinh chỉnh bộ lọc để phù hợp với các log khác nhau tùy thuộc vào nhu cầu của ứng dụng.

Tài nguyên tham khảo

Hãy thử nghiệm ngay hôm nay và nâng cao khả năng giám sát ứng dụng của bạn!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào