

# CloudWatch メトリクスでの数式の使用
<a name="using-metric-math"></a>

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

`GetMetricData` API オペレーションを使用して、Metric Math をプログラムで実行することもできます。詳細については、「[GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)」を参照してください。

## CloudWatch グラフに数式を追加する
<a name="adding-metrics-expression-console"></a>

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

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

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

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

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

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

1. 新しい行の [**詳細**] 列に、数式を入力します。**[Metric Math 構文と関数]** セクションの表には、式で使用できる関数が一覧表示されています。

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

   [**Id**] の値は変更できます。数字、文字、アンダースコアを含めることができ、小文字で始める必要があります。[**Id**] を意味のある名前に変更すると、グラフをより容易に理解できます (例: [**m1**] や [**m2**] を [**エラー**] や [**リクエスト**] に変更)。
**ヒント**  
数式の作成時に使用できるサポートされている関数のリストを表示するには、[**Math Expression (数式)**] の横にある下向き矢印を選択します。

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

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

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

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

## Metric Math 構文と関数
<a name="metric-math-syntax"></a>

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

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

### データタイプの略語
<a name="metric-math-syntax-datatypes"></a>

一部の関数は、特定のタイプのデータのみに有効です。次のリストにある略語は、関数のテーブルで使用され、各関数でサポートされているデータタイプを表しています。
+ [**S**] は、スカラー数 (2、-5、または 50.25 など) を表します。
+ [**TS**] は時系列 (時間の経過に伴う単一の CloudWatch メトリクスの一連の値) です。例えば、過去 3 日間のインスタンス `i-1234567890abcdef0` の`CPUUtilization` メトリクスなどです。
+ [**TS[]**] は時系列の配列です (複数のメトリクスの時系列など)。
+ **String []** は文字列の配列です。

### METRICS() 関数
<a name="metric-math-syntax-metrics-function"></a>

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

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

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

### 基本的な算術関数
<a name="metric-math-syntax-arithmetic"></a>

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


| オペレーション | 引数 | 例 | 
| --- | --- | --- | 
|  算術演算子: \$1 - \$1 / ^ |  S, S S, TS TS, TS S, TS[] TS, TS[]  |  PERIOD(m1)/60 **5 \$1 m1** **m1 - m2** **SUM(100/[m1, m2])** **AVG(METRICS())** **METRICS()\$1100**  | 
|  単項減算 -  |  S TS TS[]  |  **-5\$1m1** **-m1** **SUM(-[m1, m2])**  | 

### 比較演算子と論理演算子
<a name="metric-math-syntax-operators"></a>

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

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

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

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


| 演算子のタイプ | サポートされている演算子 | 
| --- | --- | 
|  比較演算子 |  == \$1= <= >= < >  | 
|  論理演算子 |  AND または && OR または \$1\$1  | 

これらの演算子がどのように使用されるかを確認するため、以下の 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 のサポートされている関数
<a name="metric-math-syntax-functions-list"></a>

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

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

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


| 関数 | 引数 | 戻り型**\$1** | 説明 | 例 | クロスアカウントでサポートされていますか。 | 
| --- | --- | --- | --- | --- | --- | 
|  **ABS** |  TS TS[]  |  TS TS[]  | 各データポイントの絶対値を返します。 |  **ABS(m1-m2)** **MIN(ABS([m1, m2]))** **ABS(METRICS())**  | ✓ | 
|  **ANOMALY\$1DETECTION\$1BAND** |  TS TS、S  |  TS[]  | 指定されたメトリクスの異常検出バンドを返します。バンドは 2 つの時系列で構成されます。1 つはメトリクスの「通常」の想定値の上限を表し、もう 1 つは下限を表します。この関数は 2 つの引数を受け取ることができます。1 つ目は、バンドを作成するメトリクスの ID です。2 つ目の引数は、バンドに使用する標準偏差の数です。この引数を指定しない場合、デフォルト値の 2 が使用されます。詳細については、「[CloudWatch 異常検出の使用](CloudWatch_Anomaly_Detection.md)」を参照してください。 |  **ANOMALY\$1DETECTION\$1BAND(m1)** **ANOMALY\$1DETECTION\$1BAND(m1,4)**  |  | 
|  **AVG** |  TS TS[]  |  S TS  | 単一の時系列の **AVG** は、メトリクス内のすべてのデータポイントの平均を表すスカラーを返します。時系列の配列の **AVG** は単一の時系列を返します。欠落した値は 0 として処理されます。  関数でスカラーを返すことを計画している場合、この関数は CloudWatch アラームで使用しないことをお勧めします。例えば、`AVG(m2)`。アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [Evaluation Periods (評価期間)] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。 この機能をアラーム、特に Auto Scaling アクションが設定されているアラームで使用するには、N 個のデータポイントのうち M 個を使用するようにアラームを設定することをお勧めします (M < N)。   |  **SUM([m1,m2])/AVG(m2)** **AVG(METRICS())**  | ✓ | 
|  **CEIL** |  TSTS[]  |  TS TS[]  | 各メトリクスの上限を返します。上限は、各値以上の最小の整数です。 |  **CEIL(m1)** **CEIL(METRICS())** **SUM(CEIL(METRICS()))**  | ✓ | 
|  **DATAPOINT\$1COUNT** |  TS TS[]  |  S TS  | 値を報告したデータポイントの数を返します。これは、スパースメトリクスの平均を計算する場合に便利です。  CloudWatch アラームではこの関数を使用しないことをお勧めします。アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [Evaluation Periods (評価期間)] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **SUM(m1) / DATAPOINT\$1COUNT(m1)** **DATAPOINT\$1COUNT(METRICS())**  | ✓ | 
|  **DB\$1PERF\$1INSIGHTS** |  文字列、文字列、文字列 文字列、文字列、文字列[]  |  TS (単一の文字列が与えられた場合) TS [] (文字列の配列を指定した場合)  | Amazon RDB Service や Amazon DocumentDB (MongoDB 互換性あり) などのデータベースの Performance Insights Counter メトリクスを返します。この関数は、Performance Insights API を直接クエリして取得できるのと同じ量のデータを返します。CloudWatch でこれらのメトリックスを使用して、グラフを作成し、アラームを作成できます。  この関数を使用する場合は、データベースの一意のデータベースリソース ID を指定する必要があります。これはデータベース ID とは異なります。Amazon RDS コンソールでデータベースリソース ID を検索するには、DB インスタンスを選択してその詳細を表示します。そして、[**Configuration (設定)**] タブを選択します。**[設定]** セクションに **[リソース ID]** が表示されます。  また、**DB\$1PERF\$1INSIGHTS** は 1 分未満の間隔で `DBLoad` メトリクスを取り込みます。 この関数で取得した Performance Insights メトリクスは CloudWatch には保存されません。したがって、クロスアカウントオブザーバビリティ、異常検出、メトリクスストリーム、メトリクスエクスプローラー、Metric Insights など一部の CloudWatch 機能は、**DB\$1PERF\$1INSIGHTS** で取得する Performance Insights メトリクスでは動作しません。 **DB\$1PERF\$1INSIGHTS** 関数を使用した 1 回のリクエストで、次の数のデータポイントを取得できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/using-metric-math.html) **DB\$1PERF\$1INSIGHTS** 関数は、以下の期間のみをサポートします [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/using-metric-math.html) Amazon RDS Performance Insights カウンターメトリクス詳細については、「[Performance Insights カウンターメトリクス](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html)」を参照してください。 Amazon DocumentDB Performance Insights カウンターメトリクスの詳細については、「[Performance Insights for counter metrics](https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights-counter-metrics.html)」を参照してください。  **DB\$1PERF\$1INSIGHTS** によって 1 分未満の解像度で取得される高解像度メトリクスは、**DBLoad** メトリック、またはより高い解像度で拡張モニタリングを有効にしている場合はオペレーティングシステムメトリックにのみ適用されます。Amazon RDS の拡張モニタリングの詳細については、「[拡張モニタリングを使用した OS メトリクスのモニタリング](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html)」を参照してください。 **DB\$1PERF\$1INSIGHTS** 関数を使用すると、最大 3 時間の範囲で高解像度のアラームを作成できます。CloudWatch コンソールを使用して、**DB\$1PERF\$1INSIGHTS** 関数で取得したメトリクスを任意の時間範囲でグラフ化できます。  |  **DB\$1PERF\$1INSIGHTS(‘RDS’, ‘db-ABCDEFGHIJKLMNOPQRSTUVWXY1’, ‘os.cpuUtilization.user.avg’)** **DB\$1PERF\$1INSIGHTS(‘DOCDB, ‘db-ABCDEFGHIJKLMNOPQRSTUVWXY1’, [‘os.cpuUtilization.idle.avg’, ‘os.cpuUtilization.user.max’])**  |  | 
|  **DIFF** |  TSTS[]  |  TS TS[]  | 時系列の各値と、その時系列の前の値との差を返します。 |  **DIFF(m1)**  | ✓ | 
|  **DIFF\$1TIME** |  TSTS[]  |  TS TS[]  | 時系列の各値のタイムスタンプと、その時系列の前の値のタイムスタンプとの差を秒単位で返します。 |  **DIFF\$1TIME(METRICS())**  | ✓ | 
|  **FILL** |  TS, [S \$1 REPEAT \$1 LINEAR] TS[], [TS \$1 S \$1 REPEAT \$1 LINEAR]  |  TS TS[]  | 時系列で欠けているを埋めます。欠けている値の予備として使用する値には、いくつかのオプションがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/using-metric-math.html)  アラームでこの関数を使用した場合、メトリクスがわずかに遅れて公開され、最新の 1 分間のデータが記録されない問題が発生することがあります。このような場合、**FILL** は、欠落したデータポイントをリクエストされた値に置き換えます。これにより、メトリクスの最新のデータポイントが常に FILL の値になり、アラームが OK 状態または ALARM 状態のいずれかで停止することがあります。N 個中 M のアラームを使用することで、この問題を回避できます。詳細については、「[アラーム評価](alarm-evaluation.md)」を参照してください。  |  **FILL(m1,10)** **FILL(METRICS(), 0)** **FILL(METRICS(), m1)** **FILL(m1, MIN(m1))** **FILL(m1, REPEAT)** **FILL(METRICS(), LINEAR)**  | ✓ | 
|  **FIRST** **LAST** |  TS[]  |  TS  | 時系列の配列から最初または最後の時系列を返します。これは、**SORT** 関数と共に使用する場合に便利です。また、**ANOMALY\$1DETECTION\$1BAND** 関数から高いしきい値と低いしきい値を取得するために使用することもできます。 |  **IF(FIRST(SORT(METRICS(), AVG, DESC))>100, 1, 0)** AVG でソートされた配列の上位メトリクスを確認します。その後、データポイント値が 100 より大きいかどうかに応じて、それぞれのデータポイントに対して 1 または 0 を返します。 **LAST(ANOMALY\$1DETECTION\$1BAND(m1))** は、異常予測バンドの上限を返します。  | ✓ | 
|  **FLOOR** |  TSTS[]  |  TS TS[]  | 各メトリクスの下限を返します。下限は、各値以下の最大の整数です。 |  **FLOOR(m1)** **FLOOR(METRICS())**  | ✓ | 
|  **IF** |  **IF** expression  |  TS  | **IF** を比較演算子と共に使用して、時系列からデータポイントをフィルタリングしたり、複数の照合時系列で構成される混合時系列を作成したりします。詳細については、「[IF 式の使用](#using-IF-expressions)」を参照してください。 | 例については「[IF 式の使用](#using-IF-expressions)」を参照してください。  | ✓ | 
|  **INSIGHT\$1RULE\$1METRIC** |  **INSIGHT\$1RULE\$1METRIC(ruleName, metricName)**  |  TS  | **INSIGHT\$1RULE\$1METRIC** を使用して、Contributor Insights のルールから統計を抽出します。詳細については、「[CloudWatch のルールによって生成されたメトリクスのグラフ化Contributor Insights メトリクスデータでのアラームの設定](ContributorInsights-GraphReportData.md)」を参照してください。 |   |  | 
|  **LAMBDA** |  **LAMBDA(LambdaFunctionName [, optional-arg]\$1)**  |  TS TS[]  | Lambda 関数を呼び出すと、CloudWatch 以外のデータソースにあるメトリクスをクエリできます。詳細については、「[Lambda 関数に引数を渡す方法](CloudWatch_MultiDataSources-Custom-Use.md#MultiDataSources-Connect-Custom-Lambda-arguments)」を参照してください。 |   |  | 
|  **LOG** |  TS TS[]  |  TS TS[]  | 時系列の **LOG** は、時系列の各値の自然対数値を返します。 |  **LOG(METRICS())**  | ✓ | 
|  **LOG10** |  TS TS[]  |  TS TS[]  | 時系列の **LOG10** は、時系列の各値の 10 を底とする対数値を返します。 |  **LOG10(m1)**  | ✓ | 
|  **MAX** |  TS TS[]  |  S TS  | 単一の時系列の **MAX** は、メトリクス内のすべてのデータポイントの最大値を表すスカラーを返します。 時系列の配列を入力すると、**MAX** 関数は、入力として使用された時系列の中で、各データポイントの最大値で構成される時系列を作成して返します。  関数でスカラーを返すことを計画している場合、この関数は CloudWatch アラームで使用しないことをお勧めします。例えば、`MAX(m2)` アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [評価期間] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **MAX(m1)/m1** **MAX(METRICS())**  | ✓ | 
|  **METRIC\$1COUNT** |  TS[]  |  S  | 時系列の配列でメトリクスの数を返します。 |  **m1/METRIC\$1COUNT(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** 関数は、入力として使用された時系列の中で、各データポイントの最小値で構成される時系列を作成して返します。 時系列の配列を入力すると、**MIN** 関数は、入力として使用された時系列の中で、各データポイントの最小値で構成される時系列を作成して返します。  関数でスカラーを返すことを計画している場合、この関数は CloudWatch アラームで使用しないことをお勧めします。例えば、`MIN(m2)` アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [評価期間] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **m1-MIN(m1)** **MIN(METRICS())**  | ✓ | 
|  **MINUTE** **HOUR** **DAY** **DATE** **MONTH** **YEAR** **EPOCH** |  TS  |  TS  | これらの関数は、時系列の期間と範囲を取り、各値がそのタイムスタンプに基づいている新しい非スパース時系列を返します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/using-metric-math.html) |  **MINUTE(m1)** **IF(DAY(m1)<6,m1)** は、月曜日から金曜日の平日のメトリクスのみを返します。 **IF(MONTH(m1) == 4,m1)** は、4 月に公開されたメトリクスのみを返します。  | ✓ | 
|  **PERIOD** |  TS  |  S  | メトリクスの期間を秒単位で返します。有効な入力は、他の式の結果ではなくメトリクスです。 |  **m1/PERIOD(m1)**  | ✓ | 
|  **RATE** |  TS TS[]  |  TS TS[] | メトリクスの変更のレートを秒単位で返します。これは、最新のデータポイントの値と、前のデータポイントの値の差を、2 つ値の間の時間 (秒単位) で除算して計算されます。  すパーツデータのメトリクスに RATE 関数を使用する式にアラームを設定すると、アラームの評価時に取得されるデータポイントの範囲は、データポイントが最後に公開された日時によって異なる可能性があるため、予期しない動作が発生することがあります。  |  **RATE(m1)** **RATE(METRICS())**  | ✓ | 
|  **REMOVE\$1EMPTY** |  TS[]  |  TS[] | 時系列の配列から、データポイントを持たない時系列を削除します。この結果は、各時系列に少なくとも 1 つのデータポイントが含まれている時系列の配列となります。  CloudWatch アラームではこの関数を使用しないことをお勧めします。アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [Evaluation Periods (評価期間)] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **REMOVE\$1EMPTY(METRICS())**   | ✓ | 
|  **RUNNING\$1SUM** |  TS TS[]  |  TS TS[]  | 元の時系列の値から現在の合計を持つ時系列を返します。  CloudWatch アラームではこの関数を使用しないことをお勧めします。アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [Evaluation Periods (評価期間)] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **RUNNING\$1SUM([m1,m2])**  | ✓ | 
|  **SEARCH** |  Search 式  |  1 つ以上の TS  | 指定した検索条件に一致する 1 つ以上の時系列を返します。[**SEARCH**] 関数を使用することで、1 つの式で複数の関連する時系列をグラフに追加できます。グラフは、後に追加され、検索基準に一致する新しいメトリクスが含まれるように、動的に更新されます。詳細については、「[グラフで検索式を使用する](using-search-expressions.md)」を参照してください。 **検索**式に基づくアラームを作成することはできません。これは、検索式が複数の時系列を返し、数式に基づくアラームは 1 つの時系列しか監視できないためです。 CloudWatch クロスアカウントオブザーバビリティでモニタリングアカウントにサインインしている場合、**SEARCH** 関数はソースアカウントとモニタリングアカウントのメトリクスを検索します。 |   | ✓ | 
|  **SERVICE\$1QUOTA** |  使用状況メトリクスである TS  |  TS  | 特定の使用状況メトリクスのサービスクォータを返します。これを使用して、現在の使用状況とクォータの比較を可視化し、クォータに近づいたときに警告するアラームを設定できます。詳細については、「[AWS 使用状況メトリクス](CloudWatch-Service-Quota-Integration.md)」を参照してください。 |   | ✓ | 
|  **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\$1ORDER) (TS[], FUNCTION, SORT\$1ORDER, S)  |  TS[]  | 指定した関数に従って時系列の配列をソートします。使用する関数は、**AVG**、**MIN**、**MAX**、**SUM** のいずれかです。ソート順は、昇順の場合は **ASC** (最小値が先頭)、または大きい値を最初にソートする場合は **DESC** です。必要に応じて、制限として機能するソート順の後に数値を指定できます。たとえば、制限を 5 に指定すると、ソートから上位 5 個の時系列のみが返されます。 この数学関数をグラフに表示すると、グラフ内の各メトリクスのラベルもソートされ、番号が付けられます。  | **SORT(METRICS(), AVG, DESC, 10)** は、各時系列の平均値を計算して、ソートの開始時に最大値を持つ時系列をソートし、平均値が最も高い 10 個の時系列のみを返します。 **SORT(METRICS(), MAX, ASC)** は、メトリクスの配列を MAX 統計でソートし、そのすべてを昇順で返します。  | ✓ | 
|  **STDDEV** |  TS TS[]  |  S TS  | 単一の時系列の **STDDEV** は、メトリクス内のすべてのデータポイントの標準偏差を表すスカラーを返します。時系列の配列の **STDDEV** は単一の時系列を返します。  関数でスカラーを返すことを計画している場合、この関数は CloudWatch アラームで使用しないことをお勧めします。例えば、`STDDEV(m2)` アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [評価期間] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **m1/STDDEV(m1)** **STDDEV(METRICS())**  | ✓ | 
|  **SUM** |  TS TS[]  |  S TS  | 単一の時系列の **SUM** は、メトリクス内のすべてのデータポイントの合計値を表すスカラーを返します。時系列の配列の **SUM** は単一の時系列を返します。  関数でスカラーを返すことを計画している場合、この関数は CloudWatch アラームで使用しないことをお勧めします。例えば、`SUM(m1)`。アラームが状態を変更するかどうかを評価するたびに、CloudWatch は [Evaluation Periods (評価期間)] に指定されている数よりも多くのデータポイントを取得しようとします。この関数は、追加のデータがリクエストされた場合に異なる動作をします。  |  **SUM(METRICS())/SUM(m1)** **SUM([m1,m2])** **SUM(METRICS("errors"))/SUM(METRICS("requests"))\$1100**  | ✓ | 
|  **TIME\$1SERIES** |  S  |  TS  | すべての値がスカラー引数に設定されている非スパース時系列を返します。 |  **TIME\$1SERIES(MAX(m1))** **TIME\$1SERIES(5\$1AVG(m1))** **TIME\$1SERIES(10)**  | ✓ | 

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

## IF 式の使用
<a name="using-IF-expressions"></a>

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

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

```
IF(condition, trueValue, falseValue)
```

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

有効な構文を次に示します。これらの構文ごとに、出力は単一の時系列です。
+ **IF(TS *Comparison Operator* S, S \$1 TS, *S \$1 TS*)**
**注記**  
`TS comparison operator S` が TRUE で、`metric2` に対応するデータポイントがない場合、出力は 0 になります。
+ **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 \$1 metric2, scalar3 \$1 metric3)**

