【Splunkラボ】Splunk Cloudに中継Forwarder経由でログ転送するための手順

こんにちは。torippy1024です。
本日は、Splunk Cloudを利用する上で最も基本の構成(と思われる)中継Forwarder経由でのログ転送を行ってみます。

最も基本の構成ながら、これを構築することができると、inputs.confやoutputs.confなどの各種設定について理解できるようになるため、とても勉強にはいい内容だなあと思ったため、メモとして残しておきます。

【2024/10/21追記】
こちらの記事では、中継ForwarderにUniversal Forwarderを使用しており、実際に動作確認もしています。
しかし、Splunk Cloud上にSplunk Add-on for Unix and LinuxやSplunk Add-on for Microsoft Windowsを導入する場合、中継ForwarderをHeravy Forwarderにするか、IndexerにAppがインストールされたことを確認するためにサポートチケットによる起票が必要となる可能性があります。
私が検証した際は確認しなくとも動作したのですが、本番環境に導入する際は、中継ForwarderをはUniversal ForwarderでなくHeravy Forwarderとするか、サポートチケットによる起票が必要となる可能性があります。
https://docs.splunk.com/Documentation/AddOns/released/UnixLinux/Install#Where_to_install_this_add-on
https://docs.splunk.com/Documentation/AddOns/released/Windows/Install#Where_to_install_this_add-on
https://docs.splunk.com/Documentation/AddOns/released/Overview/SplunkCloudinstall#Paid_Splunk_Cloud_Platform_deployments


### 【1】構成図

![スクリーンショット 2024-10-16 16.32.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/e5898eb7-30d6-87b4-9986-3893577230c6.png)


構成図は上記の通りです。
ログ対象サーバーをWindows Server 2022とUbuntu 22.04とし、中継ForwarderはUniversal ForwarderとしてUbuntu 22.04上で動作させます。

そしてインターネット経由でSplunk Cloudにログを転送する形式です。
オンプレを想定したシステム内部の通信は、9997/tcpにて通信を行います。
インターネット経由での通信も、同じく9997/tcpで通信します。SSLにて暗号化を行っています。

今回の環境はAWSにて払い出しを行いました。
インストールを楽にするため、全サーバーがインターネット接続可能に設定しています。
実際の作業の際は、インターネット接続できないサーバー向けのインストールメディアの配布など、いくつか気を付ける必要があると思います。

また、AWS EC2リソース量については、CPU/メモリ/ディスクはSplunkの最低ハードウェア要件以下でも十分動作します。
私は4台とも、t3.medium(2vCPU/4GBメモリ)+50GB SSDのものを使って検証に成功しました。

### 【2】Splunk Cloudトライアル環境の申し込み
Splunk Cloudは、今回はトライアル環境を利用します。
以下のURLより、トライアル環境を払い出してください。14日間使用可能です。
また(現時点では)、トライアル期限が切れたら3回までは再度申し込み可能です。
https://www.splunk.com/ja_jp/download/splunk-cloud.html

### 【3】Splunk Cloudトライアル環境の設定
Splunk Cloudに対する設定は以下の通りです。
(1)ログ取得のために必要なApp/Add-onのインストール
(2)Universal Forwarderに導入するクレデンシャルの取得

#### (1)ログ取得のために必要なApp/Add-onのインストール
今回は、Windows ServerとUbuntuのログを取得します。
必要なApp/Add-onとして、とりあえず以下をインストールします。

##### Splunk Add-on for Unix and Linux

![スクリーンショット 2024-10-16 11.04.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/0774efc1-1206-1e5a-454b-a8fc8086b452.png)

splunkbase：
https://splunkbase.splunk.com/app/833
公式ドキュメント：
https://docs.splunk.com/Documentation/AddOns/released/UnixLinux/About

##### Splunk Add-on for Microsoft Windows

![スクリーンショット 2024-10-16 11.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/382e922b-d423-f9a6-09a1-1ab1af25c3b7.png)

splunkbase：
https://splunkbase.splunk.com/app/742
公式ドキュメント：
https://docs.splunk.com/Documentation/AddOns/released/Windows/AbouttheSplunkAdd-onforWindows

インストール手順は、Splunk CloudのWeb画面から「App」-「他のAppのサーチ」を選択し、「Splunk Add-on for Unix and Linux」または「Splunk Add-on for Microsoft Windows」でAppを検索して、「インストール」を選択するだけです。
(正式名称で検索しても、なぜか別Appが上位に表示されたり、ヒットしないことがあるので、「Unix and Linux」または「Windows」で検索してみたり、検索バーの下の「App Type」の「Add-on」にチェックをいれるなどして探してみてください。)

また、インストール時には、Splunkアカウントを使用した認証も必要となります。
(何に使っているのかいまいち不明ですが、ダウンロード数の集計やユーザー毎のApp利用傾向や関連などを分析しているのかもしれません)

#### (2)Universal Forwarderに導入するクレデンシャルの取得

次に、「App」-「Universal Forwarder」を選択し、「Download Universal Forwarder Credentials」を選択してクレデンシャルをダウンロードします。
「splunkclouduf.spl」という名前のファイルがダウンロードできます。

![スクリーンショット 2024-10-16 11.19.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/7452f0a1-6fce-7325-e7f5-4a5a5e9e5c2e.png)


### 【4】中継Forwarderの設定
次に、中継Forwarderへの設定を行います。作業内容は以下の通りです。
AWS上にEC2を作成する作業は省略しています。
(1)Universal Forwarderのインストール
(2)ログ取得のために必要なApp/Add-onのインストール
(3)Splunk Cloudから取得したクレデンシャルのインストール


#### (1)Universal Forwarderのインストール
参考URL：
https://docs.splunk.com/Documentation/Forwarder/latest/Forwarder/Installanixuniversalforwarder#Install_the_universal_forwarder_on_Linux

最初にユーザーとフォルダを作成します。今回は、Splunk起動用のユーザーとしてsplunkfwdを作成することにします。

```
ssh torippy1024@xx.xx.xx.xx
sudo mkdir /opt/splunkforwarder
sudo useradd -m splunkfwd
sudo passwd splunkfwd
(パスワードを入力)
```

次に、wgetでインターネット経由でUniversal Forwarderメディアを取得し、インストールして一回起動して停止します。これらの初回の処理はroot権限で実行し、そのあとSplunkを停止させてから権限変更を行う、という順でインストールを行います。

最新版のUniversal ForwarderメディアのURLは、以下より確認できます。
https://www.splunk.com/en_us/download/universal-forwarder.html
以下のコマンドではSplunkの管理者ユーザー名とパスワードをadmin/passwordとしています。

```
wget -O splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz "https://download.splunk.com/products/universalforwarder/releases/9.3.0/linux/splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
sudo /opt/splunkforwarder/bin/splunk stop
```

Universal Forwarderを一度停止した後にもろもろの設定変更を行います。
フォルダの権限変更、OS起動時のブートスタートの設定、ログ対象サーバーからのリスニングポートの設定です。
```
sudo chmod -R 755 /opt/splunkforwarder
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder
sudo /opt/splunkforwarder/bin/splunk enable boot-start -user splunkfwd
sudo /opt/splunkforwarder/bin/splunk start
sudo /opt/splunkforwarder/bin/splunk enable listen 9997
sudo /opt/splunkforwarder/bin/splunk display listen
```

#### (2)ログ取得のために必要なApp/Add-onのインストール
次に、splunkbaseから「Splunk Add-on for Unix and Linux」Add-onを取得し、解凍して中継Forwarderの「/opt/splunk/etc/apps/」フォルダに配置します。
https://splunkbase.splunk.com/app/833

このAdd-onを導入するのは、中継Forwarder側のログをSplunkに転送するためです。不要であればインストールをしなくても構いません。

このAppはwgetで取得できなかったので、私は一度自分のローカルPC(macbook)にtgzファイルをダウンロードしてから転送する形式をとりました。

Appの転送(別ターミナルを開いてローカルPC上で実行)
```
scp -r /Users/torippy1024/splunk-add-on-for-unix-and-linux_920.tgz torippy1024@xx.xx.xx.xx:/home/torippy1024/splunk-add-on-for-unix-and-linux_920.tgz
```

