

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# stats
<a name="CWL_QuerySyntax-Stats"></a>

 `stats` を使用して、ログデータを棒グラフ、折れ線グラフ、積み上げ面グラフなどで視覚化します。これにより、ログデータのパターンをより効率的に特定できます。CloudWatch Logs Insights は、`stats` 関数と 1 つ以上の集計関数を使用するクエリの視覚化を生成します。

例えば、Route 53 ロググループの次のクエリは、Route 53 レコードの 1 時間あたりのディストリビューションをクエリタイプ別に視覚化して返します。

```
stats count(*) by queryType, bin(1h)
```

このようなクエリはすべて、棒グラフを生成できます。クエリで `bin()` 関数を使用して、時間の経過とともにデータを 1 つのフィールドでグループ化する場合、折れ線グラフや積み上げ面グラフも表示できます。

`bin` 関数では、次の時間単位と略語がサポートされています。複数の文字を含むすべての単位と略語では、s の複数形への追加がサポートされています。したがって、`hr` および `hrs` の両方とも時間を指定して機能します。
+ `millisecond` `ms` `msec`
+ `second` `s` `sec`
+ `minute` `m` `min`
+ `hour` `h` `hr`
+ `day` `d` 
+ `week` `w` 
+ `month` `mo` `mon`
+ `quarter` `q` `qtr`
+ `year` `y` `yr`

