まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

Datadogのアラートtrigger設定項目のon averageの使い方に実は条件があった

on averageはある期間の平均だと思っていた

Datadogはこんな風にあるメトリクスの値が閾値を超えたらslackに通知するみたいな感じのことをこうやって設定します

f:id:masato47744:20180124231956p:plain

指定したメトリクスの値が、5分間(during the last 5 minutes)の平均(on average)が300を上回ったら(above)アラートするという時の設定です。

なので、この設定で5分間300を超え続けたらアラートになるというつもりで設定してました。

なのに5分間のうちに1回超えただけでアラートになってしまった

このタイミングでalertになってしまった。この1本1本が5個連続で300を超えたらアラートになると思ったのに🤔

f:id:masato47744:20180129095101p:plain

on averageが使えるのは連続したメトリクスのみでした

公式ドキュメントを読んだらちゃんと書いてありました。 ここで言われている連続したの定義なんだけど、データポイント同士に1分間以上のgapがないことでした。

注意: on average と at all times の集計は、最終的に受信したデータが揃っていることを 必要条件 としています。このことは、全ての時系列データが完全に揃っていることを要求しているわけではなく、集計に使うデータのギャップが1分以上空いていないことを要求しています。言い換えれば、1分以上間隔の空くメトリクスに関しては、at least once または in total を使用することをお勧めします。

なので、AWS integrationでとってきてるCloudwatch metricsの値は1分置きのものなので、この場合はon averageをしたとしても、5分間の平均で計算してくれるわけではなく、at least oneみたいな動きになっていた。

ちなみに、このon averageみたいなものには、4種類ある。

  • on average(平均値で比較): 時系列データは、平均値を算出され単一の値となります。その平均値が閾値と比較されます。
  • at least once(少なくとも1回): 生成された時系列データ内のどれかの値が閾値を超えている場合、アラートが発報されます。
  • at all times(常時): 生成された時系列データの全てのポイントが閾値を超えている場合に、アラートが発報されます。
  • in total(合計値): 時系列データの全てのポイントの合計が閾値を超えている場合に、アラートが発報されます。

まとめ

  • AWSのmetrics系でx分間の平均を閾値にしたmonitorを作るときはin total を使おう