解凍し、フォルダを「/opt/splunk/etc/apps/」に配置して権限変更すればインストールは完了です。

Appのインストール
```
ssh torippy1024@xx.xx.xx.xx
tar -xzvf splunk-add-on-for-unix-and-linux_920.tgz
sudo mv Splunk_TA_nix /opt/splunkforwarder/etc/apps/
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder/etc/apps/Splunk_TA_nix
sudo chmod -R 755 /opt/splunkforwarder/etc/apps/Splunk_TA_nix
```

また、デフォルトの状態では、特に何の情報もSplunkに転送する設定にはなっていません。Forwarderがログを転送するための入力は、Splunk_TA_nix/local/inputs.confで定義されています。まずSplunk_TA_nix/localフォルダを作成し、テンプレートであるSplunk_TA_nix/defaultフォルダからinputs.confをコピーしてからファイルを修正します。
```
sudo mkdir /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo cp -R /opt/splunkforwarder/etc/apps/Splunk_TA_nix/default/inputs.conf /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local/inputs.conf
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo chmod -R 755 /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local/inputs.conf
```

どこのメトリックや項目を有効にするかは要件次第となるのですが、とりあえずお試しとしては、ファイル先頭から少し下に進んだ先にある「############### Event Inputs ###################」欄にある項目を、片っ端からdisabled = 1(無効)となっている設定を、disabled = 0(有効)に変更しておくことにすればよいです。
(一部の設定ではdisabled=trueとなっているので、ここはdisabled=falseとします)

>【2024/12/04追記】
上記はconfファイルをマニュアル修正する手順です。
が、実はsetupスクリプトが存在しており、こちらを実行すれば一発で全ての項目を有効化できるようです。面倒くさい人はとりあえず以下コマンドを実行してメトリック以外の全項目を有効化してしまうことをお勧めします。(Windows版にはこのsetupスクリプトはないようです)
sudo /opt/splunkforwarder/bin/splunk cmd sh /opt/splunkforwarder/etc/apps/Splunk_TA_nix/bin/setup.sh --enable-all
参考リンク：
https://docs.splunk.com/Documentation/AddOns/released/UnixLinux/Enabledataandscriptedinputs#Enable_data_and_scripted_inputs_with_the_command_line


編集が完了したら再起動します。ただ次の手順でも実施するので、まとめて再起動しても構いません。
```
sudo /opt/splunkforwarder/bin/splunk restart
```

#### (3)Splunk Cloudから取得したクレデンシャルのインストール

こちらも上記のAdd-onインストールと内容はほぼ同じです。
というか、クレデンシャルと言いつつ、実体は証明書の鍵が含まれるApp/Add-onなので、手順はほぼ同じになります。

クレデンシャルの転送(別ターミナルを開いてローカルPC上で実行)
```
scp -r /Users/torippy1024/splunkclouduf.spl torippy1024@xx.xx.xx.xx:/home/torippy1024/splunkclouduf.spl
```

クレデンシャルファイルの展開
```
ssh torippy1024@xx.xx.xx.xx
tar xvf splunkclouduf.spl
ls -la
```

展開されたファイル名を確認します。「100_prd-p-abcde_splunkcloudのような名前のフォルダが生成されているはずです。
この「prd-p-abcde」は、払い出されているSplunk Cloudのドメイン名先頭となっています。

クレデンシャルのインストール
```
sudo chown -R splunkfwd:splunkfwd 100_prd-p-abcde_splunkcloud
sudo chmod -R 755 100_prd-p-abcde_splunkcloud
sudo /opt/splunkforwarder/bin/splunk install app 100_prd-p-abcde_splunkcloud -auth admin:password
ls -la /opt/splunkforwarder/etc/apps/
```

再起動し、Splunk cloudのURIが登録されていることを確認します。
Universal Forwarderを再起動し、以下のコマンドを実行して、転送先サーバーにSplunk CloudのURLが表示されれば正常に設定されています。
```
sudo /opt/splunkforwarder/bin/splunk restart
sudo /opt/splunkforwarder/bin/splunk list forward-server
(Splunk CloudのURLがActive Forwardsに登録されていることを確認)
```

