[Splunk][ハンズオン]Deployment Serverを使ったForwarderの一括管理


はじめに

Splunkには,Forwarderの一括管理のためにDeployment Serverという機能があるよ.
覚え書き:Forwarderの一括管理にそれぞれの役割を書いたから読んでみてね.

この記事ではハンズオン形式でDeployment Serverを使ったForwarderの管理を行うよ.
実施環境の差異を無くしたいからDocker使うよ.

完成イメージ

合計3つのコンテナを使うよ.

  • コンテナ1 : Forwarderの管理をしながらデータの受信を担当
  • コンテナ2,3 : Forwarder.データをコンテナ1に送る

Dockerをホストするマシンはなんでもいいよ.

このハンズオンの注意点

  • 想定している読者は「DockerLinuxの経験が少ないけど突然Forwarderの管理を任されて困っている方」だよ.
    初めての人でも出来るように必要なコマンドは詳細に記載しているよ.

  • ハンズオンで実行するコマンドにはどのマシンで操作するか分かりやすくするためにコマンドの前にマシン名を明記しているよ.

    • (host): Dockerをホストしているマシン
    • (splunk_ds): Development Serverを入れているマシン.完成イメージのコンテナ1にあたる.
    • (forwarder1 or 2): Forwarderを入れるマシン.完成イメージのコンテナ2と3にあたる.
    • 例: ホストマシンのターミナルで" docker pull centos "を実行
(host) $ docker pull centos 

用意するもの

大体15分くらいで準備は終わるよ.

(host) $ docker pull splunk/splunk
(host) $ docker pull centos

実施手順

大まかな実施内容は以下の5ステップだよ
1. コンテナ作成
2. Deployment Serverの初期設定
3. Forwarder の初期設定
4. Deployment ServerからForwarderを一括設定
5. Forwarderの動作確認

Step.1 コンテナ作成

Dockerにコンテナを3つ作るよ.

  • Splunk( Deployment Serverが含まれてるよ)
(host) $ docker run -d -p 8000:8000 --name splunk_ds -e SPLUNK_START_ARGS=--accept-license -e SPLUNK_PASSWORD=password splunk/splunk:latest

初回起動時のライセンス同意や管理者アカウントのパスワード設定もやっちゃうよ.立ち上がるのに1分くらいかな.ちなみに --nameで設定した splunk_ds のds は deployment server の頭文字だよ.
1分くらい待ったら,ブラウザで localhost:8000 にアクセスして動作確認をしよう.
Splunkへのログイン画面が表示されればOKだよ.(ID:admin, Pass:passwordでログイン可能)

  • CentOS 2つ
(host) $  docker run --hostname forwarder1.sample --name forwarder1  -it centos 
(host) $  docker run --hostname forwarder2.sample --name forwarder2  -it centos 

作成直後はコンテナに接続した状態になるよ.設定は後から行うので一度抜けるよ(Ctl + P, Ctl + Q)
ちなみに --hostname で指定した名前はSplunkで受信データを確認する時に見ることになるよ.

最後に各コンテナのIP確認しておこう.

(host) $ docker inspect splunk_ds
(host) $ docker inspect forwarder1
(host) $ docker inspect forwarder2

こんな感じで色々な情報が出るんだけど,今みたいのは IPAddress のところだけ.

俺がやったときはこんな感じだったよ

  • splunk_ds → 172.17.0.2
  • forwarder1 → 172.17.0.3
  • forwarder2 → 172.17.0.4

---- これでコンテナ作成は終わりだよ. ----

Step.2 Deployment Serverの初期設定

ポートの確認

Deployment Serverを設定するのに必要なポートを確認するよ.
必要なポートは2つあってそれぞれの役割はこんな感じだよ.

  • 管理ポート
    Splunkの裏側で動いているプロセスが使うポート. Deployment ServerForwarder間の設定ファイルのやりとりはこれを使うよ.デフォルトは8089だよ.
  • データ受信ポート
    Forwarder からのデータを受け付けるポート.デフォルトは9997だよ.

確認手順は以下の通りだよ.

1. Splunkにログイン
2. 設定>サーバ設定>全般設定 > 管理ポート欄 → 管理ポート
画面を触るのが手間だったら下のリンクにアクセスしてみてね
http://localhost:8000/ja-JP/manager/system/server/settings/settings?action=edit

3. 設定>転送と受信>受信の設定 → データ受信ポート
画面を触るのが手間だったら下のリンクにアクセスしてみてね
http://localhost:8000/ja-JP/manager/launcher/data/inputs/tcp/cooked

