実施環境: Splunk Free 8.2.2
0. 概要
Splunk には、マルチバリューという概念があります。
マルチバリューとは、1つのデータの1つの項目について、複数の値を持つことです。
「複数の値を合成した単一の値」ではなく、あくまで「それぞれ別々である複数の値」であるため、検索や集計において少々変わった動きを見せることがあります。
今回はこのマルチバリューについて、通常の値とマルチバリューの変換に使用する代表的なコマンド、関数をまとめて紹介します。
1. 単一の値 ⇒ マルチバリュー
1.1. makemv
makemv コマンドは、単一の文字列を区切り文字で分割してマルチバリューに変換するコマンドです。
区切り文字はパラメータで指定できます。
文法は以下の通りです。
makemv delim="<区切り文字>" <変換するフィールド>
| makeresults count=1
| eval TEST = "1,2,3,4,5"
| makemv delim="," TEST
1.2. split
split 関数は、単一の文字列を区切り文字で分割してマルチバリューに変換する関数です。
区切り文字はパラメータで指定できます。
文法は以下の通りです。
split(<変換するフィールド>, "<区切り文字>")
| makeresults count=1
| eval TEST = "1,2,3,4,5"
| eval TEST_SPLIT = split(TEST, ",")
2. 複数のデータにまたがる値 ⇒ マルチバリュー
2.1. mvcombine
mvcombine コマンドは、複数のデータにまたがる値を結合してマルチバリューに変換するコマンドです。
指定したフィールド以外のフィールドを適宜グループ化した上で、指定したフィールドの値をグループごとに結合してマルチバリューに変換します。
文法は以下の通りです。
mvcombine <変換するフィールド>
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT
3. 複数のフィールドまたは固定の値 ⇒ マルチバリュー
3.1. mvappend
mvappend 関数は、複数のフィールドや固定の値を結合してマルチバリューに変換する関数です。
マルチバリューを結合に含めることも可能です。
文法は以下の通りです。
mvappend(<値1>,<値2>,...)
| makeresults count=1
| eval TEST = mvappend("1","2","3")
| eval TEST = mvappend(TEST,"4","5")
4. マルチバリュー ⇒ 単一の値
4.1. nomv
nomv コマンドは、マルチバリューを単一の文字列に変換するコマンドです。
区切り文字は\n
です。
文法は以下の通りです。
nomv <変換するフィールド>
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT
| nomv CNT
なお、きわめて特殊なパターンではありますが、 mvcombine コマンドの直後に nomv コマンドをつなげた場合に限っては、「 mvcombine コマンドの」 delim パラメータに区切り文字を指定することにより\n
以外の区切り文字を nomv コマンドで用いることが可能です。
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine delim="," CNT
| nomv CNT
4.2. mvjoin
mvjoin 関数は、マルチバリューを単一の文字列に変換する関数です。
区切り文字はパラメータで指定できます。
文法は以下の通りです。
mvjoin(<変換するフィールド>, "<区切り文字>")
| makeresults count=1
| eval TEST = mvappend("1","2","3")
| eval TEST = mvappend(TEST,"4","5")
| eval TEST_JOIN = mvjoin(TEST, ",")
5. マルチバリュー ⇒ 複数のデータにまたがる値
5.1. mvexpand
mvexpand コマンドは、マルチバリューを複数のデータにまたがって分割するコマンドです。
指定したフィールド以外のフィールドは、分割後のデータにそれぞれ値がコピーされる形となります。
文法は以下の通りです。
mvexpand <変換するフィールド>
| makeresults count=5
| streamstats count AS CNT
| eval TEST = CNT % 2
| mvcombine CNT
| mvexpand CNT