Subscription filter là gì?

Subscription filter có thể sử dụng với Kinesis Data Streams, Lambda, hoặc Kinesis Data Firehose. Các log được gửi đến dịch vụ đích thông qua subscription filter được mã hóa base64 và nén theo định dạng gzip.

Đây là tính năng cho phép phát hiện log xuất ra từ CloudWatch Logs trong thời gian thực và có thể liên kết dữ liệu chứa các chuỗi cụ thể hoặc toàn bộ dữ liệu với Kinesis Data Streams, Kinesis Data Firehose, Lambda,…

Cài đặt được thực hiện bằng CLI.

CloudWatch Logs subscription filter có thể được tạo bằng lệnh `aws logs put-subscription-filter`. Sau khi cài đặt subscription filter, tất cả các log event phù hợp với filter pattern sẽ được CloudWatch Logs chuyển tiếp đến stream.

Ví dụ, nếu có chuỗi [Error] trong CloudWatch Logs subscription filter, log sẽ được gửi đến Lambda rồi thông qua SNS thông báo đến chat. 

Sơ đồ hoạt động của Subscription filter trong chuỗi hoạt động của CloudWatch Logs
Sơ đồ hoạt động của Subscription filter trong chuỗi hoạt động của CloudWatch Logs

Nội dung cập nhật Subscription filter

Subscription filter cấp độ tài khoản sử dụng API put-account-policy đã được hỗ trợ. 

Cập nhật này cho phép phân phối các log event theo thời gian thực đã được nhập vào Amazon CloudWatch Logs đến Amazon Kinesis Data Stream, Amazon Kinesis Data Firehose, hoặc AWS Lambda, và thực hiện xử lý, phân tích tùy chỉnh sử dụng AWS account level filter, hoặc chuyển tiếp đến các đích khác.

Cách sử dụng Subscription filter cấp độ tài khoản là thiết lập một chính sách Subscription filter đơn lẻ, cho phép xuất log từ nhiều hoặc tất cả các nhóm log. Vì không cần Subscription filter cho từng nhóm log nên giúp giảm thời gian thực hiện. 

Subscription filter cấp độ tài khoản có sẵn cho cả nhóm log hiện có và những nhóm mới tạo.

Sau khi tạo IAM Role, có thể tạo Subscription filter cấp độ tài khoản như sau.

Kinesis data stream

aws logs put-account-policy \

–policy-name “ExamplePolicy” \

–policy-type “SUBSCRIPTION_FILTER_POLICY” \

–policy-document ‘{“RoleArn”:”arn:aws:iam::123456789012:role/CWLtoKinesisRole”, “DestinationArn”:”arn:aws:kinesis:region:123456789012:stream/TestStream”, “FilterPattern”: “Test”, “Distribution”: “Random”}’ \

–selection-criteria ‘LogGroupName NOT IN [“LogGroupToExclude1”, “LogGroupToExclude2”]’ \

–scope “ALL”

Lambda

aws logs put-account-policy \

–policy-name “ExamplePolicyLambda” \

–policy-type “SUBSCRIPTION_FILTER_POLICY” \

–policy-document ‘{“DestinationArn”:”arn:aws:lambda:region:123456789012:function:helloWorld”, “FilterPattern”: “Test”, “Distribution”: “Random”}’ \

–selection-criteria ‘LogGroupName NOT IN [“LogGroupToExclude1”, “LogGroupToExclude2”]’ \

–scope “ALL”

Kinesis Data Firehose

aws logs put-account-policy \

–policy-name “ExamplePolicyFirehose” \

–policy-type “SUBSCRIPTION_FILTER_POLICY” \

–policy-document ‘{“RoleArn”:”arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole”, “DestinationArn”:”arn:aws:firehose:us-east-1:123456789012:deliverystream/delivery-stream-name”, “FilterPattern”: “Test”, “Distribution”: “Random”}’ \

–selection-criteria ‘LogGroupName NOT IN [“LogGroupToExclude1”, “LogGroupToExclude2”]’ \

–scope “ALL”

Tham khảo: 【アップデート】CloudWatch Logsでアカウントレベルのサブスクリプションフィルターが発表されました | SunnyCloud