Docker Compose で Splunk インデクサークラスタ構成を作ってみる

この記事は Splunk Advent Calendar 2023 の記事です。

Splunk の検証環境について

Splunk は本番と同じパッケージで、60日間500MB取り込み可能なトライアル利用も可能なので、ちょっとした検証も簡単にできます。

基本的な検証ならそれで十分なのですが、インデクサークラスタの挙動とかの確認とかとなると

  • VM 作成するのが手間(例:サーチヘッダ、クラスタマスター一台ずつ、インデクサー3台)
  • 都度設定するのが手間

となり、ちょっと手間がかかります。

Splunk Docker イメージ

Splunk には、rpm や deb パッケージだけでなく、Docker イメージも提供されています。

これをつかって、インデクサークラスタを作ってみます。

Docker 実行環境の整備

バージョン情報

  • CentOS Stream 8
  • Kernel 4.18.0-527.el8.x86_64
  • Docker 24.0.7
  • Splunk 9.1.2

本記事では、Docker 環境の構築については割愛します。

VM の設定

多数の Splunk インスタンスが動くのでそれなりにスペックが必要ですが、今回は下記のスペックにしました。

  • CPU 6Core
  • メモリ 8GB

コンテナ起動時の初期設定で CPU を多く使用するため、コア数が多い方がいいですが、
6コア12スレッドの CPU のためここまでにしておきます。

IP アドレスの付与

Docker の場合、それぞれのコンテナにポート番号を変えてアクセスすることになるのですが、
同一 IP アドレスで、違うポート番号でログインすると、別のポート番号の方がログアウトされてしまいます。

異なるブラウザセッション、具体的には

  • Edge 通常利用
  • Edge InPrivate モード
  • Chrome 通常利用
  • Chrome シークレットモード
  • Firefox・・・

などでも対応できますが、同一ブラウザセッションの方が使いやすいため、IP アドレスも追加します。

今回は CentOS Stream 8 ですが、一時的な検証ということもありますので、NetworkManager を触らずに、コマンドで追加します。

手元の環境では、eth0 のような名称に固定していますが、実際に使われている NIC 名を使ってください。

192.168.2.0/24 でプライベートネットワークが設定されている場合、実際に使われていないか注意しつつ

ip addr add 192.168.2.10/24 dev eth0
ip addr add 192.168.2.11/24 dev eth0
・・・

等の方法でも設定できますし、IPv6 が利用可能なら、アドレスが使われていないかなどを気にせずにできるので便利です。

ip addr add fe80::de2:1/64 dev eth0
ip addr add fe80::de2:2/64 dev eth0
・・・

Docker compose の準備

実行環境が整備できたので、Docker compose ファイルの準備を進めます。

SPLUNK_ROLE の設定

この内容を素直に compose に書いても、コンテナが個数分だけ上がるだけなのですが、実はもっと便利なオプションもあります。

ロールの一覧については GitHub のリポジトリを見るしかないようです。

今回は下記のロールが必要になるかと思います。

  • splunk_cluster_master
  • splunk_indexer

そのほか、検証によっては、splunk_monitor、splunk_search_head、splunk_deployment_server も加えても良いかもしれません。

ホスト名の設定

通常コンテナを起動するとコンテナ内のホスト名はランダムな文字列になります。
クラスタ環境の場合、それだとどれがインデクサーなのかが分からなくなってしまうため、hostname も設定します。

 index-01:
   image: splunk/splunk:latest
   hostname: index-01 ★
   environment:
     - SPLUNK_ROLE=splunk_indexer

インデクサークラスタ固有の設定

インデクサークラスタを設定時に画面で入力する内容は、下記のオプションを設定することで設定されます。

クラスタマスターは下記となります。

   environment:
     - SPLUNK_IDXC_SEARCH_FACTOR=2
     - SPLUNK_IDXC_REPLICATION_FACTOR=3
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_IDXC_PASS4SYMMKEY={ランダムな文字列}
     - SPLUNK_ROLE=splunk_cluster_master

ピアノードやサーチヘッドなどインデクサークラスタに接続するものは下記となります。

   environment:
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_IDXC_PASS4SYMMKEY={クラスタマスターと同じ文字列}
     - SPLUNK_ROLE=splunk_indexer や splunk_search_head など

