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