Splunk のサーチ文、lookup のテーブルにDBを使う

ログをため込むプラットフォーム Splunk では、検索のサーチ文 SPL というものがある。

ログ検索時、ログ情報にその他情報を補足したいとき、lookup を使用する。

例えば…、WEBアクセスログにはユーザ識別の材料としてユーザIDだけが存在してる。だがアクセスログ集計を部門別に集計したい。ログ情報に部門情報を付加したい。

こんなとき lookup を使用する。

静的な lookup テーブルを使う

CSV を Lookup 用テーブルとして登録しておけば良い。

今回 lookup 用テーブルを employee として、キー項目はユーザIDのフィールド UserID 、出力する値は部門名 Dept としよう。

部門別にアクセス数カウントするサーチ文はこうだ。

sourcetype=example_log 
| lookup employee UserID OUTPUT Dept
| timechart span=1h count BY Dept

一度きりならこれでいいが、人事異動があるたびにCSVを読み込んで lookup 用テーブルを更新するなんて面倒くさい。常に更新されているDBを参照して欲しい。そんなときは dbxlookup を使えばよい。

動的な lookup テーブルを使う

dbxlookup を使えば RDB のテーブルから取ってきた値で lookup できる。

RDBへの接続は事前に準備しておく必要がある。

docs.splunk.comRDB への接続を master-mysql という名称で定義したとしよう。

先ほどのサーチ文の lookup テーブル部分を dbxlookup に置き換えると

sourcetype=example_log 
| dbxlookup connection="master-mysql" query="SELECT UserId,Username,Dept FROM employee" UserId 
| timechart span=1h count BY Dept

こんな感じになる。SQL の SELECT で返ってきたテーブルを lookup 用に使えるのだ。便利すぎる。

dbxlookup のオプションなどは Document を参照。

docs.splunk.com