完成形

そしてできあがった完成形は下記となります。

docker-compose.yml

---
services:
 monitor:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: monitor
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD=TestPass123#
     - SPLUNK_DEPLOYMENT_SERVER=deploy
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_IDXC_PASS4SYMMKEY=SYMMKEY123#
     - SPLUNK_ROLE=splunk_monitor
   ports:
     - 8000:8000  # Web
     - 8089:8089  # REST API
 cmaster:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: cmaster
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD={ログインパスワード}
     - SPLUNK_DEPLOYMENT_SERVER=deploy
     - SPLUNK_IDXC_SEARCH_FACTOR=2
     - SPLUNK_IDXC_REPLICATION_FACTOR=3
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_IDXC_PASS4SYMMKEY={PASS4SYMMKEY}
     - SPLUNK_ROLE=splunk_cluster_master
   ports:
     - 18000:8000
     - 18089:8089 # REST API
     - 8088:8088  # HEC
     - 514:514    # syslog
 deploy:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: deploy
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD={ログインパスワード}
     - SPLUNK_ROLE=splunk_deployment_server
   ports:
     - 28000:8000
     - 28089:8089  # API and Deployment
 index-01:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: index-01
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD={ログインパスワード}
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_ENABLE_LISTEN=9997
     - SPLUNK_IDXC_PASS4SYMMKEY={PASS4SYMMKEY}
     - SPLUNK_ROLE=splunk_indexer
   ports:
     - 38000:8000
     - 19997:9997 # index
 index-02:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: index-02
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD={ログインパスワード}
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_ENABLE_LISTEN=9997
     - SPLUNK_IDXC_PASS4SYMMKEY={PASS4SYMMKEY}
     - SPLUNK_ROLE=splunk_indexer
   ports:
     - 48000:8000
     - 29997:9997
 index-03:
   image: splunk/splunk:latest
   platform: linux/amd64
   hostname: index-03
   environment:
     - TZ=Asia/Tokyo
     - SPLUNK_START_ARGS=--accept-license
     - SPLUNK_PASSWORD={ログインパスワード}
     - SPLUNK_CLUSTER_MASTER_URL=cmaster
     - SPLUNK_ENABLE_LISTEN=9997
     - SPLUNK_IDXC_PASS4SYMMKEY={PASS4SYMMKEY}
     - SPLUNK_ROLE=splunk_indexer
   ports:
     - 58000:8000
     - 39997:9997

8000 以外のポート変換も定義していますが実際は動作確認していません。
ひとまず動作確認できればいいという形ですので、HEC や syslog もクラスタマスターで受ける構成にしています。
サーチヘッドも単体では存在しないので、クラスタマスターやモニターコンソールでサーチする形に。

platform: linux/amd64

は、Apple Silicon の Mac で Rosetta 経由でコンテナが起動できるように記載していますが、エミュレーションの負荷もありますので、シングル構成ならならともかく、クラスタ構成はそれなりにスペックがないと起動できないのではないかと思います。

起動

docker-compose.yml が書き終わったら下記コマンドにて起動します。

docker compose up -d

docker compose ps -a で starting → healthy になれば起動完了です。

最初に記載した 6core 構成において、3分かかりますのでよりスペックを上げると高速化できると思います。

メモリは8GBとしていますが、起動直後では60%程度の利用でした

動作確認

コンテナが上がってきたら、

  • http://(ホストの実際の IP アドレス):8000
  • http://[fe80::de2:1]:18000
  • http://[fe80::de2:2]:28000

のように、IP アドレスとポート番号を変えつつアクセスしてみます。

インデクサークラスタリングの画面も、コンテナ起動直後から正常に認識されていることを確認しました。

どのインスタンスにログインしているか分かるように、グローバルバナーを設定しています。これは現状 docker-compose からは設定できないので手作業で表示しています。

また、同一インスタンスなので iowait で警告が出ていますので、io を使うような検証の場合はやはり分けた方がいいかもしれません。

モニターコンソールでも正常に各インスタンスが認識できていることを確認しました。

コンテナなのでメモリはちゃんと見えてないですが、サーチなど通常に使用においては影響はないはずです。

Comments

comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)