Splunkサーチコマンド > stats、chart、timechart

Tips & Tricks Laura Stewart

Splunkのサーチコマンドである、statscharttimechartは、覚えておくと非常に便利なコマンドです(特にstats)。Splunkのサーチコマンドを学び始めた頃は、各コマンドのメリットをよく理解できませんでした。特にBY句がサーチ出力にどのように影響するかがわかりませんでした。そこで、試行錯誤を繰り返して出力を比較し、ついにこれらのコマンドの違いを理解することができました。

これら3つのコマンドは 変換 コマンドです。変換コマンドは、イベントデータを受け取り整形された結果テーブルに変換します。この3つのコマンドでは、カウント、合計、平均などの統計を計算できます。

注:以下の例とSplunkドキュメントでは、読みやすさを考慮してキーワード「BY」をすべて大文字で表記しています。実際のサーチでBYキーワードを指定するときは、大文字と小文字のどちらでもかまいません。

statsコマンドの結果テーブル

まずは stats コマンドから見ていきましょう。HTTPステータスコードごとにイベント数をカウントします。

... | stats count BY status

[Statistics] (統計)タブにテーブルが表示され、各行にステータスコードごとのイベント数が示されます。

ステータス
カウント
200
34282
400
701
403
228
404
690

結果として出力されるテーブルでは基本的に、フィールド値(200、400、403、404)が行ラベルになります。

statsコマンドでは、BY句でフィールドを指定すると、そのフィールドに基づいて結果がグループ化されます。たとえば、www1、www2、www3の3つのホストからイベントを受け取る場合、BY句に host フィールドを追加すると、結果がさらに細かくグループ化されます。

... | stats count BY status, host

ステータスとホストの組み合わせごとに、テーブルの 各行 にイベント数が表示されます。

ステータス
ホスト
カウント
200
www1
11835
200
www2
11186
200
www3
11261
400
www1
233
400
www2
257
400
www3
211
403
www2
228
404
www1
244
404
www2
209
404
www3
237

BY句で指定する各フィールドは、結果テーブルでは個別の列になります。この例では、行をまずステータスごとに分けてから、ホストごとに分けています。statsコマンドのBY句で指定するフィールドは、行分割フィールドと呼ばれます。

この例では、Webサイトでユーザーが、addtocart (カートに追加)、changequantity (数量を変更)、purchase (購入)、remove (削除)、view (表示)の5つのアクション(action)を実行できます。

サーチにアクションを追加してみましょう。

... | stats count BY status, host, action

今度は、行がまずステータスごと、次にホストごと、さらにアクションごとに分けられます。by句に action フィールドを追加したときの結果テーブルの一部を次に示します。

ステータス
ホスト
アクション
カウント
200
www1
addtocart
1837
200
www1
changequantity
428
200
www1
purchase
1860
200
www1
remove
432
200
www1
view
1523
200
www2
addtocart
1743
200
www2
changequantity
365
200
www2
purchase
1742

statsコマンドを使用する大きなメリットの1つは、BY句に複数のフィールドを指定して、詳細な統計を示す結果テーブルを作成できる点です。

chartコマンドの結果テーブル

同じ基本サーチで、chartコマンドの結果とstatsコマンドの結果を比べてみましょう。

BYフィールドを1つだけ指定したときは、statsコマンドと chart コマンドの結果は同じです。しかし、BYフィールドを2つ指定すると、chartコマンドの結果は明らかに異なります。

statsコマンドでBYフィールドを2つ指定した結果は次のようになりました。

ステータス
ホスト
カウント
200
www1
11835
200
www2
11186
200
www3
11261
400
www1
233
400
www2
257
400
www3
211
403
www2
228
404
www1
244
404
www2
209
404
www3
237

では、statsコマンドの代わりにchartコマンドを使ってサーチを実行してみましょう。

... | chart count BY status, host

結果は次のようになります。

ステータス
www1
www2
www3
200
11835
11186
11261
400
233
257
211
403
0
288
0
404
244
209
237

chartコマンドでは、1つ目のBYフィールドである status によって結果がグループ化されます。statusフィールドの値ごとに、結果が個別の行に表示されます。この1つ目のBYフィールドが行分割フィールドになります。そしてchartコマンドでは、2つ目のBYフィールドである host によって、結果が個別の列に分けられます。この2つ目のBYフィールドは列分割フィールドと呼ばれます。この場合、hostフィールドの値が列ラベルになります。

2つの結果テーブルでステータスコード403の結果を比べてみてください。statsコマンドでは、ステータスコード403にホストwww1とwww3の結果はありません。一方、chartコマンドでは、列分割フィールドに対応するイベントがない場合、値0が返されます。

statsコマンドと chart コマンドの重要な違いの1つは、BY句で指定できるフィールド数です。statsコマンドでは、BY句でフィールドのリストを指定でき、そのすべてが行分割フィールドになります。statsコマンドのBY句の構文は次のとおりです。

BY <field-list>

一方chartコマンドでは、指定できるフィールドは2つまでで、1つが行分割フィールド、もう1つが列分割フィールドになります。

chartコマンドでは、次のように、BY句のフィールドを2つの方法で指定できます。

... | chart count BY status, host

... | chart count OVER status BY host

chartコマンドのBY句の構文は次のとおりです。

[ BY 行分割 列分割 ] [ OVER 行分割] [BY 列分割]

chartコマンドを使用するメリットは、グラフの作成に適した統合的な結果テーブルを作成できる点です。それがどういうことか次に説明しましょう。

statsコマンドとchartコマンドの視覚化

statsコマンドとchartコマンドを実行すると、イベントデータが結果テーブルに変換され、[Statistics] (統計)タブに表示されます。[Visualization] (視覚化)タブをクリックすると、結果からグラフが生成されます。statsコマンドの結果のグラフがこちらです。

