5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Splunk】DockerでSplunkのログ転送ができる環境(All-In-One, UF)をほぼCLIで構築してみる

Posted at

どうも、おはこんばんわ。

今更ながらDockerでSplunkを実装したかったので、やってみた。

##バージョン
・Docker 2.3.0.3 (Windows) Download link

・Splunk Enterprise 8.0.4.1 Docker hub
 バージョン毎のレポジトリも存在するので、気になる方はDocker Hubで検索してみてください。

・Splunk Universal Forwarder 8.0.4.1 Docker hub
 バージョン毎のレポジトリも存在するので、気になる方はDocker Hubで検索してみてください。

##Splunkの構成
++++++++++++++++++++++++++
+ Client < === > AIO < === > UF +
++++++++++++++++++++++++++
AIO = Splunk All-In-One
UF = Splunk Universal Forwarder

##使用ポート

通信名 送信元 宛先 UDP/TCP ポート番号 備考
Splunk Web Client AIO TCP 8000 Default
ログ転送 UF AIO TCP 9997 Default
Deploy polling UF AIO TCP 8089 Default
App配布 AIO UF TCP 8089 Default
*詳しくは、右記公式マニュアルを参照してください。link

##Splunk Enterprise のイメージをダウンロードしてみる

docker pull splunk/splunk:latest

1秒くらいで終わります。

##ダウンロードしたイメージを確認してみる

docker images
REPOSITORY TAG IMAGE ID CREATED 
splunk/splunk latest 74d1b0a6924f X weeks ago

ちゃんといますね。

##Splunk Enterprise を run してみる

docker run -d -p 8000:8000 -e "SPLUNK_START_ARGS=--accept-license" -e "SPLUNK_PASSWORD=password" --name splunk splunk/splunk:latest

検証用なので、ほぼデフォルトで稼働させます。

##ステータスも確認してみる

docker exec -it -u splunk splunk /bin/bash -c "/opt/splunk/bin/splunk status"
splunkd is running (PID: 687).
splunk helpers are running (PIDs: 688 702 764 787).

どうやら最初からデーモンが開始されている様です。

##ついでにバージョンを確認してみる

docker exec -it -u splunk splunk /bin/bash -c "/opt/splunk/bin/splunk version" 
Splunk 8.0.4.1 (build ab7a85abaa98)

##Splunk Web にアクセスしてみる

<IP_ADDR>:8000

デフォルトのユーザ情報は以下の通りです。
Username = admin
Password = password

Splunk のホーム画面が表示されたらOKです。
*画像が貼れなくて申し訳ない。

表示できたらUFの実装をサクサクやってみましょう!

##Universal Forwarder のイメージをダウンロードしてみる

docker pull splunk/universalforwarder:latest

これも1秒くらいで終わります。

##ダウンロードしたイメージを確認してみる

docker images
REPOSITORY TAG IMAGE ID CREATED 
splunk/universalforwarder latest 596e5124bd2b X weeks ago

##Universal Forwarder を runしてみる

docker run -d -p 9997:9997 -e "SPLUNK_START_ARGS=--accept-license" -e "SPLUNK_PASSWORD=password" --name uf splunk/universalforwarder:latest

Enterprise と同様デフォルトで稼働させます。

##ステータスを確認してみる

docker exec -it -u splunk uf /bin/bash -c "/opt/splunkforwarder/bin/splunk status"
splunkd is running (PID: 727).
splunk helpers are running (PIDs: 729).

##ついでにバージョンを確認してみる

docker exec -it -u splunk uf /bin/bash -c "/opt/splunkforwarder/bin/splunk version"
Splunk Universal Forwarder 8.0.4.1 (build ab7a85abaa98)

##UF から All-In-One にログの転送する為の準備①をしてみる(All-In-One側の受信ポート設定)

#App作成コマンド
docker exec -it -u splunk splunk /bin/bash -c "mkdir -p /opt/splunk/etc/apps/{<APP_NAME>/local,/<APP_NAME>/metadata}"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/apps/<APP_NAME>/local/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/apps/<APP_NAME>/local/inputs.conf"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[ui]\\nis_visible" "=" "false\\n\\n[launcher]\\nversions" "=" "1.0.0\\n" >> /opt/splunk/etc/apps/<APP_NAME>/local/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[]\\naccess" "=" "read" ":" "[" "\*" "]," "write" ":" "[" "\*" "]\\nexport" >> /opt/splunk/etc/apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[splunktcp://9997]\\nconnection_host" "=" "ip\\n" >> /opt/splunk/etc/apps/<APP_NAME>/local/inputs.conf"

#確認コマンド
docker exec -it -u splunk splunk /bin/bash -c "ls -lR /opt/splunk/etc/apps/<APP_NAME>"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/apps/<APP_NAME>/local/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/apps/<APP_NAME>/local/inputs.conf"

