2
1

More than 1 year has passed since last update.

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

Posted at

はじめに

※この記事は、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メトリクスについていまいち理解しきれなかったので、今回しっかりと調べることができた&しっかり理解ができたので、良かったです。

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

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1