LoginSignup
1
2

Splunk: マルチバリューと通常の値を変換するコマンド、関数まとめ

Posted at
実施環境: Splunk Free 8.2.2

0. 概要

Splunk には、マルチバリューという概念があります。
マルチバリューとは、1つのデータの1つの項目について、複数の値を持つことです。
「複数の値を合成した単一の値」ではなく、あくまで「それぞれ別々である複数の値」であるため、検索や集計において少々変わった動きを見せることがあります。

WS000346.JPG

今回はこのマルチバリューについて、通常の値とマルチバリューの変換に使用する代表的なコマンド、関数をまとめて紹介します。

1. 単一の値 ⇒ マルチバリュー

1.1. makemv

makemv コマンドは、単一の文字列を区切り文字で分割してマルチバリューに変換するコマンドです。
区切り文字はパラメータで指定できます。
文法は以下の通りです。

makemv delim="<区切り文字>" <変換するフィールド>

Splunk
| makeresults count=1
| eval TEST = "1,2,3,4,5"
| makemv delim="," TEST

WS000276.JPG

WS000386.JPG

1.2. split

split 関数は、単一の文字列を区切り文字で分割してマルチバリューに変換する関数です。
区切り文字はパラメータで指定できます。
文法は以下の通りです。

split(<変換するフィールド>, "<区切り文字>")

Splunk
| makeresults count=1
| eval TEST = "1,2,3,4,5"
| eval TEST_SPLIT = split(TEST, ",")

WS000286.JPG

WS000385.JPG

2. 複数のデータにまたがる値 ⇒ マルチバリュー

2.1. mvcombine

mvcombine コマンドは、複数のデータにまたがる値を結合してマルチバリューに変換するコマンドです。
指定したフィールド以外のフィールドを適宜グループ化した上で、指定したフィールドの値をグループごとに結合してマルチバリューに変換します。
文法は以下の通りです。

mvcombine <変換するフィールド>

Splunk
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT

WS000277.JPG

WS000381.JPG

3. 複数のフィールドまたは固定の値 ⇒ マルチバリュー

3.1. mvappend

mvappend 関数は、複数のフィールドや固定の値を結合してマルチバリューに変換する関数です。
マルチバリューを結合に含めることも可能です。
文法は以下の通りです。

mvappend(<値1>,<値2>,...)

Splunk
| makeresults count=1
| eval TEST = mvappend("1","2","3")
| eval TEST = mvappend(TEST,"4","5")

WS000283.JPG

4. マルチバリュー ⇒ 単一の値

4.1. nomv

nomv コマンドは、マルチバリューを単一の文字列に変換するコマンドです。
区切り文字は\nです。
文法は以下の通りです。

nomv <変換するフィールド>

Splunk
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT
| nomv CNT

WS000280.JPG

WS000383.JPG

なお、きわめて特殊なパターンではありますが、 mvcombine コマンドの直後に nomv コマンドをつなげた場合に限っては、「 mvcombine コマンドの」 delim パラメータに区切り文字を指定することにより\n以外の区切り文字を nomv コマンドで用いることが可能です。

Splunk
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine delim="," CNT
| nomv CNT

WS000282.JPG

4.2. mvjoin

mvjoin 関数は、マルチバリューを単一の文字列に変換する関数です。
区切り文字はパラメータで指定できます。
文法は以下の通りです。

mvjoin(<変換するフィールド>, "<区切り文字>")

Splunk
| makeresults count=1
| eval TEST = mvappend("1","2","3")
| eval TEST = mvappend(TEST,"4","5")
| eval TEST_JOIN = mvjoin(TEST, ",")

WS000284.JPG

WS000384.JPG

5. マルチバリュー ⇒ 複数のデータにまたがる値

5.1. mvexpand

mvexpand コマンドは、マルチバリューを複数のデータにまたがって分割するコマンドです。
指定したフィールド以外のフィールドは、分割後のデータにそれぞれ値がコピーされる形となります。
文法は以下の通りです。

mvexpand <変換するフィールド>

Splunk
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT
| mvexpand CNT

WS000278.JPG

WS000382.JPG

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