Metric Math を使用する - Amazon CloudWatch

Metric Math を使用する

Metric Math により複数の CloudWatch メトリクスをクエリし、数式を使用して、これらのメトリクスに基づく新しい時系列を作成できます。作成された時系列を CloudWatch コンソールで視覚化でき、ダッシュボードに追加できます。AWS Lambda メトリクスを例として使用すると、Errors メトリクスを Invocations メトリクスで除算してエラー率を得ることができます。次に、作成された時系列を CloudWatch ダッシュボードのグラフに追加します。

GetMetricData API オペレーションを使用して、Metric Math をプログラムで実行することもできます。詳細については、「GetMetricData」を参照してください。

CloudWatch グラフに数式を追加する

CloudWatch ダッシュボードのグラフに数式を追加できます。各グラフで使用できるメトリクスおよび表現は 500 個までに制限されているため、数式はグラフのメトリクスが 499 個以下の場合のみ追加できます。これは、グラフにすべてのメトリクスが表示されていない場合でも適用されます。

グラフに数式を追加するには

  1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

  2. グラフを作成または編集します。グラフには、少なくとも 1 つのメトリクスが必要です。

  3. [グラフ化したメトリクス] を選択します。

  4. [Math expression]、[Start with empty expression] の順に選択します。式に新しい行が表示されます。

  5. 新しい行の [詳細] 列に、数式を入力します。「Metric Math 構文と関数」セクションの表には、式で使用できる関数がリストされています。

    メトリクスまたは別の数式の結果をこの式で式の一部として使用するには、[Id] 列に表示される値を使用します (例: [m1+m2] または [e1-MIN(e1)])。

    [Id] の値は変更できます。数字、文字、アンダースコアを含めることができ、小文字で始める必要があります。[Id] を意味のある名前に変更すると、グラフをより容易に理解できます (例: [m1] や [m2] を [エラー] や [リクエスト] に変更)。

    ヒント

    数式の作成時に使用できるサポートされている関数のリストを表示するには、[Math Expression (数式)] の横にある下向き矢印を選択します。

  6. 数式の [ラベル] 列に、数式の計算内容を表す名前を入力します。

    式の結果が時系列の配列である場合、これらのそれぞれの時系列が、異なる色の別々の線で表示されます。グラフのすぐ下には、グラフの各行の凡例があります。複数の時系列を作成する単一の式の場合、これらの時系列の凡例のキャプションは、式ラベル メトリクスラベル の形式になります。たとえば、ラベルが Errors であるメトリクスと、ラベルが Filled With 0: である FILL(METRICS(), 0) 式がグラフに含まれる場合、凡例の 1 つの行は Filled With 0: Errors となります。凡例で元のメトリクスラベルのみ表示されるように、式ラベルは空に設定します。

    1 つの式により、グラフの時系列の配列が作成される場合、これらの各時系列に使用される色を変更することはできません。

  7. 必要な式を追加した後、元のメトリクスの一部を非表示にすることで、グラフを簡素化できます。メトリクスまたは式を非表示にするには、[Id] フィールドの左にあるチェックボックスをオフにします。

Metric Math 構文と関数

以下のセクションでは、Metric Math で使用できる関数について説明します。すべての関数は大文字で記述する必要があります ([AVG] など)。また、すべてのメトリクスと数式の [Id] フィールドは小文字で始める必要があります。

数式の最終結果は単一の時系列または時系列の配列である必要があります。一部の関数では、スカラー番号が生成されます。より大規模な関数の中でこれらの関数を使用することができ、最終的には時系列が生成されます。たとえば、単一の時系列の [AVG] はスカラー数を生成するため、最終的な式の結果にはなりません。ただし、このセクションを関数 m1-AVG(m1) で使用すると、個々のデータポイントと時系列の平均値の間の相違の時系列を表示できます。

データタイプの略語

一部の関数は、特定のタイプのデータのみに有効です。次のリストにある略語は、関数のテーブルで使用され、各関数でサポートされているデータタイプを表しています。

  • [S] は、スカラー数 (2、-5、または 50.25 など) を表します。

  • [TS] は時系列 (時間の経過に伴う単一の CloudWatch メトリクスの一連の値) です。たとえば、過去 3 日間のインスタンス i-1234567890abcdef0 の [CPUUtilization] メトリクスなどです。

  • [TS[]] は時系列の配列です (複数のメトリクスの時系列など)。

