【Splunk】eventstatsはフィールドに統計情報を追加する

eventstatsコマンドの説明を書きます。
以下の記事の派生記事です。
canada-lemon.hatenablog.com

eventstatsはstatsのように統計処理を行い、evalのように新しいフィールドを定義するコマンドです。

構文例
| eventstats (統計処理) by <集計単位のフィールド名>

使用例1:生徒の点数が平均より高いか判定する

eventstatsを使って生徒の点数と平均点を比較してみます。

以下のSPLを実行してダミーデータを用意します。
4人の生徒の英数国の点数です。
makeresultsってなんぞや?という方は以下の記事をご参照ください。
canada-lemon.hatenablog.com

| makeresults format=csv 
data="Class,Name,English,Math,Japanese
2年1組,Alfred,90,60,70
2年1組,Gascoigne,80,80,80
2年2組,Gehrman,60,100,50
2年2組,Ludwig,70,70,90"
| table Class Name English Math Japanese
Class Name English Math Japanese
2年1組 Alfred 90 60 70
2年1組 Gascoigne 80 80 80
2年2組 Gehrman 60 100 50
2年2組 Ludwig 70 70 90



平均の計算といえばstatsコマンドですが、このコマンドを使うと集計元のデータが参照できなくなります。
今回の例でいうと、statsで平均点を計算したら、個々の生徒の点数が参照できず、比較できなくなります。

そこで、eventstatsを使います。
eventstatsはstatsと同じように統計処理を行い、その処理結果を新しいフィールドとして既存のデータに追加します。
今回の例でいうと、英語の平均点を計算し、個々の生徒のレコードに新しい行として追加します。

実際にやってみます。

| makeresults format=csv 
data="Class,Name,English,Math,Japanese
2年1組,Alfred,90,60,70
2年1組,Gascoigne,80,80,80
2年2組,Gehrman,60,100,50
2年2組,Ludwig,70,70,90"
| table Class Name English Math Japanese
| eventstats avg(English)
| table Class Name English avg(English)
| rename avg(English) as "英語の平均点"
Class Name English 英語の平均点
2年1組 Alfred 90 75
2年1組 Gascoigne 80 75
2年2組 Gehrman 60 75
2年2組 Ludwig 70 75

生徒の点数のレコードに、平均点の列が追加されました。

更に、evalのif関数を使って、生徒の点数が平均より高いか低いかを判定します。

| makeresults format=csv 
data="Class,Name,English,Math,Japanese
2年1組,Alfred,90,60,70
2年1組,Gascoigne,80,80,80
2年2組,Gehrman,60,100,50
2年2組,Ludwig,70,70,90"
| table Class Name English Math Japanese
| eventstats avg(English) as eng_avg
| eval judge = if(English >= eng_avg,"Good","Bad")
| table Class Name English eng_avg judge
| rename eng_avg as "英語の平均点" judge as "判定"
Class Name English 英語の平均点 判定
2年1組 Alfred 90 75 Good
2年1組 Gascoigne 80 75 Good
2年2組 Gehrman 60 75 Bad
2年2組 Ludwig 70 75 Bad

このように、生徒の点数が平均と比べて高いか低いかを計算できました。

備考1:statsとeventstatsの使い分けは?

元のデータを保持する必要があるならeventstats、必要がないならstatsを使います。
今回の例でいうと、平均点を計算するだけでいいならstats、平均点を計算した上で元のデータと比較するならeventstatsを使います。

こちらの公式ドキュメントもご参照ください。

Splunkコマンドや条件ではそれぞれ、ユーザーがテーブルを割り当てるコマンドを発行しなくても中間テーブルが生成されます。bytesのような元のフィールドを追加したい場合や、元のフィールドに追加の計算を行いたい場合は、それらをstatsコマンドの前に置かなければなりません。そのため、サーチコマンド文字列の末尾にbytesフィールドを追加すると、上のスクリーンショットのような結果になってしまいます。ここで登場するのがeventstatsです。

www.splunk.com

本記事ではeventstatsコマンドの説明をしました。
ここまで読んでいただき、ありがとうございました。

Splunk頻出SPLシリーズ