Amazon CloudWatch Logsの最近のアップデートで、アカウントレベルのサブスクリプションフィルタリングのサポートが導入された。この機能強化により、開発者は全てのロググループからCloudWatch Logsのリアルタイムフィードにアクセスし、さらに処理するために単一の宛先に配信ができる。
単一のアカウントレベルのサブスクリプションフィルター実装により、Amazon CloudWatch Logsに取り込まれたリアルタイムのログイベントを、Kinesis Data Stream、Amazon Kinesis Data Firehose、またはAWS Lambdaに配信し、カスタム処理、分析、または別の配信先にリダイレクトできる。アカウントのロググループのサブセットを含むアカウントレベルのサブスクリプションポリシーを設定できる。
アカウントレベルのサブスクリプションポリシーを通じて受信サービスに送信されるすべてのログは、base64エンコードされ、gzipファイルとして圧縮される。大規模で複雑なAWSデプロイメントを管理するオーバーヘッドを削減するために設計されたアカウントレベルのサブスクリプションフィルタは、既存のロググループと、設定に一致する将来のロググループの両方に適用される。AmptのCEO兼創設者であるJeremy Daly氏は次のようにコメントしている。
これは、何十(何百とは言わないまでも)ものロググループサブスクリプションフィルタと格闘している我々にとっては夢のような話です。
put-account-policy
APIを使ってCloudWatch Logsのアカウントレベルのサブスクリプションを設定できる。例えば、AWS CLIを使って、以下のコマンドは、グループ名LogGroupToExclude1
とLogGroupToExclude2
を除いて、全てのログデータをhelloWorld
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"
出典出典:AWSドキュメント
選択された宛先に関わらず、AWSはスロットリングを避けるために、生成されるログデータの量を前もって評価することの重要性を強調している。開発者は、Kinesis Data FirehoseストリームやLambda関数がそのボリュームを処理できること、あるいはKinesis Data Streamsに十分なシャードがあることを確認する必要がある。Kinesis Data Streamsでは、スロットリングされた配信物は最大24時間再試行され、その後ドロップされる。
クラウドプロバイダーは、サブスクリプションフィルターによる無限再帰ループが発生し、取り込み料金の大幅な増加を引き起こすリスクについても警告している。チームは、再帰防止に関するアドバイスを提供している。
このリスクを軽減するために、アカウントレベルのサブスクリプションフィルタで選択基準を使用して、サブスクリプション配信ワークフローの一部であるリソースからログデータを取り込むロググループを除外することを推奨する(...)ログ グループを除外する場合は、次の点を考慮する。ログを生成し、サブスクリプション配信ワークフローの一部となる可能性がある AWS サービス: Fargate、Lambda、AWS Step Functions を備えた Amazon EC2、および CloudWatch Logs に対して有効になっている Amazon VPC フローログ。
re:Inventで追加された新機能と、CloudWatchアラームが状態変更のアクションとしてAWS Lambda関数をサポートするようになったという最近の発表について、CyberArkの主席ソフトウェア・アーキテクトであるRan Isenberg氏は次のように指摘する。
CloudWatchは最近絶好調であり、サードパーティの可観測性ツールと比較して失ったものを取り戻しつつあります。
CloudWatch Logs アカウントレベルのサブスクリプションフィルターは、イスラエルとカナダ西部を除く全てのAWS商用リージョンで利用可能だ。
各AWSアカウントは1つのアカウントレベルサブスクリプションフィルタを作成できる。