[Splunk]splunk-ansibleを検証する
目的・背景
GitHubで公開されている「splunk-ansible」を検証します
参考サイト
splunk/splunk-ansible
CentOSへPython、pipをインストール
環境
AWS EC2 RHEL8を利用しました。
必要パッケージのインストール
$ sudo yum update -y
python3のインストール
$ sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
$ sudo yum search python37
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
警告: 一致するものが見つかりません: python37
No matches found
$ sudo yum search python36
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
================================================= N/S matched: python36 ==================================================
python36-cairo-devel.x86_64 : Libraries and headers for python36-cairo
:
wsgi-plugin-python36-tornado.x86_64 : uWSGI - Plugin for Tornado (Python 3.6) support
uwsgi-plugin-python36u.x86_64 : uWSGI - Plugin for Python support
Name and summary matches only, use "search all" for everything.
$ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
$ sudo python3.6 -m pip install --upgrade pip
$ python3.6 --version
Python 3.6.8
$ python3 --version
Python 3.6.8
$ python3.6 -m pip --version
pip 20.2.3 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
$ python3 -m pip --version
pip 20.2.3 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
$ pip install requests
dockerのインストール
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum install docker
$ docker --version
Docker version 1.13.1, build 64e9980/1.13.1
$ sudo systemctl start docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2020-09-29 06:07:09 UTC; 1min 10s ago
Docs: http://docs.docker.com
docker-composeのインストール
$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.22.0, build f46880fe
ユーザ・グループの作成
$ sudo groupadd splunk
$ sudo groupadd ansible
$ cat /etc/group | grep splunk
splunk:x:1001:
$ cat /etc/group | grep ansible
ansible:x:1002:
$ sudo useradd splunk -m -g 1001
$ sudo useradd ansible -m -g 1002
$ sudo passwd splunk
ユーザー splunk のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 辞書の単語に基づいています
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
$ sudo passwd ansible
ユーザー ansible のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 辞書の単語に基づいています
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
$ sudo usermod -aG wheel ansible
$ sudo usermod -aG wheel splunk
$ su - ansible
パスワード:
最後の失敗ログイン: 2020/09/29 (火) 05:25:57 UTC日時 pts/0
最後の正しいログインの後に 1 回の失敗ログインの試行があります
$ groups
ansible wheel
$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for ansible: P@ssw0rd
Last login: Tue Sep 29 04:51:58 UTC 2020 from softbank126150083139.bbtec.net on pts/0
# whoami
root
# exit
$ exit
$ sudo groupadd docker
$ sudo gpasswd -a splunk docker
# sudo gpasswd -a ansible docker
$ sudo systemctl restart docker
splunkコンテナイメージの取得と起動
splunkユーザに切り替え
$ sudo su - splunk
splunkイメージの取得
$ docker pull splunk/splunk
Using default tag: latest
Trying to pull repository docker.io/splunk/splunk ...
latest: Pulling from docker.io/splunk/splunk
e96e3a1df3b2: Pull complete
:
splunkコンテナの起動
$ docker run -d --name splcontainer -p 8000:8000 splunk/splunk:latest no-provision
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c341d8d176f splunk/splunk:latest "/sbin/entrypoint...." 8 seconds ago Up 7 seconds (health: starting) 8065/tcp, 8088-8089/tcp, 8191/tcp, 9887/tcp, 0.0.0.0:8000->8000/tcp, 9997/tcp splcontainer
インストール媒体の取得
Splunk Enterpriseの媒体を取得
$ sudo wget -O splunk-8.0.6-152fb4b2bb96-Linux-x86_64.tgz 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=8.0.6&product=splunk&filename=splunk-8.0.6-152fb4b2bb96-Linux-x86_64.tgz&wget=true'
Splunk UNIVERSAL Forwarderの媒体を取得
$ sudo wget -O splunkforwarder-8.0.6-152fb4b2bb96-Linux-x86_64.tgz 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=8.0.6&product=universalforwarder&filename=splunkforwarder-8.0.6-152fb4b2bb96-Linux-x86_64.tgz&wget=true'
デフォルトパラメータの取得
コンテナ内にあるパラメータファイルをローカルにコピー
$ docker run -it splunk/splunk:latest create-defaults > default.yml
$ ll
合計 4
-rw-rw-r--. 1 centos centos 3467 9月 29 06:12 default.yml
パラメータファイルの設定
このサイトを参照し、必要なパラメータを設定
splunkセクションに以下を追加
splunk:
role: splunk_universal_forwarder
build_location: /opt/ansible/splunkforwarder-8.0.6-152fb4b2bb96-Linux-x86_64.tgz
apps_location: null
password: changeme
roleには以下が設定可
splunk_standalone
splunk_search_head
splunk_search_head_captain
splunk_indexer
splunk_deployer
splunk_cluster_master
splunk_deployment_server
splunk_heavy_forwarder
splunk_license_master
splunk_universal_forwarder
splunk_monitor
- パラメータファイル内のパスに注意
UniversalForwarderだと「/opt/splunkforwarder/〜」に変更する
変更しないとUniversalForwarderが解凍された「/opt/splunkforwarder/」ではなく、「/opt/splunk/」を参照し処理が実行されるためインストール処理がエラーで中断してしまう
設定後のパラメータファイルとインストール媒体をコンテナ内に配置
$ docker cp ./default.yml splcontainer:/opt/ansible/
$ docker cp ./splunk-8.0.6-152fb4b2bb96-Linux-x86_64.tgz splcontainer:/opt/ansible/
$ docker cp ./splunkforwarder-8.0.6-152fb4b2bb96-Linux-x86_64.tgz splcontainer:/opt/ansible/
(課題)プレイブックの実行
ansible-playbookコマンドはエラーなく終了するがコンテナ内にインストールされてしまいました。
インベントリファイルの修正でローカルまたは他サーバにインストールできそうですが未検証です。
$ docker exec -it splcontainer bash -c 'cd /opt/ansible; ansible-playbook --inventory localhost, --connection local site.yml --extra-vars "@default.yml"'
(参考)コンテナ内のAnsibleをローカルにコピー
$ sudo docker cp splcontainer:/opt/ansible .
(応急処置)コンテナではなくローカルで実行
上記のように、コンテナで実行するとコンテナ内に構築されてしまいました。
公式のガイドにも説明がありましたが、コンテナ内からローカルにAnsible一式を取得し実行させてみました。
なお、既にローカルにSplunk関連サービスが起動中の場合、インストール時にエラーが発生します。
そのため、起動中のSplunkサービスを停止してから実行する必要があります。
(例)Splunk Universal Forwarderがインストール済みの場合
$ cd /opt/splunkforwarder/bin
$ ./splunk stop
$ cd ansible
$ cp ../default.yml ./
$ cp ../splunk-8.0.6-152fb4b2bb96-Linux-x86_64.tgz ./
$ cp ../splunkforwarder-8.0.6-152fb4b2bb96-Linux-x86_64.tgz ./
$ ansible-playbook --inventory localhost, --connection local site.yml --extra-vars "@default.yml"
- 実行後、インストールに使用したファイル(.tgz)は削除されます。
再実行するときは再度媒体をコピーする必要がある
おわりに
コンテナ内でAnsibleを実行させ、Splunkをインストールすることができませんでしたが、Ansibleを使いSplunkをインストールさせることはできました。
何をインストールするのか、インストール先はどこにするのかなどはパラメータファイルである「default.yml」に記載します。
インベントリファイル、パラメータファイルを用途ごとに用意すればAnsibleによる冪等性を保ったデプロイバリエーションが広がりそうです。