Distributed Search 解説【Splunk】

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

Distributed Search とは

Distributed Search (分散サーチ) とは

Distributed Searchとは「インデックスやサーチの層を厚くしサーチ環境をスケールさせる構成」のことで、以下のようなメリットを享受することができます。

  1. パフォーマンス向上のための垂直スケーリング:インデックス化やサーチの負荷を複数インスタンスで分散することによるパフォーマンスの向上。
  2. アクセスコントロール:ユーザーに応じてアクセス可能なインデックスを制限。
  3. 地理的に分散したデータの管理:ユーザーがアクセスする場所 (e.g., Tokyo, USA) に応じてアクセス可能なインデックスを制限。

種類

  1. Search peers で横断的なサーチを実現するための1つ以上のSHs*:小規模な環境で独立したSHsを導入。SH毎に KOs* が分けられているためユーザー毎のアクセス制御が可能。
  2. SHC* 内の複数 SHs:拡張性/可用性を高めるためにSHsをグルーピングした構成。全てのSHsは同一のコンポーネントにアクセスでき、環境に応じて負荷を分散させることも可能。
  3. Indexer cluster の一部分としての SHs:可用性/障害対策を高めるためにIndexers間でデータを複製する構成。

※ Search peers = Indexers, SH = Search Head, SHC = Search Head Cluster, KOs = Knowledge Objects.
※組織に適したSHsの数は環境 (e.g., CPU, number/types of search) によって異なります。また、不要になったインスタンスは splunk disable webserver で利用を止めてください。

概観

Distributed Search の設定手順

システム要件を確認

SHのシステム要件、SHs, search peers のバージョンの互換性などを確認します。
※ license pool にアクセスできることが前提です。

SHインスタンスの指定

上記のシステム要件を満たすインスタンスをSHとして指定します。このとき既存のインスタンスを選択することもできますが、外部データのインデックス化を行っていないことが条件になります。

SH – search peers 間の接続設定

SH – peers 接続を個々のSHごとに設定します。SHsをデプロイする場合は、SHC構成にすることで SH – peers 接続が同期されるので、個別に設定する手間を省くことができます。

Distributed search はデフォルトでONになっているので『web』『CLI』『distsearch.confの直接編集』のいずれかで peers を追加すれば、SH – peers 接続が確立されます。(ユーザーの追加には “edit_user” の権限が必要)
※この時、インスタンスはLMにより一元管理されていることが望ましいです。

  1. web:[Settings] > [Distributed search] > [Search peers] (+ Add new) > Peer URI with http(s), username, PW を入力 > [Save]
  2. CLI:$SPLUNK_HOME/bin/splunk add search-server <scheme>://<host>:<port>

# CLI (各peerで実行)
# -auth <user>:<pw> -remoteUsername <user> -remotePassword <pw>
$SPLUNK_HOME/bin/splunk add search-server https://129.21.1.1:8089 -auth admin:admin_pw -remoteUsername admin - remotePassword remote_pw

# distsearch.confの直接編集
[distributedSearch]
servers = https://129.21.1.1:8089, https://129.21.1.2:8089   # hostname/IPはhttp(s)の形式
# 設定後はSHインスタンスを再起動

search peers のデータ収集設定

Peersに直接 or (peers接続の)Forwarder に対して、データを収集するための設定を行います。

SHs の内部ログを search peers へ転送

SHsの内部ログ (e.g., _audit, _internal) をpeersへ転送することで「indexer単位でのログの一元管理」「SHダウン時の原因調査」などを行うことができます。

内部ログを転送するにはSHをForwarderとして扱うための設定を output.conf で記述する必要があります。(詳細)

# SHのインデックス化をOFF
[indexAndForward]
index = false
 
[tcpout]
defaultGroup = my_search_peers 
forwardedindex.filter.disable = true  
indexAndForward = false 
 
[tcpout:my_search_peers]
server = test_idx1:9997, test_idx2:9997, test_idx3:9997

search peer の接続チェック

SHで特定のサーチを実行し、結果の中の “splunk_server” フィールドを調べることで、所望のpeersが表示されているかをチェックします。

認証設定を行い、完了

最後にインスタンスをセキュアに利用するための認証設定などを行えば、完了となります。

上記手順でいつでもSHsを追加することができますが、インスタンス上で不要になったsplunkwebは disable webserver  で無効化しましょう。

$SPLUNK_HOME/bin/splunk disable webserver

Knowledge bundle replication

ナレッジバンドルの複製とは

Knowledge bundle replication とは「peersにSHのKOs (e.g., tags, alerts, fields) を配布すること」を指し、distributed searchを実行する上で必要なプロセスとなります。
※このときpeerは、自身のKOsを無視しSHから配布されたオブジェクトのみにアクセスします。

通常は新規サーチ時に初期化されますが『replication policy』を作成することで定期的に初期化することも可能です。また、replication policyでは配布先:Classic(全てのpeers), Casacding(一部のpeersに配布), Mounted(共有リソースに配布), etc を指定することもできます。

Knowledge bundleは $SPLUNK_HOME/var/run に .bundle で保存され、複製を実行している間は $SPLUNK_HOME/var/run/searchpeers にオブジェクトが配布されます。

複製プロセスのステータス

複製プロセスの状況を確認する方法には『web』『MC』『CLI』『REST API endpoints』『metrics.log file』の5つがあります。

  • web:[Settings] > [Dstributed search] > [Search peers] (※ SHCの場合はcaptainインスタンスで実行)
  • MC:[Search] > [Knowledge Bundle Replication] (※ Distributed modeであることが前提)
  • CLI:$SPLUNK_HOME/bin/splunk show bundle-replication-config
  • REST API:/service/search/distributed/bundle/replication/config
  • $SPLUNK_HOME/var/log/splunk/metrics.log

※ MCでは他にも [Search] > [Search Activity: Instance] で peers status (e.g, メモリ/CPU利用率、メモリ使用率が高いサーチ top10、平均実行時間) を確認することができます。

$SPLUNK_HOME/bin/splunk show bundle-replication-config

Search peer の実行失敗

Distributed Search 環境下でpeerがダウンしてしまった場合、実行中のジョブは他のpeersに自動でフェールオーバーされ、以下のようなメッセージが表示されます。

Search results might be incomplete: the search process on the peer:<indexer_name> ended prematurely. Check the peer log, such as $SPLUNK_HOME/var/log/splunk/splunkd.log and as well as the search.log for the particular search.

そんな時にはまず MC:[Search] > [Search Activity: Instance] で peer status を確認しましょう。原因が分かり次第そちらに対応し、ダウンしたpeerを他から隔離します。
※インスタンスを停止せずに live troubleshooting を行います。影響範囲は the peer – SH のみです。

  • web:[Settings] > [Dstributed search] > [Search peers]
  • CLI:$SPLUNK_HOME/bin/splunk edit search-server -auth <user>:<pw> <host>:<port> -action quarantine
$SPLUNK_HOME/bin/splunk edit search-server admin:admin_pw sp.yonaha.info:8089 -actionquantine

References

System requirements and other deployment considerations for distributed search – Splunk Documentation

Deploy a distributed search environment – Splunk Documentation

Add search peers to the search head – Splunk Documentation

About distributed search – Splunk Documentation

Configure forwarding with outputs.conf – Splunk Documentation

Best practice: Forward search head data to the indexer layer – Splunk Documentation

Knowledge bundle replication overview – Splunk Documentation

knowledge bundle – Splunk Documentation

About metrics.log – Splunk Documentation

Search results might be incomplete: the search process on the peer – Splunk Community

Quarantine a search peer – Splunk Documentation