LoginSignup
0
0

More than 1 year has passed since last update.

Splunk: statsとchartの使い分け

Posted at

時々よくわからなくなるのでメモ。

実施環境: Splunk Free 8.2.2

Splunk の SPL コマンドには、 stats コマンドと chart コマンドという2つの統計コマンドが存在します。
この2つは与える式によっては同じような結果を出力するため、しばしばどのように使い分けるべきか迷うことがあります。
実際のところ、どのように使い分ければよいのでしょうか。

結論から言えば、「2つのグループで分割される統計値」なら chart コマンド、それ以外であれば stats コマンドが適当です。

実際に動作を確認してみましょう。

まずは、グループで分割しない場合。

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| stats avg(Number), max(Number), min(Number)

スクリーンショット 2021-09-26 20.17.22.png

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| chart avg(Number), max(Number), min(Number)

スクリーンショット 2021-09-26 20.17.35.png

グループで分割しない場合、 stats コマンドと chart コマンドは同様の結果を出力します。

次に、1つのグループで分割する場合。

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| stats avg(Number), max(Number), min(Number) BY Flag1

スクリーンショット 2021-09-26 20.18.20.png

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| chart avg(Number), max(Number), min(Number) BY Flag1

スクリーンショット 2021-09-26 21.07.41.png

1つのグループで分割する場合も、結果は同じです。

結果に違いが出てくるのは、グループが2つとなった場合です。

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| stats avg(Number), max(Number), min(Number) BY Flag1, Flag2

スクリーンショット 2021-09-26 20.19.19.png

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| chart avg(Number), max(Number), min(Number) BY Flag1, Flag2

スクリーンショット 2021-09-26 21.09.13.png

stats コマンドの場合はグループ1とグループ2がそれぞれ列に入れられ2つの列の組み合わせで分割されますが、 chart コマンドの場合はグループ1は列に、グループ2は行になり、行と列の組み合わせで値が配置されます。

なお、上記の例では統計値を3つ計算していますが、統計値は1つに絞ったほうが見やすいかと思います。

さらにグループが3つ以上となった場合、 chart コマンドは使用できなくなります。

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| stats avg(Number), max(Number), min(Number) BY Flag1, Flag2, Flag3

スクリーンショット 2021-09-26 20.20.27.png

Splunk
| makeresults count=100
| eval Number = random() % 100, Flag1 = random() % 2, Flag2 = random() % 2, Flag3 = random() % 2
| chart avg(Number), max(Number), min(Number) BY Flag1, Flag2, Flag3

スクリーンショット 2021-09-26 20.20.55.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0