実施環境: Splunk Free 8.2.2
0. 概要
Splunk のルックアップ処理で複数行がヒットした場合、デフォルトの設定ではヒットしたすべての行が抽出されます。
ただ、実務上は1行だけ抽出したい場合も多いです。
そのような場合、ルックアップ定義の設定を変更すると実現可能です。
1. デフォルト設定
以下のような CSV 「 test_hit.csv 」をルックアップテーブルとして登録し、それを「 test_hit 」としてルックアップ定義にします。
ID | NAME |
---|---|
A01 | BBB |
A01 | AAA |
A01 | CCC |
この場合、以下のようにマルチバリューという形式ですべてのヒット行が抽出されます。
| makeresults count=1
| eval ID = "A01"
| lookup test_hit ID OUTPUT NAME
マルチバリュー自体は mvexpand コマンドを使用することで別々の行に分割可能です。
| makeresults count=1
| eval ID = "A01"
| lookup test_hit ID OUTPUT NAME
| mvexpand NAME
2. join を使用する方法
ただ、この複数ヒットの場合に、全行でなく1行だけ抽出したい場合もあります。
一応、以下のように join コマンドを使用して1行だけ抽出を実現することも可能ですが、性能的にはあまりよい方法ではありません。
| makeresults count=1
| eval ID = "A01"
| join ID
[
| inputlookup test_hit.csv
]
では、どうすればよいでしょうか。
3. ルックアップ定義の設定を変更する方法
実は、ルックアップ定義の設定を変更するだけで1行だけ抽出を実現することが可能です。
まず、ルックアップ定義の設定画面で「詳細オプション」にチェックを入れます。
すると複数の追加設定が表示されますが、ここで「最大一致数」という項目に「1」を指定します。
これだけです。
これだけで、最初の SPL の結果が以下の通り1行だけ抽出になります。
なお、抽出される1行はルックアップテーブルの中で最も上の行になります。
そのため、抽出される1行に規則性を持たせたい場合はルックアップテーブル作成の時点でデータを並び替えておく必要があることに注意しましょう。