CloudWatch Logs のコストを最適化する方法を教えてください

CloudWatch Logs の利用でコストが増加している時に見直すべきポイントをまとめました。
2023.08.21

困っていた内容

EC2 の内部ログを CloudWatch Logs に転送してログのリアルタイム監視を行っていますが、最近コストが増加しており、最適化したいと考えています。運用で見直すべきポイントを教えてください。

どう対応すればいいの?

CloudWatch Logs で課金される項目は以下の通りです。
これらのデータ量を削減することで、コストの削減が見込めます。

CloudWatch の料金ドキュメントより抜粋(※記事執筆時点の料金)

収集 (データの取り込み)  0.50USD/GB
保存 (アーカイブ)  0.03USD/GB
分析 (Logs Insights のクエリ)  スキャンしたデータ 1 GB あたり 0.005USD
検出およびマスク (データ保護)  スキャンされたデータ 1 GB あたり 0.12USD
分析 (Live Tail)  0.01 USD/分

以下に、主な3つの項目(ログの収集、保存、分析)について具体的な見直しポイントをご紹介します。

ログの収集(データ取り込み量)を見直す

EC2 インスタンスから CloudWatch Logs へ転送するログを必要なものだけに絞り込むことで、データ取り込み量を削減できます。 これは後述の2つ(保存、分析)のデータ量削減にもつながるため、まずはじめに検討しましょう。

具体的には、特に監視の必要がない通常時のログは CloudWatch Logs に送信せず、リアルタイムで監視したいエラー時のログのみを送信する、といった方法が考えられます。

CloudWatch エージェントのフィルタ設定で、特定のエラー文字列が含まれるログのみを送信することが可能なので、下記の記事を参考にしてみてください。

CloudWatchAgentのログ送信にフィルタ機能が追加されたのでやってみた | DevelopersIO

ログのデータ保存量と保存先を見直す

前述の通り、EC2 から取り込むログ量そのものを削減することで、CloudWatch Logs 上に保存するデータ量の削減も見込めます。 併せて、ログデータの保存期間や保存先についても検討しましょう。

CloudWatch Logs のデフォルト設定ではデータが無期限で保存されますが、ロググループごとに保存期間を任意に変更することが可能です。 また、データの保存先として CloudWatch Logs よりも S3 の方が安価になります。
(本記事の執筆時点では CloudWatch Logs のデータ保存料金が 0.03USD/GB であるのに対し、S3 標準クラスのデータ保存料金は 0.025USD/GB になっています)

従って、リアルタイムの監視が必要ない過去のログは定期的にCloudWatch Logs から S3 へエクスポートしてアーカイブし、その上で CloudWatch Logs には保存期間を設定して一定期間が過ぎたログを削除する、といった運用を検討してみましょう。

ログの分析(データスキャン量)を見直す

これも前述の通り、EC2 から取り込むログの量そのものが削減されれば、CloudWatch Logs Insights でログデータをスキャンする際のデータ量の削減も見込めます。併せて Logs Insights での分析時に実行するクエリを最適化することで、スキャンするデータ量を削減できる可能性があります。

例えば、抽出したいログのタイムスタンプを絞り込む、検索条件をできる限り具体的に絞り込むなどが考えられます。下記のドキュメントや記事を参考にクエリの最適化を検討してみましょう。

CloudWatch Logs Insightsでログを調査する前に読む記事 | DevelopersIO
CloudWatch Logs Insights のクエリ構文 - Amazon CloudWatch Logs
ブール、比較、数値、日時、その他の関数 - Amazon CloudWatch Logs

以上、CloudWatch Logs でコストを最適化する方法をまとめてみました。 この情報がどなたかのお役に立てば幸いです!

参考資料

料金 - Amazon CloudWatch | AWS
CloudWatch の料金を把握し、今後の料金を抑える | AWS re:Post
CloudWatchAgentのログ送信にフィルタ機能が追加されたのでやってみた | DevelopersIO
料金 - Amazon S3 |AWS
Amazon S3 へのログデータのエクスポート - Amazon CloudWatch Logs
CloudWatch Logs Insights のクエリ構文 - Amazon CloudWatch Logs
ブール、比較、数値、日時、その他の関数 - Amazon CloudWatch Logs
CloudWatch Logs Insightsでログを調査する前に読む記事 | DevelopersIO