サーバークラスの作成

Deployment Serverには「このIPにはこの設定ファイルを送る」という定義をサーバークラスって呼んでいるよ.以降の手順を一通り実施すれば感覚的に役割が理解できるから大丈夫だよ.

1. Splunkの 設定>フォワーダー管理 を開く

この画面でサーバークラスを作るんだけど
一番最初の状態(=配信するモノが何も無い状態)だと設定もなにもできないよ.不便だよね.

なので,まずは機能を有効化するよ.

2. splunk_dsのターミナル を開く

(host) $ docker exec -it -u splunk splunk_ds bash

3. deployment-appsに適当なディレクトリを作って”何かある状態”にする

(splunk_ds) $ mkdir -p /opt/splunk/etc/deployment-apps/tmp_app

4. もう一度 Splunkの 設定>フォワーダー管理 を開く

サーバークラスの設定ができるようになってるから,次はサーバークラスを作っていくよ.

5. フォワーダー管理画面 で サーバークラス を作る
表示されるフォームに以下の内容を設定して保存してね.

  • 名前:centos
  • Appの追加:さっき作った「tmp_app」を指定
  • クライアントの追加:「含める」欄に * を設定

*を設定すると全てのアドレスからの接続を許可するよ.
当然セキュリティリスクが高まるから,本当はIPをきちんと指定した方が良いよ.

---- ここまででDeployment Serverの初期設定は終わりだよ. ----

Step.3 Forwarder の初期設定

コンテナ forwarder1 と forwarder2 に対してForwarderの設定をしていくよ.
Forwarderにはいくつか種類があるんだけど,中でも軽量で早くセットアップが出来るUniversal Forwarderを今回は使うよ.
以下の手順を2つのコンテナ両方に実施してね.

1. Universal Forwarder のDL用コマンドを取得
ブラウザで公式HPのlinux用rpmパッケージのDLページにアクセスしてね.
https://www.splunk.com/en_us/download/universal-forwarder.html#tabs/linux

ページを開いたら Linux 64bit版 rpmのDownload Nowをクリックしてね.自動的にDLされるファイルは使わないよ.
画面が切り替わったら USEFULL TOOLS をクリックして,*Download via Command Line (wget) *をクリック. 表示される DL用コマンド を適当なテキストファイルにコピペしたらOK.

2. コンテナに接続

(host) $ docker exec -it forwarder1 bash

3. wgetをインストール
さっき取得したコマンドを実行するために必要なツールをインストールするよ

 (forwarder1 or 2) $ yum -y install wget

4. Universal Forwarder をDL
次にさっき取得したコマンドを実行しよう.
カレントディレクトリに splunkforwarder-X.X.X-XXXX.rpmというファイルが作成されるよ.

5. Universal Forwarder をインストール
作成されたファイルをインストールしよう.

(forwarder1 or 2) $ yum -y install splunkforwarder-X.X.X-XXXX.rpm 

rpmファイルにはDLしてきたファイルを指定してね.
成功すれば /opt/splunkforwarder ディレクトリにインストールされるよ.

6. パスを通す
インストールしたUniversal Forwarderの実行を楽にするためにパスを通しておこう.

(forwarder1 or 2) $ echo 'export PATH=/opt/splunkforwarder/bin:$PATH' >> ~/.bash_profile
(forwarder1 or 2) $ source ~/.bash_profile

7. Splunkを起動
早速インストールした実行しよう.実行途中に管理者IDとパスワードの入力を求められるから好きな値を設定してね.後で使うから忘れないようにね.

(forwarder1 or 2) $ splunk start

8. Deployment Serverを指定
Universal ForwarderDeployment Serverをリンクさせよう.

(forwarder1 or 2) $ splunk set deploy-poll splunk_dsのIP:管理ポート
例:$ splunk set deploy-poll 172.17.0.2:8089

9. Splunkを再起動
リンクさせたら再起動が必要だよ.

(forwarder1 or 2) $ splunk restart

ここまで設定すれば,Universal ForwarderDeployment Serverに対して設定変更の有無をポーリングするようになるよ.デフォルトのポーリング頻度は1分毎だよ.
ちなみに,Deployment ServerとリンクしたForwarderのことをDeployment Clientって言うよ.

