Splunk: ルックアップについてのあれこれ

よく使用するのでメモ。

###### 実施環境： Splunk Free 8.2.2

###### ルックアップの概要

 Splunk には、ルックアップという機能が存在します。
ルックアップに登録した内容は単なるデータとしても使用できますが、一般的には「特定のキーから一意な値を抽出する」ために使用します。

といわれてもよくわからないので、1つ例をあげて見ます。
例えば、 EC サイトの購入履歴について以下のようなデータがあるとします。

| 日付 | ユーザID | 商品ID |
|-----:|-----:|-----:|
| 1/7  | u001 | A001 |

この商品 ID に対し、商品の価格や種別を一意に特定するデータが存在するとします。

| 商品ID | 商品価格 | 商品種別 |
|-----:|-----:|-----:|
| A001 | 3000 | B01 |

このデータをルックアップとして登録、参照することで、価格や種別のデータが付与できます。

| 日付 | ユーザID | 商品ID | 商品価格 | 商品種別 |
|-----:|-----:|-----:|-----:|-----:|
| 1/7  | u001 | A001 | 3000 | B01 |

ユーザ ID に対しても同様にすると、年齢や性別といったデータを付与できます。

| 日付 | ユーザID | 年齢 | 性別 | 商品ID | 商品価格 | 商品種別 |
|-----:|-----:|-----:|-----:|-----:|-----:|-----:|
| 1/7  | u001 | 20 | M | A001 | 3000 | B01 |

このデータを集計すれば、年齢ごとにどの種別の商品が売れているか、といった統計を取得することができます。

| 年齢 | 商品種別 |
|-----:|-----:|
| 20 | B01 |

###### ルックアップテーブルファイルの登録

試しに、以下のような CSV ファイルをルックアップテーブルファイルとして登録してみます。

![スクリーンショット 2022-01-25 20.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3a71afbc-2766-8ce7-610e-f328c43b2ada.png "test_lookup.csv")

まずは、「設定」→「ルックアップ」を選択します。

![スクリーンショット 2022-01-30 20.14.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/089190aa-cc3c-4fb3-fcfc-3a77a5c45831.png "lookup")

次に、「ルックアップテーブルファイル」を選択します。

![スクリーンショット 2022-01-30 20.15.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/dae3ca5d-e500-ef7e-5eaa-d609ed9b99b5.png "lookup_table_file")

ルックアップファイルテーブルの一覧が表示されるので、「新しいルックアップテーブルファイル」を選択します。

![スクリーンショット 2022-01-30 20.15.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/33dc9468-9d9f-84e2-215d-56a3a9b64f72.png "new_lookup_table_file")

ルックアップテーブルファイルの追加画面に移動するので、ルックアップテーブルファイルを使用する App 名(今回は search )と Splunk 上でのルックアップテーブルファイル名を指定し、 CSV ファイルをアップロードして「保存」を押します。

![スクリーンショット 2022-01-30 20.17.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/91324643-93a3-b70c-b10e-501f9522ddc4.png "create_lookup_table_file")

これで、 CSV ファイルをルックアップテーブルファイルとして登録できました。

![スクリーンショット 2022-01-30 20.17.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9c6547cc-8e0a-b0b2-01b5-e89db2a15003.png "check_lookup_table_file")

この時点で、アップロードしたルックアップテーブルファイルはルックアップとして使用できます。

###### ルックアップテーブルファイルを使用する

登録したルックアップテーブルファイルを実際に使用してみましょう。
ルックアップテーブルファイルをルックアップとして使用するには lookup コマンドを使用します。
引数は以下のように指定します。

 lookup <ルックアップテーブルファイル名> <項目名A1> AS <項目名B1>, <項目名A2> AS <項目名B2>, ... OUTPUT <項目名C1> AS <項目名D1>, <項目名C2> AS <項目名D2>, ...

各項目名は、

* 項目名A : キーとして使用する項目の、ルックアップテーブルファイル上でのフィールド名
* 項目名B : キーとして使用する項目の、現在のサーチ上でのフィールド名
* 項目名C : 抽出する項目の、ルックアップテーブルファイル上でのフィールド名
* 項目名D : 抽出する項目の、現在のサーチ上でのフィールド名

となります。
キーの値がルックアップテーブルファイル上に存在しない場合、抽出される値は NULL となります。

```Splunk:Splunk
| makeresults count=3
| streamstats count AS CNT
| eval TEST_ID = "A0" + CNT
| lookup "test_lookup.csv" ID AS TEST_ID OUTPUT VALUE AS TEST_VALUE
```

![スクリーンショット 2022-01-30 20.19.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3893a54c-3342-a6da-0ad2-f9e85196b33b.png "use_lookup_table_file")


