概要
AWS CloudWatch Logsで一つのメトリクスフィルターが二つのアプリのログを検知してしまう現象が発生。
備忘録も兼ねて、原因と対応方法を紹介します。
前提と原因
元々CloudWatch Logsのロググループの下には既存アプリのアプリログに使用中のログストリーム一つしかなかったのですが、今回新規アプリを導入するにあたり新規アプリログ用にログストリームをもう一つ追加しました。アプリごとにログストリームを設けて、それぞれにメトリクスフィルターを適用してあげる、という構成です。
こんなイメージで構成を考えていました。
└── app_log_group
├── hoge_app_log_stream
└── foo_app_log_stream
しかし、これが問題でした。
なぜなら、CloudWatch Logsのメトリクスフィルターは、特定のロググループに対して設定できますが、特定のログストリームを直接指定することはできないためです。
Metric filters are assigned to log groups, and all of the filters assigned to a log group are applied to their log streams.
公式ドキュメントには上述の通りapplied to their log streams
とあります。つまり、ロググループの中のログストリームのデータ全てに適用される、という意味です。
解決法
解決方法は新たにロググループを作成して、そこにメトリクスフィルターを適用することです。
つまり、以下のイメージです。
├── hoge_app_log_group
│ └── hoge_log_stream
└── foo_app_log_group
└── foo_log_stream
これで両方のアプリのメトリクスフィルターが互いに検知してしまう現象が解決できました。