時々微妙に迷うのでメモ。
実施環境: Splunk Free 8.2.2
Splunkには eval と stats という2つのコマンドがあり、 eval は[評価関数(Evaluation functions)] (https://docs.splunk.com/Documentation/Splunk/8.2.2/SearchReference/CommonEvalFunctions)、 stats は[統計関数(Statistical and charting functions)] (https://docs.splunk.com/Documentation/Splunk/8.2.2/SearchReference/CommonStatsFunctions)を使用することができます。
この2つは全く別物ではありますが、一見似たような処理を行う関数も多いため、どちらを使用すればよいか迷うこともあります。
さて、ではどのように使い分けるべきか。
結論から言いますと、「横に処理(単一のイベント内に閉じて処理)」する場合は eval 、「縦に処理(複数のイベントにまたがって処理)」する場合は stats を使用します。
以下のダミーデータを例にしてみます。
| makeresults count=3
| streamstats count AS Test1
| eval Test2 = Test1 + 3, Test3 = Test1 + 6
| fields - _time, Test
stats を使用した場合、処理は「縦に」行われ、結果のみが表示されます。
| makeresults count=3
| streamstats count AS Test1
| eval Test2 = Test1 + 3, Test3 = Test1 + 6
| fields - _time, Test
| stats sum(Test1), sum(Test2), sum(Test3)
eval を使用した場合、処理は「横に」行われ、結果は既存項目に追加する形で表示されます。
| makeresults count=3
| streamstats count AS Test1
| eval Test2 = Test1 + 3, Test3 = Test1 + 6
| fields - _time, Test
| eval TestSum = sum(Test1, Test2, Test3)