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コマンドを使います。
名前付きキャプチャ(?<フィールド名>...)で切り出した部分がそのままフィールドになります。
index=web | rex field=_raw "user=(?<username>\w+)"
この例は_raw(生ログ)からuser=に続く英数字をusernameという新しいフィールドとして抽出します。
rexはサーチのたびに評価されるため、試行錯誤や一時的な抽出に便利です。
一方、同じ抽出を毎回自動で適用したい場合は、
設定ファイルprops.confとtransforms.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の権限で共有範囲を管理する