Amazon-CloudWatch

特定の時間だけ監視するCloudWatch AlarmにIF式を使おうとしてやめた話

はじめに

こんにちは、omkです。
タイトルの通りですが、CloudWatch Alarmを使って特定の時間だけ監視する要件においてメトリクスをIF()やHOUR()を使いながらアラームの発砲を調整しようとしていましたがやめました。
結局どうしたのかとなぜやめたのかを以下にまとめます。

要件と考えた設定

EC2にインストールしたCWAgentからメトリクスを取得します。
EC2は夜間帯は停止するのでその間メトリクスは欠落します。
夜間の停止は定められたダウンタイムなのでアラームを発砲しないようにします。
夜間のメトリクスの欠落と日中の欠落は区別します。

という要件でIF()とHOUR()を組み合わせて特定時刻を範囲に指定して夜間帯にはアラームが上がらない値に変更する方法を検討しました。
ざっくり↓みたいに考えていました。

IF( HOUR(m1)<7 OR HOUR(m1)>=23,m1,0 )

最終的な設定

アラームのアクションの実行を夜間は無効化する設定にしました。
EventBridgeのScheduleでサーバの起動時刻・停止時刻になったらアクションの有効・無効を切り替えるスケジュールを導入して実現しました。

なぜやめたか

理由は大きく2つです。

  1. IF()内で欠落値が0に補完されるため
  2. 監視対象時間内のメトリックと監視対象時間外のメトリックの見分けがぱっと見でできない

まず1点目について、
元のメトリクスの値が欠落している状態でもIFに入ると0として扱われてしまうので、サーバが停止していたりネットワークに問題があったりといったケースでメトリクスが欠落してもアラームのしきい値に抵触せず気づけないという問題がありました。
欠落値を不正とする設定を行っていてもこれでは検知できないので期待する機能が得られないと判断しました。
これが一番の理由です。

次に2点目ですが、
時間外は値を書き換えているので本来の値では無い値が記録に残ります。
これが運用上どこまで正常であったのかが判断しづらくなってしまう要因になりそうだと感じました。

であれば、メトリクスを加工せずとも元の値で監視を行い、時間外は通知アクションさえ実行されなければ問題ないという結論に至りました。

おわりに

結局通知がほしくないだけだったので通知を切ればいいだけでした。
そんなに難しく考えなくてよかったですね。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA