はじめてのSplunk ― 概要から応用までを体系的に学ぶ

4-4 フィールド抽出と管理

1. 検索時のフィールド抽出とは

Splunkの大きな特徴のひとつが、検索時(search-time)にフィールドを抽出するという仕組みです。 データを取り込む段階であらかじめ項目を決めておくのではなく、 サーチを実行するそのときに、生ログから必要なフィールドを切り出します。 この考え方はスキーマ・オン・ザ・フライ(schema-on-the-fly)と呼ばれます。

おかげで元のデータはそのまま保持され、あとから「やっぱりこの項目も欲しい」と思ったときも、 取り込み直すことなく新しいフィールドを定義できます。

key=value形式のログやJSONなどは、Splunkが自動でフィールドを抽出します。 自分で抽出設定が必要になるのは、独自形式のログなど自動では取り出せない値を扱うときです。

2. フィールド抽出ツール(IFX)で対話的に抽出する

自動抽出されない値を取り出す最も手軽な方法が、GUIの フィールド抽出ツール(Field Extractor, IFX)を使った対話的な抽出です。

イベント一覧から対象のログを選び、抽出したい部分をマウスで選択していくと、 Splunkが裏側で正規表現を自動生成してくれます。 正規表現に不慣れでも、サンプルを選ぶだけで抽出ルールを作れるのが利点です。

抽出方法には、区切り文字で切り出すDelimiters(区切り文字)方式と、 より柔軟なRegular Expression(正規表現)方式があります。 カンマ区切りやタブ区切りのログなら前者、複雑な形式なら後者が向いています。

3. 正規表現で抽出する

正規表現を使えば、より細かい制御でフィールドを抽出できます。 方法は大きく2つあります。

まず、その場かぎりでフィールドを取り出すアドホック抽出にはrexコマンドを使います。 名前付きキャプチャ(?<フィールド名>...)で切り出した部分がそのままフィールドになります。

SPL ― rexでアドホック抽出
index=web | rex field=_raw "user=(?<username>\w+)"

この例は_raw(生ログ)からuser=に続く英数字をusernameという新しいフィールドとして抽出します。 rexはサーチのたびに評価されるため、試行錯誤や一時的な抽出に便利です。

一方、同じ抽出を毎回自動で適用したい場合は、 設定ファイルprops.conftransforms.confに定義して恒久的な抽出にします。 GUIのフィールド抽出ツールで保存した抽出も、最終的にはこれらの設定として記録されます。

方法 用途 適用範囲
rexコマンド その場かぎりのアドホック抽出 そのサーチ内だけ
フィールド抽出ツール(IFX) GUIで作る恒久的な抽出 ソースタイプ単位
props.conf/transforms.conf 設定ファイルによる恒久的な抽出 ソースタイプ単位

4. 抽出したフィールドの権限管理

恒久的に定義したフィールド抽出には、レポートなどと同じく権限(Permissions)があります。 作成直後は自分だけが使える状態になっていることが多く、 チームで使うには共有範囲を広げる必要があります。

共有範囲 意味
Private 作成した本人だけが利用できる
App そのアプリを使う人全員で共有する
All Apps (Global) すべてのアプリから利用できる

抽出定義はソースタイプ単位で効くため、共有範囲を広げると同じデータを見る全員のサーチ結果に影響します。命名や適用範囲は慎重に決めましょう。

5. まとめ

  • Splunkは検索時にフィールドを抽出する(スキーマ・オン・ザ・フライ)
  • 自動抽出されない値は、フィールド抽出ツール(IFX)で対話的に取り出せる
  • rexはアドホック抽出、props.conf/transforms.confは恒久的な抽出に使う
  • 抽出定義もPrivate/App/Globalの権限で共有範囲を管理する