Universal Forwarderを使わずにStream データを収集する方法

はじめに
---
- UF(Universal Forwarder)を使ったSplunk Stream収集については以前こちらで紹介しました
    - [Splunk Streamを使って http通信のWire Dataを可視化
](https://qiita.com/odorusatoshi/items/1a9efe222ba6e8c4c454)
- 今回はUniversal Forwarderをインストールしないで、**Stream Forwarder(streamfwd)**というツールを使って収集します。
- 別名、**Independent Stream Forwarder(ISF)**とも呼びますが、同じものを指します。
- ISFを使う背景は以下のケースです
    - 監視対象はLinuxのみ（streamfwdはwindowsでは使えないです）
    - なるべくモジュール負荷をかけたくない
    - Streamデータ以外は収集する予定がない（ファイル監視などは行わない）
    - 導入がcurlコマンド叩くだけで楽。

構成イメージ
---
<img width="1256" alt="スクリーンショット 2020-08-11 12.05.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/f02fedc5-6882-25ac-485f-d874664da2bc.png">

- ポイント
    - ISFをServerにインストールして、指定NICをモニターして、監視対象プロトコルのデータのみスニファします
    - スニファしたデータは[HEC（HTTP EVENT COLLECTOR）](https://www.youtube.com/watch?v=9awwyjORWO8)機能を使ってPUSHでインデクサーに転送します
    - ISFのダウンロード、設定の更新などは8000番ポートで定期チェックを行い、更新があればSH/DSからダウンロード＆適用します


設定方法
---
### SH/DSにSplunk Streamをインストール
- ※ISFを展開する台数が数十台以上になる場合、ping pollingインターバルの負荷がバカにならなくなります。検証はSHでもいいですが、本格展開時にはDSを利用することを推奨します。
![スクリーンショット 2020-08-11 12.15.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/6c411885-8e11-8f74-2a8d-c9009e3c5599.png)

### IDXにもSplunk Streamをインストール
![スクリーンショット 2020-08-11 12.15.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/6c411885-8e11-8f74-2a8d-c9009e3c5599.png)

### SH/DSのHECトークンをコピーして、IDXの以下ファイルにペースト保存
- SH/DSのHECトークンでなくてもいいかもしれません。この作業はIDXクラスタなどで複数台の時でも、全IDX同じHECトークンを設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/19698959-eaf6-bb41-54fd-795a37a5d1b3.png)

```:inputs.conf
(IDX作業)

・inputs.confの編集
# vi /opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf

[http://streamfwd]
disabled = 0
#token = 818f7de2-873c-4d54-9e81-d7ca79ac1541 (←前のを削除)
token = 9a3b1541-b974-44b7-bc3d-50422c38de61

・splunkサービス再起動
# /opt/splunk/bin/splunk restart
```

### SH/DSからIDXに対して分散サーチ設定を行う
- 分散サーチ » サーチ ピアにてIDXを指定

### SH/DSのDistributed Forwarder機能で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/276b9f87-db29-5cb3-46f0-085c1242e426.png)

- Create New Groupを押して、監視対象グループを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/95a0dd1c-04f5-f4a7-2c52-29780accd5aa.png)

**ポイント：**
・HTTP Event Collector Auto config を**Off**
・Endpoint Urlに、IDXサーバを指定したHECのURLを設定

- 監視対象のプロトコルにチェックを入れる
![スクリーンショット 2020-08-11 15.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/ae15e624-e4c1-30b8-2d1e-5fbc5bbffada.png)

- 設定を配るForwarderのマッチング条件を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/2c79b287-0337-dd48-0656-08c6ecb8b277.png)

- RegexでForwarderIDが一致するものを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/4d15657d-50c3-e226-b88f-23cbb63a54d4.png)

- これで設定を配る準備が整いました。

### ISFをLinuxにインストール

- Install Stream Forwardersをクリック

![スクリーンショット 2020-08-11 15.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/d89b5bc7-fe41-0d09-3d0c-3909d24b2333.png)

- curlコマンドをコピーして、インストール先Linux環境でそのまま実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/49f8b700-407c-f842-c814-e5ce2fff9f22.png)

- install中の応答は、全部YesでOK

- streamfwd.logにERRORがないかチェック

```:log
# tail -f /opt/streamfwd/var/log/streamfwd.log
```

- データが転送されることを確認(IDX、SH/DSとそれぞれチェックすると良い)
![スクリーンショット 2020-08-11 15.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/371a1512-4bf9-697c-9107-a096bb3a64b7.png)


- SH/DSのHEC設定は不要なのでdisableにしておく
    - データ入力 » HTTP イベントコレクタにて、streamfwdを**無効**化


ハマったポイント
---
- 「streamfwd.confを直接編集してindexerとtokenを指定したけど、データが転送されない」
    - 下記マニュアルを参考に設定をしていましたが、うまくいかず。
        - [Use manual HEC configuration]( https://docs.splunk.com/Documentation/StreamApp/7.2.0/DeployStreamApp/InstallStreamForwarderonindependentmachine)
    - streamfwd.confへの直接編集は、[templete](https://docs.splunk.com/Documentation/StreamApp/7.2.0/DeployStreamApp/UseStreamconfigurationtemplates)を利用する際に使うものらしいです。

- streamfwdが意図通りに動かないときに何度も削除、導入をしました。その際の削除コマンドはこちらです。これできれいサッパリ削除できます。

```shell:
service streamfwd stop
chkconfig --del streamfwd
rm -rf /opt/streamfwd/
rm -rf /etc/init.d/streamfwd 
```

所感
---
- UFと違ってstreamfwdの方が、導入して設定が適用されてから、データ収集されるまで早いと感じる
    - デフォルトのpingインターバル5秒が早い要素だと思われるが、これは展開したあとは頻繁に更新するわけでなければ時間を長くしてもよいと思われる