Zenn
🙌

【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 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 配下)
  • splunk-var
    • drivers
      • local - ホスト側のファイルシステムを使用(/var/lib/docker/volumes 配下)

.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

ログインするとコメントできます