METRICS() 関数

METRICS() 関数は、リクエストのすべてのメトリクスを返します。数式は含まれません。

より大きな式の中で METRICS() を使用することができ、最終的には単一の時系列または時系列の配列が生成されます。たとえば、SUM(METRICS()) 式は、グラフ化されたすべてのメトリクスの値の合計である時系列 (TS) を返します。METRICS()/100 は時系列の配列を返します。それぞれが、いずれかのメトリクスを 100 で除算した各データポイントを示す時系列です。

[METRICS()] 関数を文字列と使用して、[Id] フィールドにその文字列を含むグラフ化されたメトリクスのみを返すことができます。たとえば、SUM(METRICS("errors")) 式は、[Id] フィールドに「errors」のあるグラフ化されたすべてのメトリクスの値の合計である時系列を返します。また、[SUM([METRICS(“4xx”), METRICS(“5xx”)])] を使用して、複数の文字列を一致させることができます。

基本的な算術関数

サポートされている基本的な算術関数の一覧を以下の表に示しています。時系列で欠落した値は 0 として扱われます。データポイントの値により関数がゼロ除算を行おうとする場合、データポイントは削除されます。

オペレーション 引数

算術演算子: + - * / ^

S, S

S, TS

TS, TS

S, TS[]

TS, TS[]

PERIOD(m1)/60

5 * m1

m1 - m2

SUM(100/[m1, m2])

AVG([m1,m2]/m3)

METRICS()*100

単項減算 -

S

TS

TS[]

-5*m1

-m1

SUM(-[m1, m2])

比較演算子と論理演算子

比較演算子と論理演算子は、時系列のペアまたは単一のスカラー値のペアと共に使用できます。比較演算子を時系列のペアと共に使用すると、各データポイントが 0 (false) または 1 (true) の時系列が返されます。スカラー値のペアで比較演算子を使用すると、単一のスカラー値 (0 または 1) が返されます。

2 つの時系列間で比較演算子が使用され、一方の時系列だけが特定のタイムスタンプの値を持つ場合、関数はもう一方の時系列の欠落している値を 0として扱います。

論理演算子を比較演算子と組み合わせて使用すると、より複雑な関数を作成できます。

次の表は、サポートされている演算子のリストです。

演算子のタイプ サポートされる演算子

比較演算子

==

!=

<=

>=

<

>

論理演算子

AND または &&

OR または ||

これらの演算子がどのように使用されるかを確認するため、2 つの時系列があるとします。metric1 の値は [30, 20, 0, 0]metric2 の値は [20, -, 20, -] であり、- はそのタイムスタンプの値がないことを示します。

出力

(metric1 < metric2)

0, 0, 1, 0

(metric1 >= 30)

1, 0, 0, 0

(metric1 > 15 AND metric2 > 15)

1, 0, 0, 0

Metric Math のサポートされている関数

次の表は、数式で使用できる関数を表しています。すべての関数を大文字で入力します。

数式の最終結果は単一の時系列または時系列の配列である必要があります。以下のセクションの表の一部の関数では、スカラー数が生成されます。より大規模な関数の中でこれらの関数を使用することができ、最終的には時系列が生成されます。たとえば、単一の時系列の [AVG] はスカラー数を生成するため、最終的な式の結果にはなりません。しかし、それを関数 [m1-AVG(m1)] で使用して、個々のデータポイントとそのデータポイントの平均値の間の相違の時系列を表示できます。

次の表では、の列の例は、単一の時系列または時系列の配列を生成する式です。これらの例は、スカラー値を返す関数を、単一の時系列を生成する有効な式の一部として使用する方法を示しています。

関数 引数 戻り型* 説明

ABS

TS

TS[]

TS

TS[]

各データポイントの絶対値を返します。

ABS(m1-m2)

MIN(ABS([m1, m2]))

ABS(METRICS())

ANOMALY_DETECTION_BAND

TS

TS、S

TS[]

指定されたメトリクスの異常検出帯を返します。帯は 2 つの時系列で構成されます。1 つはメトリクスの「通常」の想定値の上限を表し、もう 1 つは下限を表します。この関数は 2 つの引数を受け取ることができます。1 つ目は、バンドを作成するメトリクスの ID です。2 つ目の引数は、帯に使用する標準偏差の数です。この引数を指定しない場合、デフォルト値の 2 が使用されます。詳細については、「CloudWatch の異常検出の使用」を参照してください。

