ログをため込むプラットフォーム 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 を参照。