Splunk 表を集計して変換する
結構大変だったので
課題
HOST | VALUE |
---|---|
Host1 | 1 |
Host2 | 4 |
Host3 | 2 |
Host2 | 7 |
Host3 | 5 |
Host1 | 8 |
を
HOST | VALUE | LATEST |
---|---|---|
Host1 | 1 | Host1-1 |
Host2 | 4 | Host1-1,Host2-4 |
Host3 | 2 | Host1-1, Host2-4, Host3-2 |
Host2 | 7 | Host1-1, Host2-7, Host3-2 |
Host3 | 5 | Host1-1, Host2-7, Host3-5 |
Host1 | 8 | Host1-8, Host2-7, Host3-5 |
にする。
ホスト毎最後の値を一覧にしたいとのこと。
Code
table.spl
| makeresults
| eval _raw="HOST VALUE
Host1 1
Host2 4
Host3 2
Host2 7
Host3 5
Host1 8"
| multikv forceheader=1
| table HOST VALUE
| rename COMMENT as "this is your sample. from here, the logic"
| reverse
| streamstats count
| reverse
| eval tmp=count."_".HOST."_".VALUE
| streamstats values(tmp) as tmp
| streamstats count as session
| mvexpand tmp
| rex field=tmp "\d_(?<HOST>\w+)_(?<VALUE>\d)"
| streamstats first(VALUE) as VALUE by session HOST
| eval tmp2=HOST."-".VALUE
| streamstats first(HOST) as HOST first(VALUE) as VALUE values(tmp2) as LATEST by session
| stats values(LATEST) as LATEST by session HOST VALUE delim=","
| fields - session
| nomv LATEST
解説
-
latest()
を自動的にするためにreverse
してstreamstats count
で番号をつけてあげると、後ろに出てくる値が小さな数になってくれるので、reverse
で戻すと後に出てきた値が上になってくれる。
-
stresmstats values()
で値をまとめたものを作ってあげて、mvexpand
で分割する。
-
rex
でまとめた値からmvexpand
で広がった値を上書き。
- また
streamstats first()
で元の表の値を作成。
- 後は
stats
で元の表をsessionを元に作成し、nomv
で一列にしてあげている。
まとめ
table.spl
| makeresults
| eval _raw="HOST VALUE
Host1 1
Host2 4
Host3 2
Host2 7
Host3 5
Host1 8"
| multikv forceheader=1
| table HOST VALUE
| rename COMMENT as "this is your sample. from here, the logic"
| reverse
| streamstats count
| reverse
| eval tmp=count."_".HOST."_".VALUE
| streamstats values(tmp) as tmp
| streamstats count as session
| mvexpand tmp
| rex field=tmp "\d_(?<HOST>\w+)_(?<VALUE>\d)"
| streamstats first(VALUE) as VALUE by session HOST
| eval tmp2=HOST."-".VALUE
| streamstats first(HOST) as HOST first(VALUE) as VALUE values(tmp2) as LATEST by session
| stats values(LATEST) as LATEST by session HOST VALUE delim=","
| fields - session
| nomv LATEST
-
latest()
を自動的にするためにreverse
してstreamstats count
で番号をつけてあげると、後ろに出てくる値が小さな数になってくれるので、reverse
で戻すと後に出てきた値が上になってくれる。 -
stresmstats values()
で値をまとめたものを作ってあげて、mvexpand
で分割する。 -
rex
でまとめた値からmvexpand
で広がった値を上書き。 - また
streamstats first()
で元の表の値を作成。 - 後は
stats
で元の表をsessionを元に作成し、nomv
で一列にしてあげている。
まとめ
マルチバリューの整列をする時、できることが少ないのでこれだけの手数が必要になりますね。
なんに使うんでしょうね、この表
Author And Source
この問題について(Splunk 表を集計して変換する), 我々は、より多くの情報をここで見つけました https://qiita.com/toshikawa/items/8606a96158f4b150f9d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .