Tin tức và phân tích của tất cả các thiết bị di động

Cách sử dụng thông tin chi tiết về nhật ký AWS để truy vấn số liệu bảng thông tin từ nhật ký dịch vụ AWS

Mỗi dịch vụ AWS ghi lại quá trình xử lý của nó trong các tệp được sắp xếp trong nhóm nhật ký CloudWatch. Các nhóm nhật ký thường được đặt tên theo chính dịch vụ đó để nhận dạng dễ dàng hơn. Theo mặc định, thông báo hệ thống dịch vụ hoặc thông tin trạng thái chung được ghi vào các tệp nhật ký này.

Tuy nhiên, bạn có thể thêm thông tin nhật ký tùy chỉnh vào thông tin mặc định. Nếu những nhật ký đó được tạo một cách khôn ngoan thì chúng có thể được sử dụng để tạo bảng thông tin CloudWatch hữu ích.

Với các số liệu và thông tin có cấu trúc cung cấp thêm thông tin chi tiết về quá trình xử lý công việc. Chúng không chỉ có thể chứa các vật dụng tiêu chuẩn với thông tin hệ thống về dịch vụ. Bạn có thể mở rộng điều này bằng nội dung của riêng bạn, được biên dịch thành một tiện ích hoặc dữ liệu tùy chỉnh.

Tìm kiếm các tập tin nhật ký

Nguồn: aws.amazon.com

AWS CloudWatch Log Insights cho phép bạn tìm kiếm và phân tích dữ liệu nhật ký từ tài nguyên AWS trong thời gian thực. Bạn có thể xem nó như một chế độ xem cơ sở dữ liệu. Bạn xác định truy vấn trong trang tổng quan và trang tổng quan sẽ chọn truy vấn đó khi bạn truy cập truy vấn đó hoặc trong một khoảng thời gian cụ thể trước đây như được xác định trong chế độ xem trang tổng quan.

Nó sử dụng ngôn ngữ truy vấn có tên CloudWatch Logs Insights để tìm kiếm và phân tích dữ liệu nhật ký. Ngôn ngữ truy vấn dựa trên một tập hợp con của SQL. Cho phép bạn tìm kiếm và lọc dữ liệu nhật ký. Bạn có thể tìm kiếm các sự kiện nhật ký cụ thể, văn bản nhật ký tùy chỉnh hoặc từ khóa và lọc dữ liệu nhật ký dựa trên các trường cụ thể. Quan trọng nhất là tổng hợp dữ liệu nhật ký vào một hoặc nhiều tệp nhật ký để tạo ra các số liệu và hình ảnh hóa tóm tắt.

Khi bạn chạy truy vấn, CloudWatch Log Insights sẽ tìm kiếm dữ liệu nhật ký trong nhóm nhật ký. Sau đó, nó trả về văn bản thu được từ các tệp phù hợp với tiêu chí truy vấn.

Ví dụ về truy vấn tệp nhật ký

Chúng ta hãy xem xét một số truy vấn cơ bản để hiểu khái niệm này.

Theo mặc định, mỗi dịch vụ sẽ ghi lại một số lỗi dịch vụ chính. Ngay cả khi bạn không tạo nhật ký tùy chỉnh chuyên dụng cho các sự kiện lỗi như vậy. Sau đó, bằng một truy vấn đơn giản, bạn có thể đếm số lỗi trong nhật ký ứng dụng trong giờ qua:

fields @timestamp, @message
| filter @message like /ERROR/
| stats count() by bin(1h)

Dưới đây là cách theo dõi thời gian phản hồi API trung bình trong ngày qua:

fields @timestamp, @message
| filter @message like /API response time/
| stats avg(response_time) by bin(1d)

Vì mức sử dụng CPU là thông tin được dịch vụ CloudWatch ghi lại theo mặc định nên bạn cũng có thể thu thập các loại số liệu sau:

fields @timestamp, @message
| filter @message like /CPUUtilization/
| stats avg(value) by bin(1h)

Các truy vấn này có thể được điều chỉnh cho phù hợp với trường hợp sử dụng cụ thể của bạn và có thể được sử dụng để tạo số liệu và hình ảnh trực quan tùy chỉnh trong bảng thông tin CloudWatch. Cách để thực hiện việc này là đặt tiện ích trên trang tổng quan và đặt mã bên trong tiện ích để chỉ định nội dung cần chọn.

Dưới đây là một số tiện ích có thể được sử dụng trong bảng thông tin CloudWatch và chứa nội dung từ Nhật ký thông tin chi tiết:

  • Tiện ích văn bản – Hiển thị thông tin văn bản như đầu ra truy vấn CloudWatch Insights.
  • Tiện ích truy vấn nhật ký – Hiển thị kết quả của truy vấn nhật ký CloudWatch Insights, chẳng hạn như số lỗi trong nhật ký ứng dụng.

Cách tạo thông tin nhật ký hữu ích cho bảng điều khiển

Nguồn: aws.amazon.com

Để sử dụng hiệu quả truy vấn CloudWatch Insights trong Bảng thông tin CloudWatch, bạn nên làm theo các phương pháp hay nhất khi tạo nhật ký CloudWatch cho từng dịch vụ được sử dụng trong hệ thống. Dưới đây là một số lời khuyên:

# 1. Sử dụng ghi nhật ký có cấu trúc

Bạn nên tuân theo định dạng ghi nhật ký sử dụng sơ đồ được xác định trước để ghi dữ liệu theo định dạng có cấu trúc. Điều này giúp dễ dàng tìm kiếm và lọc dữ liệu nhật ký bằng truy vấn CloudWatch Insights.

Về cơ bản, điều này có nghĩa là chuẩn hóa nhật ký trên các dịch vụ khác nhau trên nền tảng kiến ​​trúc. Việc xác định nó trong các tiêu chuẩn lập trình sẽ giúp ích rất nhiều.

Ví dụ: bạn có thể xác định rằng mọi vấn đề liên quan đến một bảng cơ sở dữ liệu cụ thể sẽ được ghi lại bằng thông báo khởi động, chẳng hạn như: “[TABLE_NAME] Cảnh báo/Lỗi: “.

Bạn cũng có thể tách các công việc dữ liệu đầy đủ khỏi các công việc dữ liệu delta bằng các tiền tố như “[FULL/DELTA]để chỉ chọn các tin nhắn liên quan đến quy trình dữ liệu cụ thể.

Bạn có thể xác định rằng khi xử lý dữ liệu từ một hệ thống nguồn cụ thể, tên hệ thống sẽ là tiền tố của mỗi mục nhật ký liên quan. Sau này, việc lọc những thông báo như vậy khỏi tệp nhật ký và xây dựng số liệu từ chúng sẽ dễ dàng hơn nhiều.

Nguồn: aws.amazon.com

#2. Sử dụng các định dạng nhật ký nhất quán

Sử dụng các định dạng nhật ký nhất quán trên tất cả tài nguyên AWS của bạn để giúp dễ dàng tìm kiếm và lọc dữ liệu nhật ký bằng truy vấn CloudWatch Insights.

Điều này khá liên quan đến điểm trước, nhưng thực tế là định dạng nhật ký càng được chuẩn hóa thì việc sử dụng dữ liệu nhật ký càng dễ dàng hơn. Sau đó, các nhà phát triển có thể dựa vào định dạng này và sử dụng nó một cách trực quan.

Sự thật phũ phàng là hầu hết các dự án đều không quan tâm đến bất kỳ tiêu chuẩn ghi nhật ký nào. Hơn nữa, nhiều dự án không tạo bất kỳ nhật ký tùy chỉnh nào cả. Nó gây sốc, nhưng đồng thời cũng rất phổ biến.

Tôi không thể đếm được đã bao nhiêu lần tôi tự hỏi làm sao mọi người có thể sống ở đây mà không có bất kỳ phương pháp xử lý lỗi nào. Và nếu ai đó đã cố gắng thực hiện một số thao tác xử lý lỗi như một ngoại lệ thì họ đã làm sai.

