【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です。
本記事ではeventstatsコマンドの説明をしました。
ここまで読んでいただき、ありがとうございました。
Splunk頻出SPLシリーズ