CloudWatch アラームが INSUFFICIENT_DATA 状態になる理由は何ですか?
最終更新日: 2020 年 3 月 26 日
Amazon CloudWatch アラームが INSUFFICIENT_DATA 状態です。原因を調べるにはどうすればよいですか?
解決方法
INSUFFICIENT_DATA 状態は、次のいずれかを示します。
- Amazon CloudWatch アラームが始まったばかりです
- メトリクスを使用できません
- メトリクスがアラームの状態を判断するのに十分なデータがありません
アラームが予期せず INSUFFICIENT_DATA 状態になった場合は、以下のトラブルシューティング手順で最も一般的な原因を確認してください。
通常のメトリクスの動作
INSUFFICIENT_DATA 状態のアラームは、単にメトリクスの正常な動作を反映している場合があります。CloudWatch にプッシュされる方法に基づいて、期間駆動型とイベント駆動型の 2 種類のメトリクスがあります。一部のサービスでは、定期的にデータポイントをメトリクスに送信しますが、特定のメトリクスにはデータポイントのない期間が含まれている場合があります。たとえば、EC2 インスタンスの CPUUtilization メトリクスには、期間ごとにデータポイントがあります。ただし、インスタンスを停止した場合、サービスはそのインスタンスにデータポイントをプッシュしません。もう 1 つの例は、Application Load Balancer の HTTPCode_ELB_5XX_Count メトリクスです。エラー (またはイベント) が発生すると、サービスはデータポイントを送信します。期間中に発生したエラーがない場合、結果は (ゼロ値ではなく) 空のデータセットになります。
アラームが、指定された時間内にデータポイントを持たないメトリクスを設計上モニタリングしている場合、その期間中はアラームの状態が INSUFFICIENT_DATA になります。アラームを強制的に ALARM または OK 状態にするには、アラームがデータポイントなしでこれらの期間を処理する方法を設定します。
CloudWatch アラーム設定が正しくない
各メトリクスは、名前空間、名前、および最大 10 個のディメンションで定義されます。データポイントを取得するときは、タイムスタンプ (および任意の単位) を指定する必要があります。これらのパラメータの 1 つに正しくない値を指定すると、CloudWatch は存在しないメトリクスを取得しようとします。結果は空のデータセットです。
注意: データポイントは通常、単一の単位を使用してメトリクスにプッシュされますが、アラームの作成時に単位を指定する必要はありません。単位を指定しない場合、間違った単位設定に関連する問題は発生しません。ただし、メトリクスのデータポイントに複数の単位がある場合は、正しい単位を使用することをお勧めします。
DescribeAlarms API を使用して、モニタリングされるメトリクスのパラメータの詳細リストを取得します。これを ListMetrics 出力と比較できます。次のパラメータを確認します。
- スペルミスや大文字と小文字の間違った使用 (メトリクスでは大文字と小文字が区別されます)
- 正しく指定されていないディメンションまたは単位
アラーム期間が正しく設定されていない
必要な頻度でデータポイントを取得するようにアラームを設定できます。ただし、アラームが、サービス (またはソース) がデータポイントをメトリクスに送信するために使用する期間よりも短期間を使用する場合、望ましくない状態になる可能性があります。不要な INSUFFICIENT_DATA 状態を避けるには、アラームの期間を、メトリクスのデータポイントがプッシュされる期間と等しくなるように設定することをお勧めします。アラームに N 個中の M 個の設定を使用することもできます。
データポイントの遅延配信
CloudWatch に送信されるデータポイントによっては、メトリクスをモニタリングするアラームで予期しない INSUFFICIENT_DATA 状態が発生する場合があります。
たとえば、EC2 インスタンスにデプロイされたソフトウェアからカスタムメトリクスにデータポイントを送信するカスタムアプリケーションがあるとします。データが失われないようにするには、失敗した API 呼び出しを再試行するようにアプリケーションを設定します。外部要素 (VPC 設定の変更など) により、インスタンスは CloudWatch との接続を失います。このシナリオでは、環境はデータを生成しますが、送信中のデータポイントは失敗します。
標準アラームを設定している場合、アラームは 1 分ごとにメトリクスを評価します。評価中、アラームは設定されたメトリクスから最新のデータポイントを取得します。接続されていないこの期間中も、アラームはメトリクスを評価しています。データポイントは送信されないため、アラームはこれらの評価期間のデータポイントを取得できず、INSUFFICIENT_DATA 状態をトリガーします。
接続を復旧した後、アプリケーションはデータポイントのバックログを送信し、各データポイントに独自のタイムスタンプを付けます。この遅延の後にデータポイントが送信されるため、アラームは、指定した期間と評価期間に基づいて最新のデータポイントを取得し、想定どおりに動作させることができます。この時点で、データポイントが CloudWatch に保存されるようになったため、メトリクスに空白は表示されません。ただし、アラームはその時間枠をすでに評価しているため、アラーム履歴には引き続き次のようなメッセージが表示されます。
[...]
"stateValue": "INSUFFICIENT_DATA",
"stateReason": "Insufficient Data: 2 datapoints were unknown.",
[...]
アラームが INSUFFICIENT_DATA 状態になることを防ぎたい場合は、アラームで不足データを処理する方法を変更できます。