第1章ではSplunkの概要について説明しました。 本章では、Splunkがどのような仕組みでデータを取り込み、サーチを行っているのか説明します。
1. Splunkの基本的なサーバーロール
Splunkは1台のサーバーだけで動かすこともできます。これをシングルインスタンス構成と呼びます。 しかし扱うデータ量が増えてくると役割ごとにサーバーを分けてスケールアウトさせたり、クラスター構成をとることになります。この構成を分散構成と呼びます。 Splunkを分散構成にする際は、担当する機能ごとに異なるサーバーロール(役割)を割り当てます。 Splunkの基本的なサーバーロールは、Search Head(SH;サーチヘッド)、Indexer(IDX;インデクサー)、Forwarder(FWD;フォワーダー)の3つです。まずはこの3つのロールについて説明します。
| サーバーロール | 概要 | 説明 |
|---|---|---|
| Search Head(SH) | Web GUI画面を提供 | ユーザーにGUIを提供する。ユーザーからのサーチ指示を受け付け、Indexerに依頼する。Indexerから受け取った結果を加工・画面表示する |
| Indexer(IDX) | データ保管とサーチの実行 | Forwarderから転送されてきたデータを保管する。またSearch Headから指示を受けてサーチを実際に実行する |
| Forwarder(FWD) | データの入力と転送 | 末端のサーバーにインストールされるエージェント。ログデータを読み取り、Indexerへ転送する |
これらは最初に覚えるべき最も基本的なサーバーであり、Splunkを構成するサーバーは他にも存在します。 より詳しくは後の章にて改めて解説します。
2. サーチの流れ
Splunkの最も重要な機能は、大きく以下の二つに分けられます。
- 取り込んだデータを探すサーチ
- データを取り込むインデクシング
まず、取り込んだデータを探すサーチの流れについて解説します。
- サーチ受付:ユーザーがWeb画面(Search Head)でサーチを指示する
- コマンド解析と実行指示:Search Headがサーチコマンドを解析し、Indexerへサーチ実行を依頼する
- サーチ実行:Indexerが自分の保管しているインデックス(データ)の中から該当データを探し、結果を返却する
- 結果の集約:Search HeadがIndexerからの結果を集約し、ユーザーへ表示する
---
config:
flowchart:
rankSpacing: 18
nodeSpacing: 18
padding: 4
---
flowchart LR
user(["<span style='font-size:1.6em'>ユーザー</span>"]) --> shc
%% gap2/gapは白文字の不可視スペーサー。枠の内部間隔は詰めたまま、ユーザー↔SHとSH↔IDXの矢印を同じ長さに揃える
user ~~~ gap2 ~~~ shc
gap2["<span style='color:#ffffff'> </span>"]
subgraph shc["Search Head"]
direction TB
shwork["<br/>1.サーチ受付<br/>2.コマンド解析と実行指示<br/>4.結果の集約"] ~~~ shpad[("<span style='color:#ECECEC'>インデックス</span>")]
end
shc <--> idx
shc ~~~ gap ~~~ idx
gap["<span style='color:#ffffff'> </span>"]
subgraph idx["Indexer"]
direction TB
%% 先頭の空行と、1行目/3行目の背景色と同色の不可視スペーサーは、Search Head枠と幅・高さを揃えるためのもの
work["<br/><span style='color:#ECECEC'>2.コマンド解析と実行指示</span><br/>3.サーチ実行<br/><span style='color:#ECECEC'>・</span>"] ~~~ idxdb[("インデックス")]
end
style shwork fill:none,stroke:none
style work fill:none,stroke:none
style shpad fill:none,stroke:none
style gap fill:none,stroke:none
style gap2 fill:none,stroke:none
style shc fill:#ECECEC,stroke:#333333
style idx fill:#ECECEC,stroke:#333333
style idxdb fill:#ffffff,stroke:#333333
Search Headはサーチ受付と結果の集約を担い、データを探す処理はIndexerが担います。 Search Head/Indexerはそれぞれ分散構成をとることが可能です。 このような構成をとることで、Splunkは、扱うデータが大量になっても可用性やサーチ性能を担保できるようにしています。
3.サーチ実行と4.結果の集約では、実際は得られたログデータを探して集約するだけでなく、データに含まれる値を計算したり変換したりする処理が含まれることがあります。 これら処理は、Indexerで行われる場合もありますし、Search Headで行われる場合もあります。詳細は後の章で解説します。
重要なポイントは、「データを保管し、サーチを実行しているのはIndexerである」ということです。 Search Headはサーチの指示を出しているだけで(細かく言うとそれだけではないのですが)、サーチを実際に実行しているのはIndexerです。 一般的に、Splunkで最初に冗長化するサーバーはIndexerなのですが、その理由はここからもわかります。
また、Splunkでサーチを行い、フィルタリング条件を指定したりデータの加工を行ったりするためにはSPL(Search Processing Language)と呼ばれる独自言語を使う必要があります。こちらも後の章で解説していきます。
3. インデクシング(インデックス化)の流れ
サーチをするためには、その前に対象となるデータがSplunk内部に存在している必要があります。 Splunkがデータを収集し、保管するまでの処理を、インデクシング(またはインデックス化)と呼びます。 インデクシングの流れは以下です。
- データ入力(Input):Forwarderなどがログファイルなどからテキストデータを取り込む
- 加工(Parsing):取り込んだデータから、文字コードやタイムスタンプを識別、改行区切りなどを行い、Splunkのデータ単位である「イベント」にまとめる
- インデックス化(Indexing):Indexer上のインデックスへデータを保管する
---
config:
flowchart:
rankSpacing: 18
nodeSpacing: 18
padding: 4
---
flowchart RL
fwd --> idx
%% gapは白文字の不可視スペーサー。サーチの流れの図と矢印の長さ・枠の大きさを揃える
fwd ~~~ gap ~~~ idx
gap["<span style='color:#ffffff'> </span>"]
subgraph fwd["Forwarder"]
direction TB
%% 不可視行(背景色と同色)はIndexer枠と幅・高さを揃えるためのもの
fwork["<br/>1.データ入力<br/><span style='color:#ECECEC'>2.加工</span><br/><span style='color:#ECECEC'>3.インデックス化</span>"] ~~~ fpad[("<span style='color:#ECECEC'>インデックス</span>")]
end
subgraph idx["Indexer"]
direction TB
work["<br/><span style='color:#ECECEC'>1.データ入力</span><br/>2.加工<br/>3.インデックス化"] ~~~ idxdb[("インデックス")]
end
style fwork fill:none,stroke:none
style work fill:none,stroke:none
style fpad fill:none,stroke:none
style gap fill:none,stroke:none
style fwd fill:#ECECEC,stroke:#333333
style idx fill:#ECECEC,stroke:#333333
style idxdb fill:#ffffff,stroke:#333333
こうして格納されたデータに対して、前述したサーチが実行されることになります。
2.加工(Parsing)処理は、Forwarderで行われる場合もありますし、Indexerで行われる場合もあります。 またこの加工処理には様々な処理が含まれており、Splunkへの理解を深めるためにはしっかりとした学習が必要です。詳細は後の章で解説します。
「イベント」「インデックス」といった用語はのちの章で説明します。 ここでは「データはイベントという単位に区切られてインデックスに保管される」ということまで覚えておいてください。
4. まとめ
- Splunkの基本的なサーバーロールはSearch Head、Indexer、Forwarderの3つ
- Splunkの動作は大きく「サーチ」と「インデクシング」に分けられる
- サーチは「Search Headがサーチを依頼 → Indexerがサーチを実行して結果を返却 → Indexer/Search Headが結果を加工・集約して表示 」という流れで行われる
- インデクシングは「Forwarderがデータを読み取って入力 → Forwarder/Indexerがデータを加工してイベント単位に分割 → Indexerがインデックスに保管」という流れで行われる
- Splunkでサーチを行うときにはSPLと呼ばれる独自言語を使用する必要がある