🤯

Amazon CloudWatch メトリクスフィルターでハマった話

2024/03/05に公開

はじめに

業務でAWS CloudWatch Logsのメトリクスフィルターを作成していたところ以下のエラーに出会いました。

Resource limit exceeded

これは何かが上限値を超えてしまう時に出てくるエラーです。
CDKで構築していたため、「1スタックの上限に行っちゃったか?」と思いましたが違いました。じゃあ何なのか?
参考:
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/stacks.html

原因

色々調べてみると、「1つのロググループに対して正規表現を使ったメトリクスフィルターは5つまで」という上限に引っかかってました。
AWS公式ドキュメントにあるフィルターパターンやサービスクォータのページにはそんなこと書いてません。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html

ふとドキュメントの上部を見ると、インフォメーションとして「英語版との間で齟齬がある場合は英語版を優先します」とあります。

まさか、、、

英語版でフィルターパターンのページを開くと、以下のインフォメーションがありました。

There is a maximum of 5 filter patterns containing regex for each log group when creating metric filters or subscription filters.

日本語だと「メトリクスフィルターやサブスクリプションフィルターを作るとき1つのロググループには正規表現を含んでいるフィルタパターンは最大5つです。」となります。
念のため自分の環境を確認してみると、ちゃんと現在5つの正規表現を使ったメトリクスフィルターがあり、6つ目を作成するところでエラーとなっているので合致しています。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

サービスクォータのページも見てみると、日本語版にはない「Regular expressions」Resouceのクォータがあり、以下の記述が見られます。

Up to 5 filter patterns containing regular expressions for each log group when creating metric filters or subscription filters. This quota can't be changed.

上のインフォメーションと同様に、1つのロググループに対して正規表現を使ったメトリクスフィルターは5つまで書いてあります。しかも、このクォータは変えられない、とも。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html

解決策

サービスクォータが変えられないので、正規表現を使ったメトリクスフィルターを5つ以下にすることで解決しました。
正攻法かは置いておいて、6つ以上含みたいときは正規表現でORを表す“|”を使って繋げる、というのも一つの手段としては考えられます。

まとめ

今回のエラーは日本語で調べても一向に出てこなかったので焦りました。
「日本語版のドキュメントは古い可能性がある」ということを知ることができたので、詰まったら英語版でも確認することを心得ました。
皆さんも日本語ドキュメントの情報を鵜呑みにせず、最新版を知るようにしましょう。
また、英語版ドキュメントにしかない問題に直面したらここで共有します。

Discussion