Scribble at 2022-11-11 13:46:37 Last modified: 2022-11-11 14:15:12

添付画像

何日か前に AWS の CloudWatch で取得するメトリクス(を表示するダッシュボードのグラフ)の話をした。あれでも、まだ正確な説明にはなっていないと思うので、改めて取り上げてみたい。上に添付した CloudWatch のグラフは、CloudFront で運用している単一のディストリビューションに対するリクエストについて、1分間というデータポイントを設定して取得したメトリクスに基づいている。ただし、上段はメトリクス、つまりグラフに表示するための集計(statistics)として2週間を遡っていて、下段は3日間を遡った結果を元にしている。

そして、具体的な例として2022年11月9日という特定の日付で最大のリクエスト数を数えたピークの値を取り出してみると、それぞれのグラフで数値として掲載したように値は違っている。前回の落書きで説明したように、グラフとして表示するための集計(statistics)は、データポイントの合計であるメトリクスとは違うため、同じ幅のグラフとして描画しなければいけないという条件があると、グラフを幾らでも細かく描画するわけにはいかないので、画面上の同じ幅で表示するグラフの値は、集計する期間が長くなれば累積して増えてゆく。よって、3日間よりも2週間という長い期間で取得した集計の方が、グラフとして大きく伸びるわけである。

これに対して、1分間という単位で取得した値の1分間あたり平均は、もちろん1で割るだけなのだから、その値そのものでしかない。しかし、集計した値が増えていけば平均の値も比例して増えていくのが当たり前なのに、グラフでは平均だけが集計する期間とは関係なく、ずっと25リクエスト前後くらいの値である。これはどうしてなのか。

これは CloudWatch で使っている概念の説明に戻ると分かる。まず CloudWatch では個々のサービスについて namespace を定義し、CloudFront では AWS/CloudFront のような namespace でデータのストア場所が確保される。AWS が取得している記録に対して、データポイントというデータの取得位置が設定されて、そのデータ取得位置ごとに取り出された値をひとまとめにしているのがメトリクスである(データポイントとして取り出せる「粒度(resolution)」という基準があり、標準メトリクスでは60秒の倍数となっている)。そして、メトリクスから任意の期間や任意の時間単位でデータを取り出したものが集計であって、ダッシュボードのグラフは、この集計を元にして描かれている。このような集計の仕方が期間ごとに異なるため、先に述べたようにメトリクスから取り出した集計の期間が2週間だと、グラフとして描く際に単位あたりの値が累積してグラフの値が増えていく。では、集計する期間ごとの値が伸びていくのに、平均の値が比例して伸びているように見えないのはどうしてなのか。それは、平均という集計値の計算方法が「合計/データポイントの数」だからである。1分という時間の間隔で割り出しているわけではなく、その集計をとるのにどれだけのデータポイントを要しているかという別の基準で計算しているからなのである。よって、1時間で10,000リクエストの合計を集計したとき、1分ごとの平均は(データポイントは60であるから)10,000 / 60 =166 であり、同じ日の1日で300,000リクエストも合計があったとしても、1分の平均は208と、大して変化がないわけである。そして、上のグラフでは合計を元に Y 軸のスケールが変わるため、1日の間でも平均に大差がなければ、長期間の集計でピークの値が大きくなったところで、Y 軸のスケールも変わってしまうため、グラフでの見た目は「違わないように見える」ということになる。平均のグラフを基準にして Y 軸を取れば、やはり合計の変化に比例して平均も変化していることが分かるはずである。

そして、値が大きく変化していないように見える他の理由として、データポイントはデータを取得するポイントのことなので、値が0以上であるという保証がない。そして、CDN に対するアクセスというものは、1分間に数万といった値が計測されていても秒単位で同時に集中するということはない。そのため、データポイントとして値を取得するタイミングによってはバラつきがある。平均はそういうバラつきを平準化する計算をしているのだから、大きな変化がないように見えるのは当たり前のことなのである。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook