【Splunk】Forwarderタイプと中継Forwarderとして利用する場合の判断基準

こんにちは。torippy1024です。
今日はSplunkにデータを転送するためのエージェントであるForwarderについて調べたことを書きます。
特に中継Forwarderを利用する際、Forwarderに何を利用するべきかがわからないので、参考にしていただければ嬉しいです。

### Forwarderとは何か
SplunkにおけるForwarderとは、ログ取得対象サーバに導入するエージェントのことです。
Splunkにおいて、ログデータを保管するコンポーネントはIndexerと呼ばれますが、このIndexerに向けてログを転送する役割を持っているコンポーネントがForwarderです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/0c241dc9-d0fa-03e0-9c22-d78ef9237724.png)

画像引用元：https://docs.splunk.com/Documentation/Forwarder/9.3.1/Forwarder/Abouttheuniversalforwarder

### Forwarderの種類

Forwarderには、Universal Forwarder(UF)、Heavy Forwarder(HF)の2種類があります。
(以前はLight Forwarderと呼ばれる種類もあったが、現在は推奨されていないため記載を省略)

それぞれの特徴を表にしたものは以下となります。

|名称|特徴|メリット|デメリット|
|---|---|---|---|
|Universal Forwarder|軽量でシンプル。データ転送に特化したエージェント|軽量なのでリソースを消費しない。機能がシンプルであるので導入が簡単。|データ転送する機能に特化しており、データの加工(Parse)などは実施できない。|
|Heavy Forwarder|重量で多機能。実体はSplunk Enterpriseであり、その機能を制限してForwarderとして利用する形態|ただデータを転送するだけでなく、データのマスキングなどの加工(Parse)処理や、Heavy Forwarder内部へのインデックス保管(ライセンスは必要)などを行うことができる。|重量なのでリソースを消費する。多機能である分、初期導入時や運用においてさまざまな設定について検討が必要。|

参考：
https://docs.splunk.com/Documentation/Splunk/latest/Forwarding/Typesofforwarders

### 中継ForwarderとしてのForwarderの選択

Splunk Cloudを利用する際には、多くの場合に中継Forwarder(Intermediate Forwarder)を設定することになります。これは、ログ取得対象サーバーの全てをインターネット接続することが許可されていない場合に、プロキシのような役割を持つForwarderとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/39370799-ca75-541b-60d6-0385d489f226.png)

画像引用元：
https://docs.splunk.com/Documentation/SVA/current/Architectures/Intermediaterouting#Intermediate_forwarding

この際、Universal ForwarderとHeavy Forwarder、どのような判断基準でどちらを選択すべきなのかということは、難しい問題です。

以下のブログを読むと、"Keep it simple stupid(KISS)"の原則に則れば、Heavy Forwarderを使用しなければならない要件がない限りは、Universal Forwarderを使うほうがよい、という考えがあるようです。
https://www.splunk.com/ja_jp/blog/tips-and-tricks/universal-or-heavy-that-is-the-question.html

しかし、公式ドキュメントの以下の記載を読むと、Intermediate Forwarderのデフォルト実装はHeavy forwardersを使うことだとも記載されています。
> Using heavy forwarders (HFs) as intermediates is the default implementation of a splunkd-based intermediate forwarding tier. However, you should consider both heavy and universal options to find the best solution for your needs.
(ヘビー フォワーダー (HF) を中間として使用することは、splunkd ベースの中間転送層のデフォルトの実装です。ただし、ニーズに最適なソリューションを見つけるには、ヘビー オプションとユニバーサル オプションの両方を検討する必要があります。)[機械翻訳]

https://docs.splunk.com/Documentation/SVA/current/Architectures/Intermediaterouting#Heavy_and_universal_intermediate_forwarders

どちらのドキュメントにも、重要なのは要件だ、ということが書かれています。
Heavy Forwarderでなければ満たせない要件があれば当然Heavy Forwarderを選択することになりますが、そうでない場合は常にUniversal Forwarderを選択すればいいのか、明確な要件がなくてもHeavy Forwarderを選択するメリットがあるのか、などは公式ドキュメントからは見つけられませんでした。

### まとめ

中継Forwarderを利用する場合の詳細なベストプラクティスについて、残念ながら公式ドキュメントからは見つけることができませんでした。

しかしながら、個人的な意見としては、機密データのマスキングなどの処理を行う要件がないのであればHeavy Forwarderはオーバースペックであり設定も大変であるため、基本はUniversal Forwarderを採用し、どうしても必要な場合(または将来要件がある場合)に、Heavy Forwarderを採用する方針がいいのかな、と考えています。
(KISSの方針に従うという考えです)

### 中継Forwarderを構成する場合の参考リンク
https://docs.splunk.com/Documentation/Forwarder/latest/Forwarder/Configureanintermediateforwarder
https://docs.splunk.com/Documentation/Splunk/latest/Forwarding/Configureanintermediateforwarder