LoginSignup
1
0

More than 3 years have passed since last update.

Splunkで以前の数値と比較したい

Posted at

splunk>answersでいろいろやったので、まとめます。

前提

No value prev5
1 10
2 20
3 30
4 40
5 50
6 120 150
7 20 210
~
100 20 140

こんな感じで過去5回分を足したものを比較するための表を作成する。

data

sample.spl
| makeresults count=100
| streamstats count as No
| eval value=random() % 100
| table No value

概要

detail.spl
| makeresults count=100
| streamstats count as No
| eval value=random() % 100
| fieldsummary 
| search field=value
| spath input=values
| rename {}.* as v*
| eval field_vlues = mvzip(vvalue,vcount,": ")
| fields - v*
| table field *

random()で作成しているので実行するごとに数値が違う。

streamstats

@hyugma さんのすてきな使い方をアレンジした。

streamstats.spl
| makeresults count=100 
| streamstats count as No 
| eval value=random() % 100 
| table No value
| streamstats current=f window=5 list(value) as list_value 
| eval list_value5=if(mvcount(list_value)=5,list_value,0) 
| streamstats window=1 sum(list_value5) as list_value5

streamstatsはいろいろ使えるけど、window=1でその行のフィールドを扱うのはこれで初めて知った。縦横変換しなくてもいい。

trendline

trendline.spl
| makeresults count=100 
| streamstats count as No 
| eval value=random() % 100 
| table No value 
| autoregress value as a_value 
| trendline sma5(a_value) as value_last5 
| eval value_last5=value_last5*5

sma5()がポイント、これはstreamstats current=fと違って、自分の値も入るので、autoregressで直前の値を持ってきている。
単純移動平均なので今回だと、×5している。
これでstreamstatsと同じ値がでる。

まとめの前の小ネタ

前の月の最終日

last_month_day.spl
| makeresults 
| eval last_month_day=strftime((strptime("2020-01-01","%F") - 1),"%F")

今月の1日から-1するだけ。
実際に使う場合はrelative_time()を使用してnow()から@monthで月頭にオフセット、そのあと-1するだけ。

まとめ

実際 Splunkで先月比のグラフをつくるでやろうとしたけど、あちらでやるほどじゃなかったので、別立てにしました。

streamstatsは表示されている順番が大事なので、そこに注意していけばいいと思います。
:sweat:Splunk Answerの残りのクエリーについてはノーコメントで。

1
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
1
0