Splunk: テスト用データを用意せずにダミーイベントを作りたい


Splunk のサーチコマンドの動作確認で時々使うのでメモ。

実施環境: Splunk Free 8.2.2

Splunk のサーチコマンドの動作確認を行う際に、テスト用のデータを用意せずサーチ内だけでさくっとダミーイベントを作成したい時があります。
そのような時は、 makeresults コマンドを使用します。

Splunk
| makeresults

上記を実行すると、コマンドを実行したサーバ日時を値に持つ _time フィールドのみのイベントが1つだけ生成されます。

複数のイベントを生成したい場合は、 count オプションに作成したいイベント数を指定します。

Splunk
| makeresults count=5

複数作成しても、 _time フィールドの値は全て同じです。
現在時刻を起点として一定間隔のデータを作成したい場合は、 streamstats コマンドを利用して生成した数列を _time に加算 / 減算することで作成できます。

Splunk
| makeresults count=5 
| streamstats count AS Serial
| eval _time = _time - Serial * 60 * 5 
| fields - Serial

起点時刻を指定したい場合は、 eval コマンドの strptime 関数を使用します。

Splunk
| makeresults count=5 
| streamstats count AS Serial
| eval Date = strptime("2021-09-20 12:30:45", "%Y-%m-%d %H:%M:%S")
| eval _time = Date + ( Serial - 1 ) * 60 * 60 * 24 
| fields - Serial, Date

_time 以外のフィールドを追加する場合は、 eval コマンドを使用します。

Splunk
| makeresults count=5 
| eval Field = "test"

ランダムな値が必要な場合は、 eval コマンドの random 関数を使用します。
なお、 random 関数は「0から2の31乗-1の間の任意の整数を返す」関数の為、数値の範囲を指定したい場合は%で割り算の余りを取ります。

Splunk
| makeresults count=5 
| eval Number = random() % 100
| fields - _time

文字列等数値以外の値にしたい場合は、 if 関数や case 関数を併用もできます。

Splunk
| makeresults count=5 
| eval Judge = if( random() % 2 > 0, "OK", "NG")
| fields - _time

Splunk
| makeresults count=5 
| eval Rand = random() % 3
| eval Judge = case( Rand == 0, "Red", Rand == 1, "Yellow", Rand == 2, "Green")
| fields - _time, Rand