Docker Swarmを使用したSplunk環境構築

# はじめに

スケーリング可能な？Splunk環境が欲しいなと思い、Docker Swarmを使用してみた。
Windows 10 ProのHyper-V上にdocker-machineを作成して、そこにSplunk環境を構築する

# ホストの作成
まず最初に、クラスタ構築用にmanagerノード1つとworkerノード2つを用意した

```
docker-machine create --d hyperv vm1
docker-machine create --d hyperv vm2
docker-machine create --d hyperv vm3
```

docker-machine lsでマシンの動作状況を確認
```
$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE     URL                       SWARM   DOCKER      ERRORS
vm1    -        hyperv   Running   tcp://192.168.0.22:2376           v19.03.12  
vm2    -        hyperv   Running   tcp://192.168.0.23:2376           v19.03.12  
vm3    -        hyperv   Running   tcp://192.168.0.27:2376           v19.03.12 
```

# managerノードの設定
上で作成した"vm1"マシンをmanagerとして、sshで接続する。
```
$ docker-machine ssh vm1
docker@vm1:~$
```

docker swarmコマンドで、"vm1"のIPアドレスを引数に指定してdocker swarmの初期化を行う。

実行結果の「docker swarm join --token…」は、
後程workerノードを指定するときに使用する。
```
docker@vm1:~$ docker swarm init --advertise-addr 192.168.0.22
Swarm initialized: current node (pjwqrqu3ffdaypnfcifk0cppw) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1b5ti7q1mmxy6tv2s34ji10pp6r33w3wqfi6wa6u4rawlqqrzv-5if19n1ysxx2cdsnkv5nnbjeo 192.168.0.22:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
```

※現在のノードの状態表示は以下コマンドで可能。
```
docker@vm1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjwqrqu3ffdaypnfcifk0cppw *   vm1                 Ready               Active              Leader              19.03.12
```
MANAGER STATUSがLeaderになっていることが確認できる。

# workerノードの設定

上で作成した"vm2"と"vm3"マシンに接続して以下のコマンド（managerノードでdocker swarm init...を実行したときに標準出力されたコマンド）を実行し、workerの設定をする。

```
docker@vm3:~$ docker swarm join --token SWMTKN-1-1b5ti7q1mmxy6tv2s34ji10pp6r33w3wqfi6wa6u4rawlqqrzv-5if19n1ysxx2cdsnkv5nnbjeo 192.168.0.22:2377
This node joined a swarm as a worker.
```

# クラスタ設定の確認とmanagerノードでSplunk環境構築

managerノードに再度接続し、クラスタがうまく構築できているか確認する
```
docker@vm1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjwqrqu3ffdaypnfcifk0cppw *   vm1                 Ready               Active              Leader              19.03.12
sz9xus0qwgsvfcw5tcpqqxz6l     vm2                 Ready               Active                                  19.03.12
mttx955nrr8jw645vj1dedtn3     vm3                 Ready               Active                                  19.03.12

```

次に、docker serviceコマンドでSplunkイメージからサービスをデプロイし、Splunk環境を構築する。

ブラウザ等からSplunkにアクセスする際のポートは-pで12000を設定し、パスワードは"password"に設定する。名前は--nameでtest-splunkを指定。
```
docker@vm1:~$ docker service create --name test-splunk -d -p 12000:8000 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=password' splunk/splunk:latest
0ev43nb5w3bbt0ytspx8wsy16
```

以下でサービスが設定できたかどうか確認
```
docker@vm1:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                  PORTS
0ev43nb5w3bb        test-splunk         replicated          0/1                 splunk/splunk:latest   *:12000->8000/tcp
```

設定したSplunkをスケールさせてみる
```
docker@vm1:~$ docker service scale test-splunk=3
test-splunk scaled to 3
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged

docker@vm1:~$ docker service ps test-splunk
ID                  NAME                IMAGE                  NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
x8qin01b6rk6        test-splunk.1       splunk/splunk:latest   vm1                 Running             Running 4 minutes ago
kz8r05haltvm        test-splunk.2       splunk/splunk:latest   vm2                 Running             Running about a minute ago
xng9xm2ac4li        test-splunk.3       splunk/splunk:latest   vm3                 Running             Running about a minute ago
```
設定したそれぞれのノードでコンテナサービスが稼働していることが確認できた。

# ホストマシンからSplunkに接続

IPアドレスをmanagerノードのIP、ポート番号を12000で指定して、ブラウザからSplunkに接続してみる。

![スクリーンショット 2022-06-15 214015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2120229/8d8c79a8-cb34-684f-33ac-8b7c4c2cbf06.png)
ホストマシンからSplunkのログイン画面を表示できた。

# 参考
https://qiita.com/ohhara_shiojiri/items/47e4111a81431c7cb3a7

https://www.mathkuro.com/visualize/splunk/install_by_docker/