stats - Amazon CloudWatch Logs

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

stats

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

時系列データを視覚化

時系列の視覚化は、次の特性を持つクエリで機能します。

  • 1 つ以上の集計関数が含まれているクエリ。詳細については、「Aggregation Functions in the Stats Command」を参照してください。

  • bin() 関数を使用して 1 つのフィールドでデータをグループ化するクエリ。

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

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

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

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

stats avg(myfield1) by bin(5m)

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

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

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

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

フィールド別にグループ化されたログデータを視覚化

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

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

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

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

stats avg(bytes) by dstAddr

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

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

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

stats count(*) by queryType

1 つのクエリで複数の stats コマンドを使用する

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 コマンドを filterfieldsbin などの他の関数と組み合わせます。

1 つのクエリで、2 つの stats コマンドを、filterfields などの他のコマンドと組み合わせることができます。例えば、次のクエリは、セッション内の異なる 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

クエリでは、bindateceil の関数を複数の 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)

統計と併用する関数

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)

数値

指定したフィールドの値の合計。

統計非集計関数

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

関数 結果タイプ 説明

earliest(fieldName: LogField)

LogField

クエリを実行したうち最も早いタイムスタンプがあるログイベントから fieldName の値を返します。

latest(fieldName: LogField)

LogField

クエリを実行したうち最も遅いタイムスタンプがあるログイベントから fieldName の値を返します。

sortsFirst(fieldName: LogField)

LogField

クエリを実行したログをソートすると最初に来る fieldName の値を返します。

sortsLast(fieldName: LogField)

LogField

クエリを実行したログをソートすると最後に来る fieldName の値を返します。