echo("備忘録");

IT技術やプログラミング関連など、技術系の事を備忘録的にまとめています。

【AWS】CloudWatchメトリクスについて調べてみた

はじめに

※この記事は、AWS Advent Calendar 2022の記事です。

最近、仕事で久々にCloudWatchをガッツリ触っております。

ただCloudWatchに触れる際、毎回「メトリクス周りが良くわからん...」となるので、今回メトリクス周りについてしっかり調べてみました。

今回触れる機能

  • メトリクス(標準/カスタム)
  • 名前空間
  • ディメンジョン
  • メトリクスフィルタ

参考サイト

そもそも「メトリクス」って?

メトリクス(=単数形ではmetric)を直訳すると「指標」という意味ですが、CloudWatchでは「計測している項目」みたいな意味合いになります。

例えばメトリクスとして、AWSでは以下のものが用意されています

  • Lambdaの実行時間
  • DynaoDBのデータ量
  • S3のファイル数

これらのメトリクスの値を監視したり、これに基づいたアラームを作成するのが、CloudWatchでのシステム監視の基本になります。

メトリクスの種類について

メトリクスには、大きく2つの種類が存在します。

標準メトリクス

これはAWSが初めから用意しているメトリクスになります。

例えば、先ほど挙げた「Lambdaの実行時間」「S3のファイル数」などは標準メトリクスで、特に何もしなくても利用することができます。

カスタムメトリクス

こちらはユーザーが自分で作成したメトリクスになります。

例えばメトリクスフィルタ(後述)を使用して「ログ内の特定の文字列(ERRORなど)の出現回数を計測する」メトリクスを作成するケースがありますが、このような自分で追加したメトリクスは「カスタムメトリクス」になります。

なおカスタムメトリクスは、1個当たり0.3ドルかかりますので、作成のし過ぎに注意してください。

名前空間」と「ディメンジョン」

メトリクスには付属情報として「名前空間」及び「ディメンジョン」を付与できます。

名前空間

名前空間は主にメトリクスをサービス名、システム名(=アプリ名)、及びAWSリソース名など、比較的大きな区分でグループ化するのに便利です。

例えば標準メトリクスは「AWS/S3」「AWS/Lambda」のように「AWS/リソース名」という名前空間が付与されています。

カスタムメトリクスでも、名前空間にサービス名、システム名、リソース名などを付与することで、メトリクスの種類をグループ化しやすくなります。

ディメンジョン

もう一つが「ディメンジョン」で、これは下記のようになケースで便利です。

  • 名前空間より、もっと細かい単位で分割したい
  • メトリクスは同じだけど、細かい単位や内容によって分けたい(=EC2インスタンスAPIリクエスト元など)

例えば、下記のケースが発生したとします。

  • 半角スペース区切りのログファイルに対して「項目statusCodeが400以上であるログをカウントする」というメトリクスフィルタを作成する
  • リクエスト元の都道府県(=項目pref)ごとに分けて集計したい

このような場合に、同じ条件(=「項目statusCodeが400以上」)のメトリクスフィルタ(=カスタムメトリクス)を複数作成しなくても、

  • メトリクスフィルタは1つだけ作成する
  • そのカスタムメトリクスのディメンジョンに「pref」を指定する

ようにすれば、実際のprefがとりうる値(=都道府県)毎に個別に計測ができますので、例えば「北海道と福岡のアクセス数を比較する」ということも可能です。(=ディメンジョンは、それ単体で1つのカスタムメトリクスとして扱うことが可能)

ディメンジョンの制約・注意点
  • ディメンジョンは1メトリクスに対して30個まで
  • ディメンジョンの1つの値につき、1カスタムメトリクスの料金がかかる
    • ディメンジョンの個数ではない
    • 特に取りうる値が多い項目は注意!(※1)

※1:例えば先程のprefの場合、47都道府県すべてからリクエストがあった場合、それだけでカスタムメトリクス47個分の料金がかかります。

メトリクスフィルタ

最後に、メトリクスフィルタです。

メトリクスフィルタはCloudWatch Logsのロググループ内のログの検索機能で、下記のようなことができます。

  • 特定の文字を含む(or含まない)ログの件数を抽出する
    • 検索の仕方は色々ある。詳細は参考サイトを参照。
  • Key-Value形式(=半角スペース区切り、JSONなど)のログについては、キー値の数値検索(「fileSizeが1,024以上」など)も可能

抽出した結果(≒件数)をそのままカスタムメトリクスとして出力できるので、CloudWatch上で監視することも可能です。(もちろん名前空間&ディメンジョンも付与できる)

ちなみに「メトリクスフィルタ」という名前ですが、あくまでもフィルタ対象は「(CloudWatch Logsの)ログ」であり、メトリクスそのものをフィルタするわけではありません。

メトリクスフィルタのディメンジョン制約

メトリクスフィルタで作成するカスタムメトリクスには、ディメンジョン作成時に以下の制約があります。(ディメンジョンの作成そのものは可能です)

  • ディメンジョンを作成できるのは、ログファイルがKey-Value形式のもののみ
    • 半角スペース区切り、またはJSON
    • ログがランダムな文字列の場合は作成不可
  • 作成可能なディメンジョンは最大3つまで
    • 通常のカスタムメトリクスは30個まで
  • 「デフォルト値」を指定した場合、ディメンジョンは作成不可(逆も然り)
    • ディメンジョンとデフォルト値は、完全に排他な関係

まとめ

以上、走り書きになってしまいましたが、CloudWatchメトリクスについて書いてみました。

自分もCloudWatchメトリクスについていまいち理解しきれなかったので、今回しっかりと調べることができた&しっかり理解ができたので、良かったです。

特にディメンジョンあたりは、うまく使えば便利そうだな、と思ったので、有効活用できないか検討してみようと思いました。

それでは、今回はこの辺で。