10.接続確認
正しくリンクされていることをsplunk_ds のクラスサーバー画面で確認するよ
http://localhost:8000/ja-JP/manager/system/deploymentserver?t=2
クライアントの数が増えていればリンク成功だよ.
コンテナ forwarder1 or 2 の /opt/splunkforwarder/etc/apps ディレクトリ配下をみてみると前手順で作成した tmp_app が作成されているから,確かに Deployment Server とClient間で設定ファイルが同期されていることがわかるよ.

ここまでの同様の手順を forwarder1, 2 両方に対して行ってね.

---- ここまででForwarderの初期設定は終わりだよ. ----

Step.4 Deployment ServerからForwarderを一括設定

いよいよForwarderの設定を行うよ.
手順を1回実施するだけで 2つのForwarderに設定が反映されるよ.
今回はCentOSの/var/logディレクトリ配下をSplunkに送信するように設定するよ.

1.splunk_dsに接続

(host) $ docker exec -it -u splunk splunk_ds bash

2.Forwarderの設定を作成
Forwarderに送る設定ファイルは アプリ というまとまりで作っていくよ.
だからまずはアプリ用のディレクトリを作成して,その中に設定ファイルを作っていくよ.
この手順で使う2つの設定ファイルはこのページの一番下に載せているよ.

(splunk_ds) $ mkdir -p /opt/splunk/etc/deployment-apps/forwarder_sample_app/local
(splunk_ds) $ cd /opt/splunk/etc/deployment-apps/forwarder_sample_app/local
(splunk_ds) $ vi inputs.conf 
(splunk_ds) $ vi outputs.conf

3.作成したアプリをサーバークラスに追加
アプリを作成したら,後はサーバークラスに設定して終わり!

  1. フォワーダー管理画面でアプリの編集画面を開く
    http://localhost:8000/ja-JP/manager/system/deploymentserver?t=0
  2. サーバークラスを追加 を選択して「centos」を指定
  3. 同じページにある インストール後 欄の2つにチェックを入れて保存
    ここのチェックを入れ忘れると思ったように動かないから注意してね.

これでサーバークラスcentosに紐づいているForwarderに対して作成した設定ファイルが配信されるよ.
設定ファイルを受け取ったクライアントは設定を適用するために自動的に再起動されるよ.

1つ注意点があって,アプリを初めて追加した時には自動的に配信されるんだけど
追加済みのアプリの中身を編集した時はDeployment Serverを再起動しないと配信されないよ.
Splunk自体を再起動してもいいんだけど手間がかかるから下のコマンドがお勧めだよ.

$ splunk reload deploy-server  

アプリが配信されてから数分程度でCentOSの/var/logディレクトリ配下がSplunkに送信されるよ.

---- これでDeployment ServerからForwarderを一括設定は完了だよ. ----

Step.5 Forwarderの動作確認

最後にForwarderから送信されたデータを確認するよ.

サーチ画面の「データサマリ」を開くと
コンテナ forwarder1, 2 に設定したホスト名が表示されているよ.
それぞれをクリックすることでデータを詳しくサーチすることが出来るよ.

例えばクエリに source="/var/log/dnf.rpm.log Installed” と追加すれば
手順の中でインストールした wget や splunkforwarder のパッケージ名を確認できるね.

---- これでハンズオンは完了だよ. ----

終わりに

Splunkには,色々なマシンからデータを集めるForwarderっていう便利な機能があるんだけど時間が経つにつれて欲しいデータや追加する設定が増えていって管理が大変になるよ.

Forwarderとなるサーバに1度だけDeployment Serverを設定しておけばSplunkに仕事を任せられて楽ができるよ.

AnsibleやChefのようなサーバーの構成管理ツールを使えば同じようなことが出来るけど,Splunkを管理するならSplunkの機能を使う方が短時間でやりたいことが出来ると俺は思うよ.

後片付け

使い終わったコンテナは用が済んだら削除しておこう.

1.コンテナ停止

(host) $ docker stop splunk_ds
(host) $ docker stop forwarder1
(host) $ docker stop forwarder2

2.コンテナ削除

(host) $ docker rm splunk
(host) $ docker rm forwarder1
(host) $ docker rm forwarder2

付録

Step.4-2 Deployment ServerからForwarderを一括設定 で使用する設定ファイル

inputs.conf
[monitor:///var/log]
disabled=false
outputs.conf
[tcpout]
defaultGroup=forwarder-sample-group
[tcpout:forwarder-sample-group]
server=172.17.0.2:9997
[tcpout-server://172.17.0.2:9997]