ANOMALY_DETECTION_BAND(m1)

ANOMALY_DETECTION_BAND(m1,4)

AVG

TS

TS[]

S

TS

単一の時系列の AVG は、メトリクス内のすべてのデータポイントの平均を表すスカラーを返します。時系列の配列の AVG は単一の時系列を返します。欠落した値は 0 として処理されます。

SUM([m1,m2])/AVG(m2)

AVG(METRICS())

CEIL

TS

TS[]

TS

TS[]

各メトリクスの上限を返します。上限は、各値以上の最小の整数です。

CEIL(m1)

CEIL(METRICS())

SUM(CEIL(METRICS()))

FILL

TS, TS/S

TS[], TS/S

TS

TS[]

メトリクス値がスパースなとき、メトリクスの欠落した値を特定のフィラー値で埋めます。

FILL(m1,10)

FILL(METRICS(), 0)

FILL(m1, MIN(m1))

FIRST

LAST

TS[]

TS

時系列の配列から最初または最後の時系列を返します。これは、SORT 関数と共に使用する場合に便利です。また、ANOMALY_DETECTION_BAND 関数から高いしきい値と低いしきい値を取得するために使用することもできます。

IF(FIRST(SORT(METRICS(), AVG, DESC))>100, 1, 0) AVG でソートされた配列の上位メトリクスを確認します。次に、データポイント値が 100 より大きいかどうかに応じて、各データポイントに対して 1 または 0 を返します。

LAST(ANOMALY_DETECTION_BAND(m1)) は、異常予測バンドの下限を返します。

FLOOR

TS

TS[]

TS

TS[]

各メトリクスの下限を返します。下限は、各値以下の最大の整数です。

FLOOR(m1)

FLOOR(METRICS())

IF

IF expression

TS

IF を比較演算子と共に使用して、時系列からデータポイントをフィルタリングしたり、複数の照合時系列で構成される混合時系列を作成したりします。詳細については、「IF 式の使用」を参照してください。

INSIGHT_RULE_METRIC

INSIGHT_RULE_METRIC(ruleName, metricName)

TS

INSIGHT_RULE_METRIC を使用して、Contributor Insights のルールから統計を抽出します。詳細については、「ルールによって生成されたメトリクスのグラフ化 Contributor Insights メトリクスデータにアラームを設定する」を参照してください。

MAX

TS

TS[]

S

TS

単一の時系列の MAX は、メトリクス内のすべてのデータポイントの最大値を表すスカラーを返します。時系列の配列の MAX 値は単一の時系列を返します。

MAX(m1)/m1

MAX(METRICS())

METRIC_COUNT

TS[]

S

時系列の配列でメトリクスの数を返します。

m1/METRIC_COUNT(METRICS())

METRICS()

null

文字列

TS[]

METRICS() 関数は、リクエストのすべての CloudWatch メトリクスを返します。数式は含まれません。

より大きな式の中で METRICS() を使用することができ、最終的には単一の時系列または時系列の配列が生成されます。

[METRICS()] 関数を文字列と使用して、[Id] フィールドにその文字列を含むグラフ化されたメトリクスのみを返すことができます。たとえば、SUM(METRICS("errors")) 式は、[Id] フィールドに「errors」のあるグラフ化されたすべてのメトリクスの値の合計である時系列を返します。また、[SUM([METRICS(“4xx”), METRICS(“5xx”)])] を使用して、複数の文字列を一致させることができます。

AVG(METRICS())

SUM(METRICS("errors"))

MIN

TS

TS[]

S

TS

単一の時系列の MIN は、メトリクス内のすべてのデータポイントの最小値を表すスカラーを返します。時系列の配列の MIN は単一の時系列を返します。

m1-MIN(m1)

MIN(METRICS())

PERIOD

TS

S

メトリクスの期間を秒単位で返します。有効な入力は、他の式の結果ではなくメトリクスです。

m1/PERIOD(m1)

RATE

TS

TS[]

TS

TS[]