**Topics**
+ [時系列データを視覚化](#CWL_Insights-Visualizing-TimeSeries)
+ [フィールド別にグループ化されたログデータを視覚化](#CWL_Insights-Visualizing-ByFields)
+ [1 つのクエリで複数の stats コマンドを使用する](#CWL_QuerySyntax-stats-multi)
+ [統計と併用する関数](#CWL_QuerySyntax-stats-functions)

## 時系列データを視覚化
<a name="CWL_Insights-Visualizing-TimeSeries"></a>

時系列の視覚化は、次の特性を持つクエリで機能します。
+ 1 つ以上の集計関数が含まれているクエリ。詳細については、「[Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions)」を参照してください。
+ `bin()` 関数を使用して 1 つのフィールドでデータをグループ化するクエリ。

これらのクエリは、折れ線グラフ、積み上げ面グラフ、棒グラフ、円グラフを生成できます。

**例**

完全なチュートリアルについては、「[チュートリアル: 時系列の視覚化を生成するクエリを実行する](CWL_AnalyzeLogData_VisualizationQuery.md)」を参照してください。

時系列の視覚化で機能するクエリの他の例を以下に示します。

次のクエリでは、`myfield1` フィールドの平均値の視覚化を生成します。データポイントは 5 分間隔で作成されます。各データポイントは、それまでの 5 分間隔のログに基づく `myfield1` 値の平均の集約です。

```
stats avg(myfield1) by bin(5m)
```

次のクエリでは、異なるフィールドに基づく 3 つの値の視覚化を生成します。データポイントは 5 分間隔で作成されます。視覚化が生成されるのは、クエリに集計関数が含まれており、グループ化フィールドとして `bin()` が使用されているためです。

```
stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)
```

**折れ線グラフと積み上げ面グラフの制限**

ログエントリ情報を集計するが、`bin()` 関数を使用しないクエリでは、棒グラフを生成できます。ただし、これらのクエリは折れ線グラフや積み上げ面グラフを生成できません。これらのタイプのクエリの詳細については、「[フィールド別にグループ化されたログデータを視覚化](#CWL_Insights-Visualizing-ByFields)」を参照してください。

## フィールド別にグループ化されたログデータを視覚化
<a name="CWL_Insights-Visualizing-ByFields"></a>

`stats` 関数と 1 つ以上の集計関数を使用するクエリの棒グラフを作成できます。詳細については、「[Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions)」を参照してください。

視覚化を表示するには、クエリを実行します。次に、[**Visualization (視覚化)**] タブを選択し、[**Line (線)**] の横にある矢印を選択して、[**Bar (棒)**] を選択します。棒グラフでは、視覚化は最大 100 本の棒に制限されています。

**例**

完全なチュートリアルについては、「[チュートリアル: ログフィールド別にグループ化された視覚化を生成するクエリを実行する](CWL_AnalyzeLogData_VisualizationFieldQuery.md)」を参照してください。次の段落では、フィールド別の視覚化のクエリに関する他の例を示します。

次の VPC フローログクエリは、各宛先アドレスについて、セッションごとに転送された平均バイト数を検出します。

```
stats avg(bytes) by dstAddr
```

また、結果の値ごとに複数の棒を含むグラフを生成することもできます。たとえば、次の VPC フローログクエリは、各宛先アドレスについて、セッションごとに転送された平均および最大バイト数を検出します。

```
stats avg(bytes), max(bytes) by dstAddr
```

次のクエリは、各クエリタイプの Amazon Route 53 クエリログの数を検出します。

```
stats count(*) by queryType
```

## 1 つのクエリで複数の stats コマンドを使用する
<a name="CWL_QuerySyntax-stats-multi"></a>

1 つのクエリで最大 2 つの `stats` コマンドを使用できます。これにより、最初の集計の出力に対して追加の集計を実行できます。

**例: 2 つの `stats` コマンドによるクエリ**

例えば、次のクエリは、最初に 5 分間のビンの合計トラフィック量を検索し、次に、その 5 分間のビンの中で最大、最低、および平均のトラフィック量を計算します。

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m)
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb, 
        avg(logs_mb) AS avg_ingest_mb
```

**例: 複数の stats コマンドを `filter`、`fields`、`bin` などの他の関数と組み合わせます。**

1 つのクエリで、2 つの `stats` コマンドを、`filter` や `fields` などの他のコマンドと組み合わせることができます。例えば、次のクエリは、セッション内の異なる IP アドレス数を調べ、クライアントプラットフォームごとにセッション数を調べて、それらの IP アドレスをフィルタリングして、最後にクライアントプラットフォームごとのセッションリクエストの平均を求めます。

```
STATS count_distinct(client_ip) AS session_ips, 
      count(*) AS requests BY session_id, client_platform
| FILTER session_ips > 1
| STATS count(*) AS multiple_ip_sessions, 
        sum(requests) / count(*) AS avg_session_requests BY client_platform
```

クエリでは、`bin` と `dateceil` の関数を複数の `stats` コマンドと共に使用できます。例えば、次のクエリは、最初にメッセージを 5 分のブロックに結合し、次に 5 分間のブロックを 10 分のブロックに集約して、各 10 分ブロック内の最大、最低、および平均のトラフィック量を計算します。

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb,
        avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)
```

**注意事項と制限事項**

1 つのクエリにつき、最大 2 つの `stats` コマンドを持つことができます。このクォータは変更できません。

`sort` または `limit` コマンドを使用する場合は、2 番目の `stats` コマンドの後に指定する必要があります。2 番目の `stats` コマンドより前に置くと、クエリは無効になります。

クエリに 2 つの `stats` コマンドがある場合、1 つ目の `stats` 集計が完了するまで、クエリの結果の一部は表示されなくなります。

1 つのクエリにある 2 番目の `stats` コマンドでは、1 番目の `stats` コマンドで定義されているフィールドのみを参照できます。例えば、最初の `stats` 集計以降 `@message` フィールドが使用できなくなるため、次のクエリは無効です。

```
FIELDS @message
| STATS SUM(Fault) by Operation
# You can only reference `SUM(Fault)` or Operation at this point
| STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message
```

最初の `stats` コマンドの後に参照するフィールドは、すべて最初の `stats` コマンドで定義する必要があります。

```
STATS sum(x) as sum_x by y, z
| STATS max(sum_x) as max_x by z
# You can only reference `max(sum_x)`, max_x or z at this point
```

**重要**  
この `bin` 関数は常に `@timestamp` フィールドを暗黙的に使用します。つまり、2 番目の `stats` コマンドでは、1 番目の `stats` コマンドを使用して `timestamp` フィールドを伝達しないと `bin` を使用できないということです。例えば、以下のクエリは有効ではありません。  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes BY @logStream
 | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field
```
代わりに、最初の `stats` コマンドで `@timestamp` フィールドを定義し、次の例のように 2 番目の `stats` コマンドで `dateceil` と共にそれを使用できます。  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream
 | STATS avg(ingested_bytes) BY dateceil(@t, 5m)
```

## 統計と併用する関数
<a name="CWL_QuerySyntax-stats-functions"></a><a name="CWL_Insights_Aggregation_Functions"></a>

CloudWatch Logs Insights は、統計集計関数と統計非集計関数の両方をサポートしています。

 statsaggregation 関数は、`stats` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|  `avg(fieldName: NumericLogField)` |  数値 |  指定したフィールドの値の平均。  | 
|  `count()` `count(fieldName: LogField)` |  数値 |  ログイベントをカウントします。`count()` (または `count(*)`) は、クエリによって返されたすべてのイベントをカウントし、`count(fieldName)` は指定されたフィールド名を含むすべてのレコードをカウントします。  | 
|  `count_distinct(fieldName: LogField)` |  数値 |  フィールドの一意な値の数を返します。このフィールドの濃度が非常に高い場合 (一意な値が多数含まれている場合)、`count_distinct` から返される値は単なる概算値です。  | 
|  `max(fieldName: LogField)` |  LogFieldValue |  クエリを実行したログにおける、このログフィールドの値の最大数。  | 
|  `min(fieldName: LogField)` |  LogFieldValue |  クエリを実行したログにおける、このログフィールドの値の最小数。  | 
|  `pct(fieldName: LogFieldValue, percent: number)` |  LogFieldValue |  パーセンタイルは、データセットにおける値の相対的な位置を示します。たとえば、`pct(@duration, 95)` が `@duration` 値を返した場合、`@duration` の値の 95% がこの値より低く、5% がこの値より高くなります。  | 
|  `stddev(fieldName: NumericLogField)` |  数値 |  指定されたフィールドの値の標準偏差。  | 
|  `sum(fieldName: NumericLogField)` |  数値 |  指定したフィールドの値の合計。  | 

 **統計非集計関数** <a name="CWL_Insights_Non-Aggregation_Functions"></a>

 非集約関数は、`stats` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|  `earliest(fieldName: LogField)` |  LogField |  クエリを実行したうち最も早いタイムスタンプがあるログイベントから `fieldName` の値を返します。  | 
|  `latest(fieldName: LogField)` |  LogField |  クエリを実行したうち最も遅いタイムスタンプがあるログイベントから `fieldName` の値を返します。  | 
|  `sortsFirst(fieldName: LogField)` |  LogField |  クエリを実行したログをソートすると最初に来る `fieldName` の値を返します。  | 
|  `sortsLast(fieldName: LogField)` |  LogField |  クエリを実行したログをソートすると最後に来る `fieldName` の値を返します。  | 