CloudWatch Metrics Insights AlarmでOtherラベルのコントリビューターのメトリクスが表示されている場合はFROM SCHEMAでディメンションが絞り込まれているか確認しよう

CloudWatch Metrics Insights AlarmでOtherラベルのコントリビューターのメトリクスが表示されている場合はFROM SCHEMAでディメンションが絞り込まれているか確認しよう

GROUP BYで使用するディメンションは明示的にFROM SCHEMAで指定するクセを付けるのが良さそう
2025.12.13

CloudWatch Metrics Insights Alarmを作成するとOtherのラベルが付いたコントリビューターがある

こんにちは、のんピ(@non____97)です。

皆さんはCloudWatch Metrics Insights Alarmを作成するとOtherのラベルが付いたコントリビューターがあるなと思ったことはありますか? 私はあります。

CloudWatch Metrics Insights Alarmを使用することによって、手間なく複数リソースに対してアラームを作成することが可能です。CloudWatch Metrics Insights Alarmの素晴らしさは以下記事をご覧ください。

https://dev.classmethod.jp/articles/aws-cloudwatch-tags-observability/

この時以下のようにラベルがOtherのコントリビューターがあります。

1.Otherのコントリビューターがある.png

クエリは以下のとおりです。

SELECT MAX(FreeLocalStorage) FROM "AWS/RDS" GROUP BY DBInstanceIdentifier ORDER BY MIN() ASC

メトリクスの値にカーソルを合わせると、二つのメトリクスが全く同じ値を指していることが分かります。

7.同じ値を指している.png

これはなぜ発生してしまっているのでしょう。

参考までにAurora DBインスタンスは以下のようになっています。

2.AuroraのDB一覧.png

CloudWatch Metrics Insights Alarmはクエリ実行して分析されたメトリクスごとに課金が発生します。

Metrics Insights query alarms incur costs for each metric analyzed by the query.

Amazon CloudWatch Pricing | Free Tier Available

単純に目障りなだけなのであれば良いですが、課金が発生するのであれば回避したいところです。

以降、原因と対処方法を紹介します。

いきなりまとめ

  • GROUP BYで使用するディメンションは明示的にFROM SCHEMAで指定するクセを付けよう
  • 同一のメトリクス名で複数ディメンションがある場合、GROUP BYで指定したディメンションが全メトリクスで存在しなければ、OtherラベルのNullグループが作成される
  • FROM SCHEMA(名前空間, ディメンション)という形でメトリクスのディメンションを明示的に指定することで、クエリ対象のメトリクスを絞り込むことができる

SCHEMAを設定する

Otherラベルが付与されているメトリクスが表示される原因は、GROUP BYで指定したディメンションが含まれないメトリクスに対してもクエリをしてしまっているためです。

以下のようにAWS公式ドキュメントにしっかり書かれています。

一致するメトリクスの一部に、GROUP BY 句で指定された特定のラベルキーを含まないものがある場合、Other という名前の NULL グループが返されます。例えば、GROUP BY ServiceName, Operation を指定している場合で、返されたメトリクスの一部にディメンションとして ServiceName を含まないものがあると、これらのメトリクスは、Other という値の ServiceName を持つものとして表示されます。

CloudWatch Metrics Insights のクエリコンポーネントと構文 - Amazon CloudWatch

FreeLocalStorageのディメンションは以下のように6パターンあります。

  • RDS > DBClusterIdentifier,Role
  • RDS > DBClusterIdentifier
  • RDS > DBInstanceIdentifier
  • RDS > DatabaseClass
  • RDS > EngineName
  • RDS > データベース全体

DBInstanceIdentifierが含まれないメトリクスがありますね。

今回は明示的にディメンションを指定せず、GROUP BYDBInstanceIdentifierを指定しました。

これにより、DBInstanceIdentifierディメンションではないメトリクスはOtherという名のNULLグループでまとめられています。