対応する出力時系列値:
+ **TS *Comparison Operator* S** が TRUE の場合、これには値として **scalar2** または **metric2** が含まれます。
+ **TS *Comparison Operator* S** が FALSE の場合、これには値として **scalar3** または **metric3** が含まれます。
+ は、**TS *比較演算子***が TRUE で、**metric2** の対応するデータポイントが存在しない場合、値 **0** を持ちます。
+ は、**TS *比較演算子***が FALSE で、**metric3** の対応するデータポイントが存在しない場合、値 **0** を持ちます。
+ 空の時系列です (対応するデータポイントが **metric3** に存在しない場合、または **scalar3**/**metric3** が式から省略されている場合)。

**IF(metric1, metric2, *metric3*)**

**metric1** の各データポイントの対応する出力時系列の値は次のとおりです。
+ 値は **metric2** です (対応するデータポート **metric1** が TRUE の場合)。
+ 値は **metric3** です (対応するデータポート **metric1** が FALSE の場合)。
+ 値は **0** です (対応するデータポイント **metric1** が TRUE で、対応するデータポイントが **metric2** に存在しない場合)。
+ 値は **0** です (対応するデータポイント **metric1** が FALSE で、対応するデータポイントが **metric3** に存在しない場合) 
+ は、**metric1 ** の対応するデータポイントが FALSE で、対応するデータポイントが **metric3** に存在しない場合、削除されます。
+ は、**metric1** の対応するデータポイントが存在しない場合、削除されます。

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


| メトリクスまたは関数 | 値 | 
| --- | --- | 
|  **(metric1)** |  **[1, 1, 0, 0, -]**  | 
|  **(metric2)** |  **[30, -, 0, 0, 30]**  | 
|  **(metric3)** |  **[0, 0, 20, -, 20]**  | 
|  **IF(metric1, metric2, metric3)** |  **[30, 0, 20, 0, -]**  | 

**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 式のユースケース例
<a name="using-IF-expressions-use-cases"></a>

次の例は、**IF** 関数の考えれられる使用方法を示しています。
+ メトリクスの低い値のみを表示するには

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

  **IF(metric1<400, 10, 2)**
+ レイテンシーがしきい値を超える各タイムスタンプに 1 を表示し、その他のすべてのデータポイントに 0 を表示するには

  **IF(latency>threshold, 1, 0)**

### GetMetricData API オペレーションでメトリクス数式を使用する
<a name="using-metrics-expression-api"></a>

`GetMetricData` を使用して数式を使用した計算を実行でき、1 回の API コールでメトリクスデータの大規模バッチを取得できます。詳細については、「[GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)」を参照してください。

## Metric Math での異常検出
<a name="using-anomaly-detection-on-metric-math"></a>

Metric Math の異常検出は、単一のメトリクスおよびメトリクスの数式からの出力により、異常検出アラームを作成する際に使用できる機能です。これらの式を使用して、異常検出バンドを可視化するグラフを作成できます。この機能では、基本的な算術関数、比較演算子、論理演算子、そしてその他のほとんどの関数がサポートされています。

**Metric Math の異常検出では、以下の関数はサポートされていません。**
+ 同じ行に複数の **ANOMALY\$1DETECTION\$1BAND** を含む表現。
+ 10 より多くのメトリクスまたは数式を含む表現。
+ **METRICS** 式を含む表現。
+ **SEARCH** 関数を含む表現。
+ **DP\$1PERF\$1INSIGHTS** 関数を使用する表現。
+ 異なる期間のメトリクスを使用する表現。
+ 1 時間より長い期間を入力として使用する式。
+ 高解像度メトリクスを入力として使用する式。

この機能の詳細については、*Amazon CloudWatch ユーザーガイド*の「[CloudWatch 異常検出の使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html#anomaly_detection_on_metric_math)」を参照してください。