Vì vậy, định dạng nhật ký nhất quán là một tài sản mạnh mẽ. Không có nhiều người có chúng.

#3. Bao gồm siêu dữ liệu có liên quan

Đưa siêu dữ liệu vào dữ liệu nhật ký như dấu thời gian, ID tài nguyên và mã lỗi để giúp tìm kiếm và lọc dữ liệu nhật ký bằng truy vấn CloudWatch Insights dễ dàng hơn.

#4. Bật xoay vòng nhật ký

Bật xoay vòng nhật ký để ngăn dữ liệu nhật ký trở nên quá lớn và giúp tìm kiếm cũng như lọc dữ liệu nhật ký dễ dàng hơn bằng truy vấn CloudWatch Insights.

Không có dữ liệu nhật ký là một chuyện, nhưng có quá nhiều dữ liệu không có cấu trúc cũng là điều tuyệt vọng tương tự. Nếu bạn không thể sử dụng dữ liệu của mình thì có nghĩa là bạn không có dữ liệu đó.

#5. Sử dụng tác nhân nhật ký CloudWatch

Nếu bạn không thể tự giúp mình và từ chối xây dựng hệ thống nhật ký tùy chỉnh, ít nhất hãy sử dụng tác nhân CloudWatch Logs. Chúng tự động gửi dữ liệu nhật ký từ tài nguyên AWS tới nhật ký CloudWatch. Điều này giúp dễ dàng tìm kiếm và lọc dữ liệu nhật ký bằng truy vấn CloudWatch Insights.

Các ví dụ phức tạp hơn về truy vấn thông tin chi tiết

Truy vấn CloudWatch Insights có thể phức tạp hơn chỉ một câu lệnh hai dòng.

fields @timestamp, @message
| filter @message like /ERROR/
| filter @message not like /404/
| parse @message /.*\[(?<timestamp>[^\]]+)\].*\"(?<method>[^\s]+)\s+(?<path>[^\s]+).*\" (?<status>\d+) (?<response_time>\d+)/
| stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status
| sort count desc
| limit 20