念のため、oenshotコマンドを使ってログを転送できるか確認してみます。
```
echo "Error-Test-Intermediate-Forwarder" > error-test-intermediate-forwarder.txt
sudo /opt/splunkforwarder/bin/splunk add oneshot error-test-intermediate-forwarder.txt -auth admin:password
```

上記のコマンドが正常に終了していれば、Splunk Cloud上で、mainインデックスに「Error-Test-Intermediate-Forwarder」というイベントが登録されています。


### 【5】ログ対象サーバーの設定(Windows)
最後に、ログ対象サーバー(Windows/Ubuntu)への設定を行います。こちらもほぼ中継Forwarderとやることは変わりませんが、Windowsのほうがおそらく楽です。

(1)Universal Forwarderのインストール
(2)ログ取得のために必要なApp/Add-onのインストール

#### (1)Universal Forwarderのインストール

Windows版のUniversal Forwarderには、どうやら「Splunk Add-on for Microsoft Windows」が同梱されているようです。このため、Universal ForwarderをすればAdd-onも同時にインストールできます。

参考URL：
https://docs.splunk.com/Documentation/Forwarder/latest/Forwarder/InstallaWindowsuniversalforwarderfromaninstaller

Powershellを管理者権限で開き、以下コマンドを実行してインストールします。
最新版のダウンロード先URLは以下より確認してください。
https://www.splunk.com/en_us/download/universal-forwarder.html

```
cd C:\tmp
wget -O splunkforwarder-9.3.1-0b8d769cb912-x64-release.msi "https://download.splunk.com/products/universalforwarder/releases/9.3.1/windows/splunkforwarder-9.3.1-0b8d769cb912-x64-release.msi"
msiexec.exe /i splunkforwarder-9.3.1-0b8d769cb912-x64-release.msi AGREETOLICENSE=yes /quiet
."C:\Program Files\SplunkUniversalForwarder\bin\splunk.exe" stop
."C:\Program Files\SplunkUniversalForwarder\bin\splunk.exe" edit user admin -password password -auth admin:changeme
."C:\Program Files\SplunkUniversalForwarder\bin\splunk.exe" start
```

上記のコマンドを実行すると、サイレントインストールが実行されます。
デフォルトの管理者ユーザー名と初期パスワードはadmin/changemeになりますので、admin/password変更しています。

```
cd "C:\Program Files\SplunkUniversalForwarder\bin"
./splunk add forward-server xx.xx.xx.xx:9997
./splunk list forward-server
(xx.xx.xx.xx:9997がActive Forwardsに登録されていることを確認)
./splunk restart
```

#### (2)ログ取得のために必要なApp/Add-onのインストール

「Splunk Add-on for Microsoft Windows」は、「Splunk_TA_windows」という名前のフォルダで、etc\apps\フォルダ配下に格納されています。Universal Forwarderに同梱されている場合はすでにインストールされています。念のため確認します。

「Splunk_TA_windows 」フォルダが存在することを確認
```
ls "C:\Program Files\SplunkUniversalForwarder\etc\apps\"
```

「Splunk_TA_windows 」フォルダが存在していれば、あとは設定変更するだけです。inputs.confをコピーして編集します。

inputs.confを、Splunk_TA_windows\default\からSplunk_TA_windows\local\にコピー(GUI上で操作しても問題なし)
```
cp "C:\Program Files\SplunkUniversalForwarder\etc\apps\Splunk_TA_windows\default\inputs.conf" "C:\Program Files\SplunkUniversalForwarder\etc\apps\Splunk_TA_windows\local\inputs.conf"
```
その後、中継Forwarderのときと同様に、必要な項目を有効化します。
CLIで編集してもいいんですが、まあGUIでメモ帳使って編集してしまうほうが楽な気がします。
とりあえずお試しとしては、ファイル先頭にある「###### OS Logs ######」欄や、「###### Forwarded WinEventLogs (WEF) ######」欄にある項目を有効化すれば良いです。

編集が完了したら再起動します。
```
./splunk restart
```