<APP_NAME>、はお好みに変更してください。
*センスの無いコマンドはご愛敬で。。。

##UF から All-In-One にログの転送する為の準備②をしてみる(UF側で Target Deployment Server)

docker exec -it -u splunk uf /bin/bash -c "/opt/splunkforwarder/bin/splunk set deploy-poll <IP_ADDR>:8089"

<IP_ADDR>は、「All-In-One」のIPアドレスを入力します。

##UF から All-In-One にログの転送する為の準備③をしてみる(UF配布用ログ転送Appの作成)

#App作成コマンド
docker exec -it -u splunk splunk /bin/bash -c "mkdir -p /opt/splunk/etc/deployment-apps/{<APP_NAME>/local,/<APP_NAME>/metadata}"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/deployment-apps/<APP_NAME>/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/deployment-apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/deployment-apps/<APP_NAME>/local/outputs.conf"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[ui]\\nis_visible" "=" "false\\n\\n[launcher]\\nversions" "=" "1.0.0\\n" >> /opt/splunk/etc/deployment-apps/<APP_NAME>/local/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[]\\naccess" "=" "read" ":" "[" "\*" "]," "write" ":" "[" "\*" "]\\nexport" "=" "system\\n" >> /opt/splunk/etc/deployment-apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[tcpout]\\ndefaultGroup" "=" "test\\nuseACK" "=" "true\\n\\n[tcpout:test]\\nserver" "=" "<IP_ADDR>\\n" >> /opt/splunk/etc/deployment-apps/<APP_NAME>/local/outputs.conf"

#確認コマンド
docker exec -it -u splunk splunk /bin/bash -c "ls -lR /opt/splunk/etc/deployment-apps/"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/deployment-apps/<APP_NAME>/local/app.conf"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/deployment-apps/<APP_NAME>/metadata/local.meta"
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/deployment-apps/<APP_NAME>/local/outputs.conf"

<IP_ADDR>は、「All-In-One」のIPアドレスを入力します。
<APP_NAME>、はお好みに変更してください。

上記で作成したAppをUFに配布されます。

##UF から All-In-One にログの転送する為の準備④をしてみる(サーバクラスの作成)

#serverclass.conf作成コマンド
docker exec -it -u splunk splunk /bin/bash -c "touch /opt/splunk/etc/system/local/serverclass.conf"
docker exec -it -u splunk splunk /bin/bash -c "echo -e "[general]\\nrestartSplunkd" "=" "true\\nrestartSplunkWeb" "=" "false\\nstateOnClient" "=" "enabled\\n\\n[serverClass:<CLASS_NAME>]\\nwhitelist.0" "=" "<IP_ADDR>\\n\\n[serverClass:<CLASS_NAME>:app:<APP_NAME>]\\n" >> /opt/splunk/etc/system/local/serverclass.conf"

#確認コマンド
docker exec -it -u splunk splunk /bin/bash -c "cat /opt/splunk/etc/system/local/serverclass.conf"

<APP_NAME>は、「UF配布用ログ転送Appの作成」のと一致させてください。
<IP_ADDR>は、「UF」のIPアドレスを入力します。
<CLASS_NAME>は、お好みに変更してください。

##UF から All-In-One にログの転送する為の準備⑤をしてみる(デプロイ)

docker exec -it -u splunk splunk /bin/bash -c "/opt/splunk/bin/splunk reload deploy-server"
Splunk username: admin
Password:
Reloading serverclass(es).

サクセス!!

##UF が Deployment Server と疎通ができたか確認してみる
Splunk Web にアクセスして、確認してみましょう。
・アクセスURLは、右記です。http://localhost:8000/ja-JP/manager/system/deploymentserver
・アクセス方法は、「Splunk Web」→右上「設定」→「フォーワーダー管理」に遷移した後、「クライアント」に存在していれば疎通OKです。

##ログの転送確認をしてみる
最後の確認も Splunk Web で確認します。
・アクセスURLは、右記です。http://localhost:8000/ja-JP/app/search/search
・アクセス方法は、「Splunk Web」→左部App「Search & Reporting」
・アクセス後、サーチバーへ以下のサーチ分を実行してみましょう。

index=_internal clientip="<UF_IP_ADDR>"

結果が表示されたらOKです。
*画像が無いのは申し訳ないです。。。

##おわりに
Dockerで構築ってすっごい簡単ですし、不要になったら消せるので、気軽に試してみてください!
その際に参考になれば幸いです。

また、今回はUFの内部ログのみ収集をしていますが、様々なログを収集できるので、詳しくは公式マニュアルか他の方々のサイトを参考にしていただければと思います。
もし機会があれば、そのあたりも書こうかなって思います。
(何時迄にはと言ってない。。。)

10-4, 10-10

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?