Splunkサーチコマンド > stats、chart、timechart
Tips & Tricks Laura StewartSplunkのサーチコマンドである、stats、chart、timechartは、覚えておくと非常に便利なコマンドです(特にstats)。Splunkのサーチコマンドを学び始めた頃は、各コマンドのメリットをよく理解できませんでした。特にBY句がサーチ出力にどのように影響するかがわかりませんでした。そこで、試行錯誤を繰り返して出力を比較し、ついにこれらのコマンドの違いを理解することができました。
これら3つのコマンドは 変換 コマンドです。変換コマンドは、イベントデータを受け取り整形された結果テーブルに変換します。この3つのコマンドでは、カウント、合計、平均などの統計を計算できます。
注:以下の例とSplunkドキュメントでは、読みやすさを考慮してキーワード「BY」をすべて大文字で表記しています。実際のサーチでBYキーワードを指定するときは、大文字と小文字のどちらでもかまいません。
statsコマンドの結果テーブル
まずは stats コマンドから見ていきましょう。HTTPステータスコードごとにイベント数をカウントします。
... | stats count BY status
[Statistics] (統計)タブにテーブルが表示され、各行にステータスコードごとのイベント数が示されます。
結果として出力されるテーブルでは基本的に、フィールド値(200、400、403、404)が行ラベルになります。
statsコマンドでは、BY句でフィールドを指定すると、そのフィールドに基づいて結果がグループ化されます。たとえば、www1、www2、www3の3つのホストからイベントを受け取る場合、BY句に host フィールドを追加すると、結果がさらに細かくグループ化されます。
... | stats count BY status, host
ステータスとホストの組み合わせごとに、テーブルの 各行 にイベント数が表示されます。
BY句で指定する各フィールドは、結果テーブルでは個別の列になります。この例では、行をまずステータスごとに分けてから、ホストごとに分けています。statsコマンドのBY句で指定するフィールドは、行分割フィールドと呼ばれます。
この例では、Webサイトでユーザーが、addtocart (カートに追加)、changequantity (数量を変更)、purchase (購入)、remove (削除)、view (表示)の5つのアクション(action)を実行できます。
サーチにアクションを追加してみましょう。
... | stats count BY status, host, action
今度は、行がまずステータスごと、次にホストごと、さらにアクションごとに分けられます。by句に action フィールドを追加したときの結果テーブルの一部を次に示します。
statsコマンドを使用する大きなメリットの1つは、BY句に複数のフィールドを指定して、詳細な統計を示す結果テーブルを作成できる点です。
chartコマンドの結果テーブル
同じ基本サーチで、chartコマンドの結果とstatsコマンドの結果を比べてみましょう。
BYフィールドを1つだけ指定したときは、statsコマンドと chart コマンドの結果は同じです。しかし、BYフィールドを2つ指定すると、chartコマンドの結果は明らかに異なります。
statsコマンドでBYフィールドを2つ指定した結果は次のようになりました。
では、statsコマンドの代わりにchartコマンドを使ってサーチを実行してみましょう。
... | chart count BY status, host
結果は次のようになります。
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軸になります。
このグラフには問題点がいくつかあります。
- X軸のステータスコード1つに対して複数の値がある。
- hostの値(www1、www2、www3)は文字列値であるためグラフ化できない。凡例にはhostと表示されているが、グラフの棒に青い部分がない。
このような問題により、グラフはわかりづらく、結果テーブルの情報が正確に反映されていません。
ただし、statsコマンドでも、BY句でフィールドを1つだけ指定した場合は、有効なグラフを作成できます。BY句のフィールドが複数ある場合は、chartコマンドでグラフを作成するのが効果的です。
statusフィールドがX軸になり、hostの値がデータシリーズになります。また、カウントの値の範囲がY軸になります。
timechartコマンドとは
timechartコマンドを使用すると、結果テーブルでは常にイベントがそのタイムスタンプ(_timeフィールド)によってグループ化されます。結果テーブルでは、タイムスタンプ値が行分割フィールドになります。そのため、BY句で指定できるのは1つの列分割フィールドのみです。たとえば次のサーチでは、statusフィールドを列分割フィールドとして指定してカウントを生成しています。
... | timechart count BY status
結果テーブルは次のようになります。
代わりにhostフィールドを指定すると、結果テーブルは次のようになります。
_time列のタイムスタンプの間隔は、サーチの時間範囲、またはtimechartコマンドで指定する引数によって決まります。前の例では、時間範囲はAll time (過去すべて)に設定され、この例では数週間分のデータが対象になっています。間隔は、spanを指定していないため、デフォルトの間隔が使用されます。この場合、デフォルトの間隔は1日です。
Last 24 hours (過去24時間)のような時間範囲を指定した場合、デフォルトの間隔は30分です。よく使われる時間範囲のデフォルトの間隔は、timechartのドキュメントの「Usage」セクションで確認できます。デフォルトの30分間隔の結果テーブルは次のようになります。
timechartコマンドには、statsコマンドやchartコマンドにはないさまざまなオプションがあります。たとえば、次のように間隔を指定できます。
... | timechart span=12h count BY host
この例では、サーチを実行した時刻(ロカール時刻)とUNIX時間(エポックタイムとも呼ばれます)との調整に基づいて、12時間間隔で結果が表示されます。
注:timechartコマンドで指定できるオプションはほかにもたくさんあります。これらについては別のブログでご紹介します。
次に、これらの結果のグラフを見てみましょう。[Visualization]タブでは、_timeがX軸になります。X軸では、各日の午後12時と午前12時の間隔で目盛りが刻まれます。ただし、この例ではデータが各日の17時から翌日5時の間に表示されます。
BY句で指定したフィールドがデータシリーズになります。また、カウントの値の範囲がY軸になります。
まとめ
stats、chart、timechartの各コマンドは似ていますが、BY句とともに使用するときは注意が必要です。
- 詳細な統計を示す結果テーブルを作成したいときは、statsコマンドを使用します。
- BY句に3つ以上のフィールドを指定したいときも、statsコマンドを使用します。
- 概要がわかる統合的な状況を示す結果テーブルを作成したいときは、chartコマンドを使用します。
- 結果テーブルのデータからグラフを作成したいときも、chartコマンドを使用します。
- 日時に基づく結果テーブルとグラフを作成したいときは、timechartコマンドを使用します。
SPLで目的を達成できることを願っています - Laura
参照資料
ブログ:
Splunkドキュメント:
- statsコマンド: https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Stats
- Chart command: https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Chart
- Timechart command : https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Timechart
関連記事

Splunk App for Behavioral Profilingのご紹介

サイバーセキュリティとウクライナ危機
