はじめに
※この記事は、AWS Advent Calendar 2022の記事です。
最近、仕事で久々にCloudWatchをガッツリ触っております。
ただCloudWatchに触れる際、毎回「メトリクス周りが良くわからん...」となるので、今回メトリクス周りについてしっかり調べてみました。
今回触れる機能
- メトリクス(標準/カスタム)
- 名前空間
- ディメンジョン
- メトリクスフィルタ
参考サイト
- Amazon CloudWatch の概念
- フィルターを使用したログイベントからのメトリクスの作成
- [アップデート] CloudWatch Logs メトリクスフィルターでディメンションがサポートされました!
そもそも「メトリクス」って?
メトリクス(=単数形では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メトリクスについていまいち理解しきれなかったので、今回しっかりと調べることができた&しっかり理解ができたので、良かったです。
特にディメンジョンあたりは、うまく使えば便利そうだな、と思ったので、有効活用できないか検討してみようと思いました。
それでは、今回はこの辺で。