eventstatsとstreamstatsの使い分けについて
- Splunkを使い始めてすぐにつまずきやすい、違いがわかりにくいSPLの代表。eventstatsとstreamstats。
- Proxyログを対象にしてeventstatsとstreamstatsをそれぞれ使ってSPLイメージの違いを理解してみましょう。
streamstats
利用例: ProxyログのWebアクセス件数をカウントし、12時間間隔で変動する動的閾値を設けて、閾値を超える回数のアクセスを外れ値として検知する
SPL(timechartとstreamstats組み合わせ)
sourcetype="intersafe_http"
|timechart count span=1h
|streamstats window=12 avg(count) as avg stdev(count) as stdev
|eval upper_bound = avg + 2*stdev
|fields - avg - stdev
|eval outlier = if(count > upper_bound, 1, 0)

eventstats
利用例:ProxyログのWebアクセス件数をカウントし、検索期間全体の固定閾値を設けて、閾値を超える回数のアクセスを外れ値として検知する
SPL(timechartとeventstat組み合わせ)
sourcetype="intersafe_http"
|timechart count span=1h
|eventstats avg(count) as avg stdev(count) as stdev
|eval upper_bound = avg + 2*stdev
|fields - avg - stdev
|eval outlier = if(count > upper_bound, 1, 0)

eventstatsはtimechart(時系列グラフの可視化)との組み合わせ利用よりも、以下のように、「全体統計量に対する異常な乖離を探す」使い方のほうが一般的かもしれません。
SPL(statsとeventstat組み合わせ)
sourcetype="intersafe_http"
|eventstats avg(sum_bytes) as avg stdev(sum_bytes) as stdev
|stats sum(bytes) as sum_bytes by dest
| eval threshold = avg + 2*stdev
利用例:Proxyログのbytes_inをdest毎に合算し、全体の標準偏差から2σ以上のdestを外れ値として検知する
ポイント
- 閾値を動的に変えていきながら外れ値を見たい⇢⇢streamstats
- 例:認証回数やネットワークのトラフィックボリュームなど1日の周期の中で上限値/下限値が変動するものに向いている
- 1日また1週間ごとの期間全体の平均や標準偏差を求め、そこから乖離する送信元や宛先をあぶり出す⇢⇢eventstats
- 例: 宛先サイト別のデータ転送量を見て、全体平均より大きく外れたボリュームの宛先をあぶり出す