メトリクスの変更のレートを秒単位で返します。これは、最新のデータポイントの値と、前のデータポイントの値の差を、2 つ値の間の時間 (秒単位) で除算して計算されます。

RATE(m1)

RATE(METRICS())

REMOVE_EMPTY

TS[]

TS[]

時系列の配列からデータポイントを持たない時系列を削除します。結果は、各時系列に少なくとも 1 つのデータポイントが含まれている時系列の配列です。

REMOVE_EMPTY(METRICS())

SEARCH

Search 式

1 つ以上の TS

指定した検索条件に一致する 1 つ以上の時系列を返します。[SEARCH] 関数を使用することで、1 つの式で複数の関連する時系列をグラフに追加できます。グラフは、後に追加され、検索基準に一致する新しいメトリクスが含まれるように、動的に更新されます。詳細については、「グラフで検索式を使用する」を参照してください。

SERVICE_QUOTA

使用状況メトリクスである TS

TS

特定の使用状況メトリクスのサービスクォータを返します。これを使用して、現在の使用状況とクォータの比較を視覚化し、クォータに近づいたときに警告するアラームを設定できます。詳細については、「サービスクォータの統合と使用状況のメトリクス」を参照してください。

SLICE

(TS[], S, S) または (TS[], S)

TS[]

TS

時系列の配列の一部を取得します。これは、SORT と組み合わせた場合に特に便利です。たとえば、時系列の配列から最上位の結果を除外できます。

2 つのスカラー引数を使用して、返される時系列のセットを定義できます。2 つのスカラーは、返す配列の先頭 (その値を含む) と末尾 (その値を含まない) を定義します。配列はゼロから始まるため、配列の最初の時系列は時系列 0 です。または、値を 1 つだけ指定すると、その値で始まるすべての時系列が CloudWatch により返されます。

SLICE(SORT(METRICS(), SUM, DESC), 0, 10) は、SUM 値が最も大きいリクエスト内のメトリクスの配列から 10 個のメトリクスを返します。

SLICE(SORT(METRICS(), AVG, ASC), 5) は、AVG 統計でメトリクスの配列をソートし、AVG が最も低い 5 以外のすべての時系列を返します。

SORT

(TS[], FUNCTION, SORT_ORDER)

(TS[], FUNCTION, SORT_ORDER, S)

TS[]

指定した関数に従って時系列の配列をソートします。使用する関数は、AVGMINMAXSUM のいずれかです。ソート順は、昇順の場合は ASC (最小値が先頭)、または大きい値を最初にソートする場合は DESC です。必要に応じて、制限として機能するソート順の後に数値を指定できます。たとえば、制限を 5 に指定すると、ソートから上位 5 個の時系列のみが返されます。

この数学関数をグラフに表示すると、グラフ内の各メトリクスのラベルもソートされ、番号が付けられます。

SORT(METRICS(), AVG, DESC, 10) は、各時系列の平均値を計算して、ソートの開始時に最大値を持つ時系列をソートし、平均値が最も高い 10 個の時系列のみを返します。

SORT(METRICS(), MAX, ASC) は、メトリクスの配列を MAX 統計でソートし、そのすべてを昇順で返します。

STDDEV

TS

TS[]

S

TS

単一の時系列の STDDEV は、メトリクス内のすべてのデータポイントの標準偏差を表すスカラーを返します。時系列の配列の STDDEV は単一の時系列を返します。

m1/STDDEV(m1)

STDDEV(METRICS())

SUM

TS

TS[]

S

TS

単一の時系列の SUM は、メトリクス内のすべてのデータポイントの合計値を表すスカラーを返します。時系列の配列の SUM は単一の時系列を返します。

SUM(METRICS())/SUM(m1)

SUM([m1,m2])

SUM(METRICS("errors"))/SUM(METRICS("requests"))*100

* スカラー数を返す関数の使用は無効です。式の最終結果はすべて単一の時系列または時系列の配列である必要があります。代わりに、これらの関数を、時系列を返すより大きな式の一部として使用します。

IF 式の使用

IF を比較演算子と共に使用して、時系列からデータポイントをフィルタリングしたり、複数の照合時系列で構成される混合時系列を作成したりします。

IF は、次の引数を使用します。

IF(condition, trueValue, falseValue)

