CloudWatch Logsのアカウント全体のAPI使用状況を確認できるようになりました
先日のアップデートでCloudWatch LogsがUsageMetricsをサポートするようになりました。
何ができるようになったの?
- アカウント全体のCloudWatch Logs APIの使用状況を確認できるになりました
- ログを送信した
- ロググループ作成した
- ログストリーム作成した などなど
- ロググループ、ログストリーム単位でのAPI使用状況は確認できないです
みてみよう
CloudWatchのメトリクスからログを選択します。
Class,Resource,Service,Typeを確認します。
APIのメトリクスが多数表示されています。すべてチェックしてみました。なんとも言えないグラフが表示されました。
有用な統計は合計(SUM)とドキュメントで説明されています。メトリクスの取得間隔は1分単位とのことで合わせて変更してみます。
いい感じに表示できました。今回のメトリクスを表示するのに大切なことは統計を合計に変更することです。
とある日を詳しくみてみる
PutLog Events CallCountの数値が13と記録されています。
- PutLogEventsは、ログをログストリームに送るイベント
- CallCountはアカウントで実行されたオペレーション数
アカウント全体のPutLogEvents APIの使用状況を確認できました。
ピークのところをみてみる
PutLogEvents ErrorCountとPutLogEvents ThrottleCountが同数で記録されています。また、PutLogEvents CallCountは桁違いの値になっています。
当時、意図的にスロットリングエラーを起こすために大量のPutLogEventsを発生させていました。しっかりと記録されていました。アプリケーションログからスロットリング発生したメッセージを確認していたので、こちらのメトリクスを見てたら突き合わせできて面白かったなと思いました。
その他にはロググループ作成、ログストリーム作成、ログストリーム作成失敗も確認できます。検証のなかでFluent Bitがロググループを新規作成、スケールアウトするとログストリームを新規作成していたのでその通りです。
もう少し絞り込みたい
今回のアップデートでアカウント全体のCloudWatch Logs APIごとの使用状況を確認できることはわかりました。 アカウント全体ではなく、ログストリーム、ログストリーム単位では確認できないのでしょうか?
どこのロググループのログストリーム対して特定のアクションPutLogEventsとかが多かったのかを確認したくなりませんか?
ロググループ単位なら絞り込めますが、APIの使用状況ではありません。
ロググループ単位でIncommingLogEventsメトリクスがあります。すべてのロググループで選択しました。
先ほどのPutLogEvents CallCountが桁違い多かった時間帯にInvommingLogEventsが多かったロググループからある程度対象を絞り込めます。今回だとロググループの/ecs/logs/samaple-dev/application
が疑わしいですね。
こちらのブログ用に検証してたときは、継続的に多数のアクセスをしてアクセスログを大量に生成しCloudWatch LogsへPutLogEventsを発生させていました。グラフからも見て取れますね、オレンジの線が2時間ほど高い値をキープしています。
今回のアップデートの内容のメトリクスを使うとPutLogEvents CallCountが継続していることがわかります。
まとめ
アカウント全体のCloudWatch Logs API使用状況のメトリクスが追加されました。 CloudWatch Logsにもクォータが設けられています。CreateLogGroupなどアカウント全体の制限あるものについては、今回API使用状況からクォータに達しないか確認できるようになり、アラート通知も設定すればできるようになりました。ただ、クォータの中にはPutLogEventsのようにログストリーム単位で制限があるものもあります。今回のアップデートではアカウント全体のAPI使用状況メトリクスが追加されています。よって、すべてクォータに対してアラート設定ができるものではありませんのでご注意ください。
おわりに
お手元のアカウントで一度確認してみてはいかがでしょうか。自動で作成しているはずのログストリーム作成が失敗頻発していたとか、ログの流量が想定より多くスロットカウントが高くなっていて気づけるかもしれません。