対応としては、FROM SCHEMA(名前空間, ディメンション)という形でメトリクスのディメンションを明示的に指定します。AWS公式ドキュメントにも以下のように紹介されています。

FROM

必須。メトリクスのソースを指定します。クエリされるメトリクスを含むメトリクス名前空間、あるいは、SCHEMA テーブル関数のどちらかを指定します。メトリクス名前空間の例としては、"AWS/EC2"、"AWS/Lambda" などを初めとして、カスタムメトリクス用にユーザーが作成したメトリクス名前空間なども含まれます。

/ を含む (または、文字、数字、アンダースコア以外の文字を含む) メトリクス名前空間は、二重引用符で囲む必要があります。詳細については、「引用符やエスケープ文字を使用すべき場合を教えてください。」を参照してください。

SCHEMA

FROM 句内で使用できるオプションのテーブル関数。SCHEMA は、クエリ結果をリストされたディメンションと完全に一致したメトリクスからのもの、あるいは、ディメンションを持たないメトリクスからのものに絞り込みます。

SCHEMA 句を使用する際は、クエリ対象のメトリクス名前空間を指定するために、(最初の引数として) 少なくとも 1 つを渡す必要があります。SCHEMA において、この名前空間引数のみを指定した場合は、クエリ結果の範囲がディメンションを持たないメトリクスのみに絞られます。

SCHEMA で、名前空間引数の後に他の引数を指定する場合、それらの追加の引数はラベルキーにする必要があります。ラベルキーでは、ディメンション名を指定します。このラベルキーを 1 つ以上指定することで、ディメンションセットが正確に一致するメトリクスのみに、クエリ結果の範囲が絞り込まれます。これらのラベルキーの順序は任意です。

例:

  • SELECT AVG(CPUUtilization) FROM "AWS/EC2" は、AWS/EC2 名前空間内にあるすべての CPUUtilization メトリクスと一致し、ディメンションは関係ありません。結果には、単一の集計時系列が返されます。
  • SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2") では、AWS/EC2 名前空間内でディメンションが定義されていない CPUUtilization メトリクスのみが一致します。
  • SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId) では、厳密に 1 つのディメンション (InstanceId) で CloudWatch に報告された CPUUtilization メトリクスのみと一致します。
  • SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) では、厳密に 2 つのディメンション (LoadBalancer と AvailabilityZone) で AWS/ApplicationELB から CloudWatch に報告された RequestCount メトリクスのみと一致します。

CloudWatch Metrics Insights のクエリコンポーネントと構文 - Amazon CloudWatch

実際に試してみましょう。

CloudWatch Metrics Insightsのクエリビルダーの名前空間を確認すると、スキーマを含むと分析したいメトリクスのディメンションを指定ができることが分かります。

3.名前空間.png

ここに表示されているディメンションはRDSの名前空間内のもの全てです。

5.すべて RDS.png

今回はGROUP BYDBInstanceIdentifierを指定するのでFROM SCHEMAでもDBInstanceIdentifierを指定します。クエリ文としては以下のとおりです。

SELECT MAX(FreeLocalStorage) FROM SCHEMA("AWS/RDS", DBInstanceIdentifier) GROUP BY DBInstanceIdentifier ORDER BY MIN() ASC

すると、Otherのメトリクスが表示されなくなりました。

4.SCHEMAを指定.png

同一のクエリをCloudWatch Alarmに設定すると、こちらもOtherメトリクスが表示されなくなりました。

6.Otherが消えた.png

意図したとおりですね。

GROUP BYで使用するディメンションは明示的にFROM SCHEMAで指定するクセを付けるのが良さそう

CloudWatch Metrics Insights AlarmでOtherラベルのコントリビューターのメトリクスが表示されている場合はFROM SCHEMAを指定してみましょう。

普段からGROUP BYで使用するディメンションは明示的にFROM SCHEMAで指定するクセを付けるのが良さそうですね。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

FacebookHatena blogX

関連記事