データモデルを使った効率的な管理【Splunk】

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

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

データモデルとは「Pivot* で利用される階層化されたデータセット」のことです。
※ Pivot = SPLを記述せずにフィールドから直感的にレポートなどを作成できる機能。

正規表現などで独自に抽出したフィールド / eval, lookups で作成したフィールドを追加したり、作成したデータモデルに権限設定を行うこともできます。

具体例

データモデルでは、階層が深くなるにつれ検索条件が増えるといったイメージです。

第一層: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.)ある顧客のWEBでの行動履歴、特定の不正アクセスに関するログ

作成時にはイベントデータセット/サーチデータセットにある既存のフィールドを用いる必要があり、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] にチェックを入れれば設定できます。ただし、高速化設定を行うには管理者 or “accelerate_datamodel”の権限が必要です。

なお、高速化には『_raw(生データ)』『time-series index files (tsidx)』がセットで作成されるため、一度インデックス化されたデータを再び編集することはできません。そのため高速化設定前には「tsidx 分のストレージ」「データモデル生成用リソース」も確認しておく必要があります。

通常のサーチでは tsidx 内のシークアドレスを確認して _raw へアクセスしているのですが、高速化設定を行うと「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 テーブル/チャートを定義。(詳細)

from

from:データセット*からデータを抽出するコマンド。
(e.g.) データモデル、テーブルデータセット、CSV lookup、保存した検索など

datamodel は定義された全てのフィールドを返すのに対して、from は指定したフィールドのみを返します。
from は必ずコマンドの先頭で利用しなければいけません。

| from <dataset_type>[:]<dataset_name>

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

Dataset field types

Data model dataset fields には『Auto-extructed (自動抽出)』『Eval Expression (Eval 表現)』『Lookup』『Regular Expression (正規表現)』『Geo IP』の5種類あります。

Auto-extructed (自動抽出)

『Auto-extructed』:データ書き込み時や検索時に Splunk によって自動で抽出されるフィールド。ルートデータセットにのみ新しく追加可能です。
※ Child データセットができるのは親元のフィールドを継承することのみとなっています。

Eval Expression (Eval 表現)

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

Lookup

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

Regular Expression (正規表現)

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

Geo IP

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

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

その他

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

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

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

フィールドフラグ

フィールドフラグは以下の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