###### ルックアップテーブルファイルをそのまま参照する

 inputlookup コマンドを使用すれば、ルックアップテーブルファイルのデータをそのまま参照できます。
ルックアップテーブルファイルを通常のデータとして使用する際などに便利です。

```Splunk:Splunk
| inputlookup "test_lookup.csv"
```

![スクリーンショット 2022-01-30 20.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/7816daeb-10a0-b37d-daa2-d3d743e3c0ae.png "inputlookup")


###### 自動的なルックアップの適用

登録したルックアップテーブルファイルをきちんとルックアップとして定義すると、ルックアップ適用を自動でさせることもできます。
適用の有無はログのソースタイプ名やホスト名を基準としますので、先の CSV ファイルとは別のファイルを使用して試してみましょう。

まずは、以下のような CSV ファイルを先ほどと同様、ルックアップテーブルファイルとして登録してみます。

![スクリーンショット 2022-01-30 20.31.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/081583fc-3081-d10f-4212-6fada0e58630.png "test_loglevel.csv")

先ほど「ルックアップテーブルファイル」を選択した画面で、今度は「ルックアップ定義」を選択します。

![スクリーンショット 2022-01-30 20.15.07 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/140f2dd6-a018-77d7-4867-d7f9f21a0c0b.png "lookup_define")

ルックアップ定義の一覧が開くので、「新しいルックアップ定義」を選択します。

![スクリーンショット 2022-01-30 20.21.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/50246458-ff8d-0f67-1711-1865612262dc.png "new_lookup")

ルックアップ定義の追加画面に移動するので、まずはルックアップを使用する App 名(今回は search )と Splunk 上でのルックアップ定義名を指定します。
今回はルックアップテーブルファイルを使用するので、タイプを「ファイルベース」にした後、対象のルックアップテーブルファイルを選択して「保存」を押します。

![スクリーンショット 2022-01-30 20.32.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ccf51b80-17d9-02b7-75dc-bdda544b4099.png "create_lookup")

これで、ルックアップを定義できました。

![スクリーンショット 2022-01-30 20.33.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bbf111a8-0dfc-592f-328c-e5011884e187.png "check_lookup")

さて、いよいよ自動適用の設定をしていきます。
またまた先ほどの画面に戻り、「自動ルックアップ」を選択します。

![スクリーンショット 2022-01-30 20.15.07 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/99687970-1f65-337c-57ca-68983bdda441.png "auto_lookup")

自動ルックアップの一覧が表示されるので、「新しい自動ルックアップ」を選択します。

![スクリーンショット 2022-01-30 20.22.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/12365ab9-9b94-6da2-008a-4b7dc23a52fd.png "new_auto_lookup")

自動ルックアップの追加画面に移動するので、まずはルックアップを使用する App 名(今回は search )と Splunk 上での自動ルックアップ名を指定します。
次に自動ルックアップを使用するログの条件を指定します。
今回は「ソースタイプがsplunkd」であるログを対象としました。
そして、先ほど作成したルックアップ定義を指定し、キーとなる項目を入力フィールドに、抽出する項目を出力フィールドに指定します。
=の前が「ルックアップ上でのフィールド名」、=の後ろが「ログ上でのフィールド名」となるように注意してください。
最後に「保存」を押して完了です。

![スクリーンショット 2022-01-30 20.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3c200ab9-f8e6-b2d2-4348-975c9624df31.png "create_auto_lookup")

これで、自動ルックアップを設定できました。

![スクリーンショット 2022-01-30 20.36.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/16734bac-82ee-8e28-5402-53937f828466.png "check_auto_lookup")

試しに以下の SPL を実行すると、ルックアップが自動的に適用されていることがわかります。

```Splunk:Splunk
index="_internal" sourcetype="splunkd"
| table log_level, log_level_num
```

![スクリーンショット 2022-01-30 20.37.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/0e8aaf35-31a8-863c-d1c6-9057859ae1f9.png "use_auto_lookup")

###### Lookup File Editor

以上のようにすればルックアップを登録できますが、もっと手軽にルックアップの作成をしたい場合もあるかと思います。
そのような時に便利な App として、 Lookup File Editor を紹介しておきます。

![スクリーンショット 2022-01-30 20.40.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d189ee35-5035-d556-308e-8a094327d5a8.png "App")

細かい説明は省きますが、この App を使用すると、以下のように GUI 上で CSV の作成・編集ができます。

![スクリーンショット 2022-02-06 17.08.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/63e654c5-dbc3-88c1-6252-b1a00c873608.png "Lookup File Editor")

なお、この App でのルックアップの登録は上記の「ルックアップテーブルファイルの登録」と同等の扱いとなります。