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
| makeresults count=100
| streamstats count as No
| eval value=random() % 100
| table No value
概要
| 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 さんのすてきな使い方をアレンジした。
| 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
| 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と同じ値がでる。
まとめの前の小ネタ
前の月の最終日
| makeresults
| eval last_month_day=strftime((strptime("2020-01-01","%F") - 1),"%F")
今月の1日から-1するだけ。
実際に使う場合はrelative_time()を使用してnow()から@monthで月頭にオフセット、そのあと-1するだけ。
まとめ
実際 Splunkで先月比のグラフをつくるでやろうとしたけど、あちらでやるほどじゃなかったので、別立てにしました。
streamstatsは表示されている順番が大事なので、そこに注意していけばいいと思います。
Splunk Answerの残りのクエリーについてはノーコメントで。