動作確認手順も中継Forwarderのときとほぼ同様です。
```
echo "Error-Test-Windows-Forwarder" >C:\tmp\error-test-windows-forwarder.txt
./splunk add oneshot C:\tmp\error-test-windows-forwarder.txt
```

### 【6】ログ対象サーバーの設定(Ubuntu)
ほぼ中継Forwarderとやることは変わりません。設定が少し異なるだけです。
(1)Universal Forwarderのインストール
(2)ログ取得のために必要なApp/Add-onのインストール

#### (1)Universal Forwarderのインストール

参考URL：
https://docs.splunk.com/Documentation/Forwarder/latest/Forwarder/Installanixuniversalforwarder#Install_the_universal_forwarder_on_Linux

Universal Forwarderのインストール(中継Forwarderと全く同じ)
```
ssh torippy1024@xx.xx.xx.xx
sudo mkdir /opt/splunkforwarder
sudo useradd -m splunkfwd
sudo passwd splunkfwd
(パスワードを入力)
wget -O splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz "https://download.splunk.com/products/universalforwarder/releases/9.3.0/linux/splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
sudo /opt/splunkforwarder/bin/splunk stop
```

Universal Forwarder設定変更もほぼ同様です。
一点だけ異なる点があり、中継Forwarderでは、リスニングポートを9997として設定しましたが、ログ収集サーバー側では、ログの転送先として、中継ForwarderのIPアドレスとポートを指定することになります。
```
sudo chmod -R 755 /opt/splunkforwarder
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder
sudo /opt/splunkforwarder/bin/splunk enable boot-start -user splunkfwd
sudo /opt/splunkforwarder/bin/splunk start
sudo /opt/splunkforwarder/bin/splunk add forward-server xx.xx.xx.xx:9997
sudo /opt/splunkforwarder/bin/splunk list forward-server
(xx.xx.xx.xx:9997がActive Forwardsに登録されていることを確認)
```

#### (2)ログ取得のために必要なApp/Add-onのインストール
中継Forwarderと同じく、「Splunk Add-on for Unix and Linux」Add-onをインストールします。こちらの手順も全く同じです。

Appの転送(別ターミナルを開いてローカルPC上で実行)
```
scp -r /Users/torippy1024/splunk-add-on-for-unix-and-linux_920.tgz torippy1024@zz.zz.zz.zz:/home/torippy1024/splunk-add-on-for-unix-and-linux_920.tgz
```

Appのインストール
```
ssh torippy1024@xx.xx.xx.xx
tar -xzvf splunk-add-on-for-unix-and-linux_920.tgz
sudo mv Splunk_TA_nix /opt/splunkforwarder/etc/apps/
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder/etc/apps/Splunk_TA_nix
sudo chmod -R 755 /opt/splunkforwarder/etc/apps/Splunk_TA_nix
```

inputs.confの修正
```
sudo mkdir /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo cp -R /opt/splunkforwarder/etc/apps/Splunk_TA_nix/default/inputs.conf /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local/inputs.conf
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo chmod -R 755 /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local
sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_nix/local/inputs.conf
(必要な項目を有効化)
```

再起動
```
sudo /opt/splunkforwarder/bin/splunk restart
```

動作確認
```
echo "Error-Test-Linux-Forwarder" > error-test-linux-forwarder.txt
sudo /opt/splunkforwarder/bin/splunk add oneshot error-test-linux-forwarder.txt -auth admin:password
```

### 【7】動作確認/参考情報
oneshotコマンドを実行していれば、ログが転送されていることは確認できています。
これ以外に、Splunk Webから、「App」-「Cloud Monitoring Console」を選択し、「Forwarder」-「Forwarder:Deployment」を選択すると、Splunk Cloudから各Forwarderの情報を参照することもできます。

![スクリーンショット 2024-10-16 17.00.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/aa01fba6-edaa-f0ad-43f4-9a1e78fdb6e6.png)

Splunk Cloudを使用する上で、中継Forwarderはほぼ必須というくらいよく使われます。
よかったらぜひ、自分で手を動かして構築してみることをお勧めします。