条件は、条件の値が正か負かにかかわらず、条件データポイントの値が 0 の場合は FALSE、条件の値がその他の値の場合は TRUE と評価されます。条件が時系列の場合、タイムスタンプごとに個別に評価されます。

有効な構文を次に示します。これらの構文ごとに、出力は単一の時系列です。

  • IF(TS Comparison Operator S, S | TS, S | TS)

  • IF(TS, TS, TS)

  • IF(TS, S, TS)

  • IF(TS, TS, S)

  • IF(TS, S, S)

  • IF(S, TS, TS)

次のセクションでは、これらの構文の詳細と例を示します。

IF(TS Comparison Operator S, scalar2 | metric2, scalar3 | metric3)

対応する出力時系列値:

  • 値は scalar2 または metric2 です (TS 比較演算子 S が TRUE の場合)。

  • 値は scalar3 または metric3 です (TS 比較演算子 S が FALSE の場合)。

  • 空の時系列です (対応するデータポイントが metric3 に存在しない場合、または scalar3/metric3 が式から省略されている場合)。

IF(metric1, metric2, metric3)

metric1 の各データポイントの対応する出力時系列の値は次のとおりです。

  • 値は metric2 です (対応するデータポート metric1 が TRUE の場合)。

  • 値は metric3 です (対応するデータポート metric1 が FALSE の場合)。

  • 値は 0 です (対応するデータポイント metric1 が TRUE で、対応するデータポイントが metric2 に存在しない場合)。

  • 削除されます (対応するデータポイント metric1 が FALSE で、対応するデータポイントが metric3 に存在しない場合、または metric3 が式から省略されている場合)。

次の表に、この構文の例を示します。

メトリクスまたは関数

(metric1)

[1, 1, 0, 0, -]

(metric2)

[30, -, 0, 0, 30]

(metric3)

[0, 0, 20, -, 20]

IF(metric1, metric2, metric3)

[30, 0, 20, -, -]

IF(metric1, scalar2, metric3)

metric1 の各データポイントの対応する出力時系列の値は次のとおりです。

  • 値は scalar2 です (対応するデータポート metric1 が TRUE の場合)。

  • 値は metric3 です (対応するデータポート metric1 が FALSE の場合)。

  • 削除されます (対応するデータポイント metric1 が FALSE で、対応するデータポイントが metric3 に存在しない場合、または metric3 が式から省略されている場合)。

メトリクスまたは関数

(metric1)

[1, 1, 0, 0, -]

scalar2

5

(metric3)

[0, 0, 20, -, 20]

IF(metric1, scalar2, metric3)

[5, 5, 20, -, -]

IF(metric1, metric2, scalar3)

metric1 の各データポイントの対応する出力時系列の値は次のとおりです。

  • 値は metric2 です (対応するデータポート metric1 が TRUE の場合)。

  • 値は scalar3 です (対応するデータポート metric1 が FALSE の場合)。

  • 値は 0 です (対応するデータポイント metric1 が TRUE で、対応するデータポイントが metric2 に存在しない場合)。

  • metric1 の対応するデータポイントが存在しない場合は削除されます。

メトリクスまたは関数

(metric1)

[1, 1, 0, 0, -]

(metric2)

[30, -, 0, 0, 30]

scalar3

5

IF(metric1, metric2, scalar3)

[30, 0, 5, 5, -]

IF(scalar1, metric2, metric3)

対応する出力時系列値:

  • 値は metric2 です (scalar1 が TRUE の場合)。

  • 値は metric3 です (scalar1 が FALSE の場合)。

  • 空の時系列です (metric3 が式から省略されている場合)。

IF 式のユースケース例

次の例は、IF 関数の考えれられる使用方法を示しています。

  • メトリクスの低い値のみを表示するには

    IF(metric1<400, metric1)

  • メトリクスの各データポイントを 2 つの値のいずれかに変更して、元のメトリクスの相対的に大きい値と小さい値を表示するには

    IF(metric1<400, 10, 2)

  • レイテンシーがしきい値を超える各タイムスタンプに 1 を表示し、その他のすべてのデータポイントに 0 を表示するには

    IF(latency>threshold, 1, 0)

Metric Math を GetMetricData API オペレーションと使用する

GetMetricData を使用して数式を使用した計算を実行でき、1 回の API コールでメトリクスデータの大規模バッチを取得できます。詳細については、「GetMetricData」を参照してください。