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

2-4 動的スキーマ定義(Schema on the fly)

Splunkのデータの扱い方を特徴づける考え方が、 動的スキーマ定義(Schema on the fly)です。 この節では、従来のデータベースと対比しながら、その仕組みを説明します。

1. スキーマとは何か

スキーマ(schema)とは、ざっくり言えば 「データをどのような構造(項目・形式)で扱うか」というデータの型枠のことです。 「この項目は日付」「この項目は数値」といった取り決めがスキーマにあたります。 このスキーマをいつ決めるのかが、RDB(リレーショナルデータベース)と Splunkとで大きく異なります。

2. RDBの書き込み時スキーマ(schema on write)

一般的なRDBでは、データを保存する前にテーブルの列(カラム)とその型を あらかじめ定義しておく必要があります。これを書き込み時スキーマ(schema on write)と 呼びます。データを書き込む時点で構造が確定しているため、決まった形のデータを高速に扱える一方、 次のような制約もあります。

  • あらかじめ定義した形に合わないデータは、そのままでは格納しにくい
  • 後から新しい項目を分析したくなっても、事前に列を用意していなければ扱えない
  • 形式がバラバラな多様なログをまとめて取り込むのが難しい

3. Splunkの読み込み時スキーマ(schema on read)

これに対してSplunkは、読み込み時スキーマ(schema on read)を採用しています。 データを取り込む段階では生データ(元のログそのもの)をほぼそのまま保管し、 フィールドの抽出はサーチを実行するそのときに行います。 これが「動的スキーマ定義(Schema on the fly)」と呼ばれる所以です。

つまりSplunkは、事前に「どんな項目があるか」を厳密に決めておかなくてもデータを取り込めます。 そして検索の瞬間に、ソースタイプなどのルールに従ってイベントからフィールドを取り出すのです。

書き込み時スキーマは「保存する前に型を決める」、 読み込み時スキーマは「読み出すときに型を決める」と覚えると分かりやすいでしょう。 Splunkは後者なので、まず取り込んでおいて後から自由に分析できます。

4. 読み込み時スキーマの利点

生データをそのまま保管し、サーチ時にフィールドを抽出するこの仕組みには、 次のような利点があります。

観点 読み込み時スキーマの利点
取り込みの手軽さ 事前に構造を細かく定義しなくても、多様なログをそのまま取り込める
柔軟な分析 取り込み後でも、新しい観点でフィールドを抽出して分析できる
情報の保全 生データを保持するため、後から「元のログを見返す」ことができる

第1章で「Splunkはベンダーフリーで様々な製品のログを横断的に扱える」と述べました。 これを技術面で支えているのが、この読み込み時スキーマの考え方です。 形式の異なるログでも、まず取り込んでおいて必要なときに解釈できるため、 Splunkは幅広いデータを1つの基盤で扱えます。

5. まとめ

  • スキーマとは「データをどんな構造で扱うか」という型枠のこと
  • RDBは書き込み時スキーマ(schema on write)=保存前に構造を決める
  • Splunkは読み込み時スキーマ(schema on read)=サーチ時にフィールドを抽出する
  • 生データをそのまま保管するため、取り込みが手軽で後から柔軟に分析できる