【Splunk】lookupはExcelのルックアップみたいなことをしてくれる

lookupコマンドの説明を書きます。
以下の記事の派生記事です。
canada-lemon.hatenablog.com

lookupはExcelのルックアップと同じようなことをやってくれるコマンドです。

構文例
| lookup (ルックアップ名) <元データで基準にするフィールド> OUTPUT <追加するフィールド>

使用例1:HTTPステータスコードのメッセージを参照する

今まで紹介したコマンドとは異なり、lookupコマンドを使うには前準備としてルックアップ定義を作成する必要があります。

1.ルックアップ用のファイルを作成する
2.ファイルをSplunkにアップロードする
3.ルックアップ定義を作成し、ルックアップ用のファイルと関連付ける

1.ルックアップ用のファイルを作成する

以下のcsvファイルを用意します。
これは、HTTPステータスコードとそのメッセージ内容の対応表です。

status,message
200,OK
403,Forbidden
505,HTTP Version Not Supported

2.ファイルをSplunkにアップロードする

設定>ルックアップ>ルックアップテーブルファイルから新規追加を選びます
宛先Appはそのまま、ファイルを選択から先ほど作成したファイルをアップロードします。
宛先ファイル名は、今回はHTTPstatus.csvとします。

3.ルックアップ定義を作成し、ルックアップ用のファイルと関連付ける

設定>ルックアップ>ルックアップ定義から新規追加を選びます
宛先Appはそのままで、名前はHTTPstatusとします。
タイプはファイルベースで、ルックアップファイルには先ほどのHTTPstatus.csvを選び、保存します。

ここまでが前準備です。
作成したルックアップ定義を使ってみましょう。

以下のSPLを実行してダミーデータを用意します。
makeresultsってなんぞや?という方は以下の記事をご参照ください。
canada-lemon.hatenablog.com

| makeresults format=csv 
data="status,count
200,100
401,50
403,20
504,70
505,10"
| table status count

HTTPのステータスコードと、その件数を想定しています。

status count
200 100
401 50
403 20
504 70
505 10

このままだと、ステータスコードに詳しくない人は、それぞれの数字が何を意味しているのかわかりません。
そこで、ルックアップコマンドを使います。
前準備で作成したルックアップファイルでは、ステータス200,403,505の説明が記載されていたはずです。

| makeresults format=csv 
data="status,count
200,100
401,50
403,20
504,70
505,10"
| table status count
| lookup HTTPstatus status OUTPUT message
| table status message count
status message count
200 OK 100
401 50
403 Forbidden 20
504 70
505 HTTP Version Not Supported 10

このように、ステータス200,403,505の説明が追加されました。

備考1:ルックアップ定義に漏れはないように

ルックアップ定義に漏れがあると空欄が発生します。
今回だと、ステータス401,504はルックアップファイルに記載がないため、message列が空欄になっています。

単にtableコマンドを使った場合は空欄であることがわかりますが、statsなどの統計コマンドを使うとどうなるでしょうか。

| makeresults format=csv 
data="status,count
200,100
401,50
403,20
504,70
505,10"
| table status count
| lookup HTTPstatus status OUTPUT message
| stats max(count) by status,message
status message max(count)
200 OK 100
403 Forbidden 20
505 HTTP Version Not Supported 10

statsの集計フィールドにmessageを使った結果、message列が空欄だったステータス401,504のデータが消えてしまいました。
今回のSPLは短いのでわかりやすいですが、長くて複雑なSPLになると、ルックアップ定義に漏れがあることで、気付かない間にデータがロストしてしまう可能性があります。
ルックアップ定義を作るときは要注意です。

本記事ではlookupコマンドの説明をしました。
ここまで読んでいただき、ありがとうございました。

Splunk頻出SPLシリーズ