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)=サーチ時にフィールドを抽出する
- 生データをそのまま保管するため、取り込みが手軽で後から柔軟に分析できる