statusフィールドがX軸になり、hostフィールドとcountフィールドがデータシリーズになります。また、カウントの値の範囲がY軸になります。

このグラフには問題点がいくつかあります。

  1. X軸のステータスコード1つに対して複数の値がある。
  2. hostの値(www1、www2、www3)は文字列値であるためグラフ化できない。凡例にはhostと表示されているが、グラフの棒に青い部分がない。

このような問題により、グラフはわかりづらく、結果テーブルの情報が正確に反映されていません。

ただし、statsコマンドでも、BY句でフィールドを1つだけ指定した場合は、有効なグラフを作成できます。BY句のフィールドが複数ある場合は、chartコマンドでグラフを作成するのが効果的です。

statusフィールドがX軸になり、hostの値がデータシリーズになります。また、カウントの値の範囲がY軸になります。

timechartコマンドとは

timechartコマンドを使用すると、結果テーブルでは常にイベントがそのタイムスタンプ(_timeフィールド)によってグループ化されます。結果テーブルでは、タイムスタンプ値が行分割フィールドになります。そのため、BY句で指定できるのは1つの列分割フィールドのみです。たとえば次のサーチでは、statusフィールドを列分割フィールドとして指定してカウントを生成しています。

... | timechart count BY status

結果テーブルは次のようになります。

_time
200
400
403
404
2018-07-05
1038
27
7
19
2018-07-06
4981
111
35
98
2018-07-07
5123
99
45
105
2018-07-08
5016
112
22
105
2018-07-09
4732
86
34
84
2018-07-10
4791
102
23
107
2018-07-11
4783
85
39
98
2018-07-12
3818
79
23
74

代わりにhostフィールドを指定すると、結果テーブルは次のようになります。

_time
www1
www2
www3
2018-07-05
372
429
419
2018-07-06
2111
1837
1836
2018-07-07
1887
2046
1935
2018-07-08
1927
1869
2005
2018-07-09
1937
1654
1792
2018-07-10
1980
1832
1733
2018-07-11
1855
1847
1836
2018-07-12
1559
1398
1436

_time列のタイムスタンプの間隔は、サーチの時間範囲、またはtimechartコマンドで指定する引数によって決まります。前の例では、時間範囲はAll time (過去すべて)に設定され、この例では数週間分のデータが対象になっています。間隔は、spanを指定していないため、デフォルトの間隔が使用されます。この場合、デフォルトの間隔は1日です。

Last 24 hours (過去24時間)のような時間範囲を指定した場合、デフォルトの間隔は30分です。よく使われる時間範囲のデフォルトの間隔は、timechartのドキュメントの「Usage」セクションで確認できます。デフォルトの30分間隔の結果テーブルは次のようになります。

_time
www1
www2
www3
2018-07-12 15:00:00
44
22
73
2018-07-12 15:30:00
34
53
31
2018-07-12 16:00:00
14
33
36
2018-07-12 16:30:00
46
21
54
2018-07-12 17:00:00
75
26
38
2018-07-12 17:30:00
38
51
14
2018-07-12 18:00:00
62
24
15

timechartコマンドには、statsコマンドやchartコマンドにはないさまざまなオプションがあります。たとえば、次のように間隔を指定できます。

... | timechart span=12h count BY host

_time
www1
www2
www3
2018-07-04 17:00
801
783
819
2018-07-05 05:00
795
847
723
2018-07-05 17:00
1926
1661
1642
2018-07-06 05:00
1501
1774
1542
2018-07-06 17:00
2033
1909
1857
2018-07-07 05:00
1482
1671
1594
2018-07-07 17:00
2027
1818
2036

この例では、サーチを実行した時刻(ロカール時刻)とUNIX時間(エポックタイムとも呼ばれます)との調整に基づいて、12時間間隔で結果が表示されます。

注:timechartコマンドで指定できるオプションはほかにもたくさんあります。これらについては別のブログでご紹介します。

次に、これらの結果のグラフを見てみましょう。[Visualization]タブでは、_timeがX軸になります。X軸では、各日の午後12時と午前12時の間隔で目盛りが刻まれます。ただし、この例ではデータが各日の17時から翌日5時の間に表示されます。

BY句で指定したフィールドがデータシリーズになります。また、カウントの値の範囲がY軸になります。

まとめ

stats、chart、timechartの各コマンドは似ていますが、BY句とともに使用するときは注意が必要です。

SPLで目的を達成できることを願っています - Laura

参照資料

ブログ:

Splunkドキュメント:

このブログはこちらの英語ブログの翻訳です。

関連記事

Dashboard Studio:Dashboard Studioでの表示/非表示とトークンの評価方法
Tips
4 分程度

Dashboard Studio:Dashboard Studioでの表示/非表示とトークンの評価方法

Dashboard Studioでトークンを評価し、条件に基づいて表示/非表示を切り替える方法とその例をご紹介します。
Microsoft AzureのデータをSplunkに取り込む
Tips
6 分程度

Microsoft AzureのデータをSplunkに取り込む

Microsoft Azureのデータはどのように提供されるのか、データにはどうやってアクセスするのかについて簡単に説明します。また、初期設定のままですぐにAzureデータを収集できるSplunkアドオンについても紹介します。
SPLのコマンドタイプを学ぶ~効率的なサーチの実行順序とその調査方法~
Tips
8 分程度

SPLのコマンドタイプを学ぶ~効率的なサーチの実行順序とその調査方法~

Splunkでは、サーチを実行する際に独自言語であるSPL(Search Processing Language)を使用します。今回は、SPLのタイプについてそれぞれ解説し、効率的なサーチの実行順序とその調査ツールであるSearch Job Inspectorの使い方をお伝えします。