Data Model 解説【Splunk】

この記事は約9分で読めます。
sponsored link

データモデル (Data Model) とは

データモデルとは「Pivot*で利用される階層化されたデータセット」のことで、取り込んだデータに加え、独自に抽出したフィールド /eval, lookups で作成したフィールドを追加することも可能です。
※ Pivot:SPLを記述せずにフィールドから直感的にレポートなどを作成できる機能。

具体例

データモデルでは、階層が深くなるにつれ検索条件が増えます。

第一層:index=web sourcetype=access_combined
第二層:index=web sourcetype=access_combined status=400
第三層:index=web sourcetype=access_combined status=400 action=purchase productId=*

種類

データモデルは『EVENTS』『SEARCH』『TRANSACTION』の3種類で、例えばwebであれば、EVENTS=イベント、SEARCH=ユーザー、TRANSACTION=訪問期間 となります。

データモデルの作成方法

データモデルは [Settings] > [Data Models] > [New Data Model] から作成できます。

データモデルの権限はデフォルトで private になっているため、他のユーザー/アプリで利用したい場合は [Edit] > [Edit Permission] から権限を設定する必要があります。

また、既存のデータモデルに階層を追加する場合は [Add Dataset▼] から『Root Event』『Root Transaction』『Root Search』『Child』のいずれかを選択します。

これらはルートデータセットと呼ばれ「データモデル内の上位階層のデータセット」を表しています。

Root Event

『Root Event』:イベントタイプのルートデータセット。最も一般的。
(e.g.) アクセスログイベント、エラーイベント

サーチ文に記述するように ” | ” などを用いてシンプルな条件式で記述できるのが特徴です。

Root Transaction

『Root Transaction』:トランザクションを表すルートデータセット。時間で区切られた関連するイベントの集合。
(e.g.) 特定顧客の行動履歴、特定の不正アクセスログ

作成時にはイベントデータセット / サーチデータセット内のフィールドを用いる必要があり、Group by, max span, max pause を使ってイベント粒度を変更することが可能です。
※トランザクションデータセットからは直接設定できません。

Root Search

『Root Search』:サーチ文で条件を記述したルートデータセット。
(e.g.) 時系列ごとのカテゴリ別不正アクセス

複数のフィールドを集計した結果をデータセットとして扱うことができます。

Child

『Cilid』:ルートデータセットから引き継いだ下の階層のデータセット。

親元の条件をさらに追加してデータを絞りこむ際に用いられます。

データモデル高速化 (Data Model Acceleration) とは

データモデル高速化とは「フィールドをインデックス化することで pivot を高速化する機能」のことで、streaming commands を用いたイベントデータセット/サーチデータセットでのみ有効です。
transforming commands (e.g., stats, chart ) を用いたデータセットでは利用できません。

高速化はデータモデルの画面から [Edit] > [Edit Acceleration] > [Acceleration] にチェックを入れれば設定できます。ただし、高速化設定を行うには管理者権限または”accelerate_datamodel”権限が必要です。

なお、高速化では「rawdata, tsidx がセットで作成される」ため、一度インデックス化されたデータを再び編集することはできません。そのため高速化設定前には『tsidx分のストレージ』『データモデル用リソース』を用意する必要があります。

通常のサーチでは tsidx 内のシークアドレスを確認して raw data へアクセスしているのですが、高速化設定を行うと「tsidx内に記載された “ポインタ情報 + 値” をサーチ時に直接参照できる」ため高速サーチが実現する、といった仕組みです。
※ tsidxは5分おきに更新され、指定の期間を超えた古いファイルは30分間隔で削除されます。

データモデル関連コマンド

datamodel

datamodel:特定のデータモデルの中身をJSONで返すコマンド。

| datamodel [<datamodel name>] [<dataset name>] [<datamodel search mode>] [strict_field=<bool>] [allowed_old_summaries=<bool>] [summariesonly=<bool>]

