1. フィールドとは
フィールドとは、サーチのときに条件として指定できるKey-Valueペアの情報です。
action=viewであれば、actionがフィールド名、viewがフィールド値になります。
フィールド名は大文字・小文字を区別します(case-sensitive)。
Splunkは、actionとActionをそれぞれ別のフィールド名として認識します。
従って次の二つのサーチ結果は一致しません。
index=main action=view
index=main Action=view
一方、フィールド値は大文字・小文字を区別しません(case-insensitive)。 従って次の三つはいずれも同じサーチ結果になります。
index=main action=view
index=main action=View
index=main action=VIEW
Splunkではフィールドを指定せず、特定の文字列を含むイベントを全文検索することができます。
これに加えて、フィールド値に*を指定することで、フィールド名が存在するイベントだけをサーチすることも可能です。
以下が特定のフィールドを含むイベントをサーチする例です。
index=main action=*
2. フィールドの種類
フィールドの中には、特別な意味を持つものがいくつかあります。ここではよく使う4種類を説明します。
デフォルトフィールド(Default Fields)
Splunkがログデータをインデクシングする際に、イベントへ自動で付与するフィールドです。インデックス化した後は変更できません。
host, source, sourcetype, timestampなどが該当します。関連するフィールド(Interesting Fields)
サーチ結果画面の左下に表示される、サーチ結果イベントの20%以上に登場するフィールドです。サーチを実行するたびに、Splunkが結果を分析し、多く含まれるフィールドを自動抽出して表示します。
選択されたフィールド(Selected Fields)
サーチ結果画面の左上に表示される、ユーザーがチェックして選ぶお気に入りのフィールドです。既定では
host, source, sourcetypeの三つが選択されたフィールドとして設定されています。ユーザーの操作で追加・削除が可能です。計算済みフィールド(Calculated Fields)
statsコマンドやevalコマンドなどによって、元のイベントに含まれるデータを計算・変更したり、新しく作成したりしたフィールドです。たとえばbytesフィールドを特定期間で合計してsum_bytesという新しいフィールドを作成した場合、このsum_bytesが計算済みフィールドにあたります。
3. フィールドの抽出タイミング
Splunkがフィールドを抽出するタイミングは、大きく二つあります。
- サーチ時フィールド抽出
サーチ実行時に取得したイベント内のデータに対し、フィールドをマッピングします。
- インデックス時フィールド抽出
インデックス化(データ取り込み)の時点で、フィールドを含めてインデックスに格納します。
基本的には、1.サーチ時フィールド抽出がSplunkのデフォルトの動作です。 フィールドはインデックス時にフィールドを付与されて保存されているのではなく、サーチ実行のたびにフィールドを抽出して画面上に表示するのが基本的な動作である、と理解しておくのがよいでしょう。 この仕組みが、データを取り込んだ後もフィールドを柔軟に変更できるという、Schema on the flyのベースになっています。
2.インデックス時フィールド抽出が行われることもありますが、これはCSVやJSONなどの構造化データ向けの動作です。 構造化データはすでにスキーマが定義されており変更の可能性も低いため、インデックス化と同時に抽出したほうが効率的だからです。 ただし、フィールドに関するデータも一緒にインデックス化する必要があるため、この場合は処理・保存されるデータ量が増える点に注意が必要です。
4. まとめ
- フィールドはサーチで指定できる「名前と値のペア(Key-Valueペア)」。Keyは大文字・小文字を区別し、Valueは区別しない
- 値を
*にすると、そのフィールドが存在するイベントだけを絞り込める - フィールドにはデフォルトフィールド/関連するフィールド/選択されたフィールド/計算済みフィールドといった種類がある
- フィールドの抽出タイミングには二種類(サーチ時/インデックス時)あるが、サーチ時フィールド抽出がSplunkのデフォルト動作