【splunk】WSL2でdocker-splunkを動かす
前置き
簡単なログ調査やApp・Add-on開発を行いたいとき、わざわざsplunk用VMを構築するのは面倒です。手元のWindows端末でササっと済ませたい場合、WSL2で Docker Splunk を動かしたほうが手っ取り早いです。
前提条件
WSL2 (Ubuntu) のインストールが完了している。
1. Docker
公式ドキュメント Install Docker Engine on Ubuntu をほぼそのままやるだけですが、一応書きます。
GPG鍵の設定
-
パッケージ情報の最新化
sudo apt update
-
必須パッケージのインストール
sudo apt -y install ca-certificates curl
-
ディレクトリ作成
sudo install -m 0755 -d /etc/apt/keyrings
-
GPG鍵のダウンロード
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
-
GPG鍵のパーミッション設定
sudo chmod a+r /etc/apt/keyrings/docker.asc
Dockerリポジトリの追加
-
リポジトリ設定の追加
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
リポジトリ設定の反映
sudo apt update
Dockerインストール
後述手順で使用するため、docker-compose
もインストールします。
sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose
一般ユーザの実行設定
公式ドキュメント Manage Docker as a non-root user 記載の通り、現在の一般ユーザを docker
グループに追加します。
sudo usermod -aG docker ${USER}
2. KeepassXC
今回はパスワード生成と管理を KeepassXC で行います。
KeepassXCインストール
apt -y install keepassxc
変数定義
-
データベース
keepass_db="${HOME}/.keepassxc/${USER}.kdbx"
-
解除キー
keepass_key="${HOME}/.keepassxc/${USER}.key"
データベース作成
-
ディレクトリ作成
mkdir -m 700 ~/.keepassxc
-
解除キー作成
openssl rand -out ${keepass_key} 2048 && chmod 400 ${keepass_key}
-
データベース作成
keepassxc-cli db-create ${keepass_db} --set-key-file ${keepass_key}
splunk用パスワード生成
エントリ作成時に、パスワード文字列を自動生成します。
-
エントリ作成
keepassxc-cli add ${keepass_db} "splunk-admin" \ -g -u "admin" -k ${keepass_key} --no-password
-
エントリ確認
keepassxc-cli show ${keepass_db} "splunk-admin" \ -s -k ${keepass_key} --no-password
3. Splunk (docker-splunk)
作業ディレクトリ作成
任意の場所で構いません。今回は ~/docker-splunk
とします。
mkdir ~/docker-splunk ; cd ~/docker-splunk
ファイル格納
後述手順で使用する以下ファイルを、作業ディレクトリに格納してください。
- splunkのライセンスファイル(
Splunk.License
)- 個人利用の方は Splunk Developer License で取得可能です。
- Splunk App・Add-on ファイル
-
.spl
または.tgz
形式 - splunkbase からダウンロードしたものや、ご自身で作成したものを格納してください。
-
コンテナ定義作成
シンプルに動かすだけなら docker run ~
で構いませんが、多くの方は「必要に応じてデータを残してコンテナを使いまわしつつ、不要になったら綺麗に消して再構築をしたい。」という都合の良い使い方を希望していると思います。私もそうです。都合の良い使いまわしがしやすい定義を作っておきます。
docker-compose.yml
コンテナ毎に変わる値は、別途 .env
ファイルで定義します。
cat <<'EOF' > docker-compose.yml
services:
splunk:
image: ${SPLUNK_IMAGE:-splunk/splunk:latest}
environment:
SPLUNK_START_ARGS: ${SPLUNK_START_ARGS:---accept-license}
SPLUNK_LICENSE_URL: ${SPLUNK_LICENSE_URL:-./Splunk.License}
SPLUNK_PASSWORD: ${SPLUNK_PASSWORD}
SPLUNK_APPS_URL: ${SPLUNK_APPS_URL}
ports:
- 127.0.0.1:18000:8000
- 127.0.0.1:18089:8089
volumes:
- ./:/tmp
- splunk-etc:/opt/splunk/etc
- splunk-var:/opt/splunk/var
volumes:
splunk-etc:
driver: local
splunk-var:
driver: local
EOF
各項目の意味
services/splunk
- image - 環境変数
SPLUNK_IMAGE
がなければ、最新版イメージを使用。 - environment
-
SPLUNK_START_ARGS
- 環境変数
SPLUNK_START_ARGS
がなければ、--accept-license
を指定。
- 環境変数
-
SPLUNK_LICENSE_URL
- ライセンスファイルのパス。
.env
で設定します。なければ省略可能。
- ライセンスファイルのパス。
-
SPLUNK_PASSWORD
- 管理者ユーザのパスワード。
.env
で設定します。
- 管理者ユーザのパスワード。
-
SPLUNK_APPS_URL
- インストールするApp・Add-onのパス。なければ省略可能。
-
- ports
- ローカルホスト
18000/tcp
から コンテナ8000/tcp
にアクセスする。 - ローカルホスト
18089/tcp
から コンテナ8089/tcp
にアクセスする。- ご自身の環境に応じて、ローカルホストのポート番号は変えてください。
- ローカルホスト
- volumes
-
./:/tmp
- ホスト側のカレントディレクトリを、コンテナ
/tmp
にマウントする。 - 構築時に使用される splunk-ansible の仕様都合で、マウント先を
/tmp
にする必要があります。
- ホスト側のカレントディレクトリを、コンテナ
-
splunk-etc:/opt/splunk/etc
- ボリューム
コンテナ名_splunk-etc
を、コンテナ/opt/splunk/etc
にマウントする。
- ボリューム
-
splunk-var:/opt/splunk/var
- ボリューム
コンテナ名_splunk-var
を、コンテナ/opt/splunk/var
にマウントする。
- ボリューム
-
volumes
- splunk-etc
- drivers
-
local
- ホスト側のファイルシステムを使用(/var/lib/docker/volumes
配下)
-
- drivers
- splunk-var
- drivers
-
local
- ホスト側のファイルシステムを使用(/var/lib/docker/volumes
配下)
-
- drivers
.env
以下コマンドで、コンテナ毎に変わる値を抽出します。COMPOSE_PROJECT_NAME
は、任意の文字列を入れてください。(今回は docker-splunk
)
cat <<EOF > .env
COMPOSE_PROJECT_NAME=docker-splunk
SPLUNK_PASSWORD=$(\
keepassxc-cli show ${keepass_db} "splunk-admin" \
-sa password -k ${keepass_key} --no-password \
)
SPLUNK_APPS_URL=$(\
ls -1 *.tgz *.spl 2>/dev/null \
| xargs -I {} echo -n "/tmp/{}," \
| sed 's/,$/\n/' \
)
EOF
コンテナ定義確認
.env
で指定した値が、docker-compoese
定義に反映されていることを確認します。
docker compose config
出力結果
name: docker-splunk
services:
splunk:
environment:
SPLUNK_APPS_URL: 作業ディレクトリに格納されたApp・アドオン用ファイル
SPLUNK_LICENSE_URL: ./Splunk.License
SPLUNK_PASSWORD: KeepassXCで自動生成されたパスワード
SPLUNK_START_ARGS: --accept-license
image: splunk/splunk:latest
networks:
default: null
ports:
- mode: ingress
host_ip: 127.0.0.1
target: 8000
published: "18000"
protocol: tcp
- mode: ingress
host_ip: 127.0.0.1
target: 8089
published: "18089"
protocol: tcp
volumes:
- type: bind
source: /home/maihai/docker-splunk
target: /tmp
bind:
create_host_path: true
- type: volume
source: splunk-etc
target: /opt/splunk/etc
volume: {}
- type: volume
source: splunk-var
target: /opt/splunk/var
volume: {}
networks:
default:
name: docker-splunk_default
volumes:
splunk-etc:
name: docker-splunk_splunk-etc
driver: local
splunk-var:
name: docker-splunk_splunk-var
driver: local
コンテナ構築・起動
docker compose up -d --build
60秒程度で構築完了→起動します。ブラウザで http://127.0.0.1:18000/
にアクセスし、ログインしてください。
- ユーザ名 - admin
- パスワード -
docker compose config
コマンドで出力されたSPLUNK_PASSWORD
の値
参考 : その他コマンド
頻繁にDockerを使う方にとっては今更ですが、念のため。
# コンテナ起動(再利用する場合)
docker compose start
# コンテナ停止
docker compose stop
# コンテナ削除
docker compose down
# コンテナ削除(ボリュームも消す場合)
docker compose down --volumes
Discussion