datamodel name』:データモデル名を指定。
dataset name』:データモデルデータセット名を指定。データモデル名の指定も必須。
datamodel search mode』:データモデルの結果 or 検索文字を指定。(詳細)
trict_field』:false にするとデフォルト/条件式で指定したフィールド以外 (e.g., 親元から継承した/抽出された/lookup で追加されたフィールド) の結果も返ってくる。デフォルトでは「true」
allowed_old_sammaries』:高速化されたデータモデルにのみ有効で true にすると過去に定義したデータモデルのサマリが参照される。変更前のサマリと同一であることが信頼できる場合に利用。デフォルトでは「false」
summariesonly』:高速化されたデータモデルにのみ有効で true にすると TSIDX形式で集約されたデータのみの結果が返ってくる。今どんなデータが集約されているかを特定する時や、効率的な検索を行う際に用いられる。デフォルトでは「false」

pivot

pivot:Pivot 用コマンド。

| pivot <datamodel name> <object name> <pivot element>

datamodel-name』:データモデル名を指定。
objectname』:データモデルオブジェクト名を指定。
pivot element』:<cell value>,SPLITROW, SPLITCOL, FILTER, LIMIT, ROWSUMMARY, COLSUMMARY, SHOWOTHER, NUMCOLS で pivot table, pivot chart を定義。(詳細)

from

from:データセット*からデータを抽出するコマンド。サーチ文の先頭で利用。
(e.g.) data model, table dataset, CSV lookup, saved search

datamodel は定義された全てのフィールドを返すのに対して、from は指定したフィールドのみを返します。

| from <dataset_type>[:]<dataset_name>

dataset_type』datamodel, lookup, savedsearch のいずれかを指定。
dataset_name』:データセット名を指定。データモデルの場合のみ <datamodel_name>.<dataset_name> で記述。

データセットフィールドタイプ

データモデルデータセットフィールドは『Auto-extructed』『Eval Expression』『Lookup』『Regular Expression』『Geo IP』の5つに分けられます。

Auto-extructed (自動抽出)

『Auto-extructed』:データ書き込み時や検索時にSplunkによって自動で抽出されるフィールド。ルートデータセットにのみ新しく追加可能です。

Eval Expression (Eval 表現)

『Eval Expression』eval により生成されたフィールド。

Lookup

『Lookup』lookup* により追加されたフィールド。
lookup = 既存のデータセットと外部のデータセットを特定のキーで紐づけるコマンド。

Regular Expression (正規表現)

『Regular Expression』:正規表現により抽出されたフィールド。1つの正規表現で複数フィールドを抽出することも可能。

Geo IP

『Geo IP』:IPアドレスに基づいて追加された地理フィールド。マッピング用途。
(e.g.) 緯度軽度、国

なおフィールドタイプに関しては、他の4つ(上記)の方法が『String』『Number』『Boolean』から選択できるのに対し、Geo IP では『IPV4』のみとなります。

その他

Pivot ユーザーへの表示/非表示

データモデルでは Pivot ユーザーへ特定のフィールドを非表示にすることができます。

これは「データモデル内にフィールドが量産されているが実際に使うフィールドは少ない」という場合に有効で、親元での非表示設定は Child data set には引き継がれません。

フィールドフラグ

フィールドフラグは以下の4つに分類でき、これらをうまく活用することで検索効率や組織のガバナンスを高めることができます。

  • Optional:指定されたイベントでのみ表示される。
  • Required:このフィールドを含むイベントが Pivot の結果になる。
  • Hidden:データセットを選択時に表示されなくなる。eval で別フィールドを定義する場合に有効。
  • Hidden & Rewuired:このフィールドを含むイベントのみが表示され、フィールドはユーザーから隠された状態になる。

ベストプラクティス

  • 高速化の恩恵をうけるために、ルートデータセットでは streaming commands のみを用いる。
  • データモデルの条件式でインデックスを指定する。
  • データセットの定義が循環依存することを防ぐ。
  • データセットの階層深さを最小限にする。
  • 各データセットで必要なフィールドのみを表示させる。
  • 既存のダッシュボードやデータモデル内の検索を再利用する。
  • ユーザーの利用用途を考えてデータモデルを設計する。

データの全体像 (Dataset)

画面左上の [Datasets] タブからデータモデル内のデータセットを選択すると、データを一覧表示させることができます。個人的に好きな UI の1つです。

References

About data models – Splunk Knowledge Manager Manual

Design data models – Splunk Knowledge Manager Manual

Manage data models – Splunk Knowledge Manager Manual

Explore a dataset in Splunk Light – Splunk Getting Started Manual

data model dataset – Splunk Documentation

data model – Splunk Search Reference

pivot – Splunk Search Reference

from – Splunk Search Reference