Truy vấn này thực hiện như sau:

  • Chọn các sự kiện trong nhật ký có chứa chuỗi “ERROR” nhưng không chứa chuỗi “404”.
  • Phân tích thông điệp tường trình để trích xuất dấu thời gian, phương thức HTTP, đường dẫn, mã trạng thái và thời gian phản hồi.
  • Tính toán thời gian phản hồi trung bình và số lượng sự kiện nhật ký cho từng kết hợp phương thức HTTP, đường dẫn, mã trạng thái và thời gian.
  • Sắp xếp kết quả theo thứ tự giảm dần.
  • Giới hạn đầu ra ở 20 kết quả hàng đầu.
  • Truy vấn này xác định các lỗi phổ biến nhất trong ứng dụng của bạn và theo dõi thời gian phản hồi trung bình cho từng kết hợp phương thức HTTP, đường dẫn và mã trạng thái. Bạn có thể sử dụng kết quả để tạo số liệu và hình ảnh tùy chỉnh trong Bảng thông tin CloudWatch nhằm theo dõi hiệu suất và khắc phục sự cố của ứng dụng web.

    Một ví dụ khác về truy vấn tin nhắn dịch vụ Amazon S3:

    fields @timestamp, @message
    | filter @message like /REST\.API\.REQUEST/
    | parse @message /.*\"(?<method>[^\s]+)\s+(?<path>[^\s]+).*\" (?<status>\d+) (?<response_time>\d+)/
    | stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status
    | sort count desc
    | limit 20
    • Truy vấn chọn các sự kiện nhật ký có chứa chuỗi “REST.API.REQUEST”.
    • Sau đó, nó phân tích thông điệp tường trình để trích xuất phương thức HTTP, đường dẫn, mã trạng thái và thời gian phản hồi.
    • Tính toán thời gian phản hồi trung bình và số lượng sự kiện nhật ký cho từng tổ hợp phương thức HTTP, đường dẫn và mã trạng thái, sau đó sắp xếp kết quả theo số theo thứ tự giảm dần.
    • Giới hạn đầu ra ở 20 kết quả hàng đầu.

    Bạn có thể sử dụng đầu ra của truy vấn này để tạo biểu đồ dạng đường trong Bảng thông tin CloudWatch hiển thị thời gian phản hồi trung bình cho từng tổ hợp phương thức HTTP, đường dẫn và mã trạng thái theo thời gian.

    Xây dựng bảng điều khiển

    Để điền số liệu và hình ảnh trực quan vào Bảng thông tin CloudWatch dựa trên đầu ra của truy vấn nhật ký CloudWatch Insights, bạn có thể truy cập bảng điều khiển CloudWatch và làm theo trình hướng dẫn Bảng thông tin để tạo nội dung.

    Mã bảng điều khiển CloudWatch trông như thế này và có các số liệu được điền bằng dữ liệu truy vấn CloudWatch Insights:

    {
        "widgets": [
            {
                "type": "metric",
                "x": 0,
                "y": 0,
                "width": 12,
                "height": 6,
                "properties": {
                    "metrics": [
                        [
                            "AWS/EC2",
                            "CPUUtilization",
                            "InstanceId",
                            "i-0123456789abcdef0",
                            {
                                "label": "CPU Utilization",
                                "stat": "Average",
                                "period": 300
                            }
                        ]
                    ],
                    "view": "timeSeries",
                    "stacked": false,
                    "region": "us-east-1",
                    "title": "EC2 CPU Utilization"
                }
            },
            {
                "type": "log",
                "x": 0,
                "y": 6,
                "width": 12,
                "height": 6,
                "properties": {
                    "query": "fields @timestamp, @message
    | filter @message like /ERROR/
    | stats count() by bin(1h)
    ",
                    "region": "us-east-1",
                    "title": "Application Errors"
                }
            }
        ]
    }

    Bảng thông tin CloudWatch này bao gồm hai tiện ích:

  • Tiện ích số liệu hiển thị mức sử dụng CPU trung bình của phiên bản EC2 theo thời gian. Truy vấn CloudWatch Insights sẽ điền vào tiện ích. Chọn dữ liệu sử dụng CPU cho một phiên bản EC2 cụ thể và tổng hợp dữ liệu đó theo từng khoảng thời gian 5-phút.
  • Một tiện ích nhật ký hiển thị số lượng lỗi ứng dụng theo thời gian. Chọn các sự kiện trong nhật ký có chứa chuỗi “ERROR” và tổng hợp chúng theo thời gian.
  • Đó là tệp JSON có định nghĩa và số liệu trên trang tổng quan bên trong. Nó cũng chứa (như một thuộc tính) chính truy vấn tra cứu.

    Bạn có thể lấy mã và triển khai nó vào bất kỳ tài khoản AWS nào bạn cần. Giả sử các dịch vụ và thông báo nhật ký nhất quán trên tất cả các tài khoản và giai đoạn AWS, bảng thông tin sẽ hoạt động trên tất cả các tài khoản mà không cần phải thay đổi mã nguồn của bảng thông tin.

    những từ cuối

    Xây dựng một cấu trúc đăng nhập vững chắc luôn là một sự đầu tư tốt cho độ tin cậy của hệ thống trong tương lai. Bây giờ nó có thể phục vụ một mục đích thậm chí còn lớn hơn. Là một tác dụng phụ, bạn có thể có bảng điều khiển hữu ích với dữ liệu và hình ảnh.

    Chỉ phải thực hiện một lần, với ít công việc bổ sung, nhóm phát triển, nhóm thử nghiệm và người dùng sản xuất có thể sử dụng cùng một giải pháp.

    Sau đó, hãy xem các công cụ giám sát AWS tốt nhất.