Splunk に Forwarder がいっぱいあったので整理した

Splunkにデータを送信アーキテクチャを考える際、Forwarderはたくさんあるけど何が違うのか、何を使えばいいのかを整理しました。
2024.03.19

Splunkではエージェント型のソフトウェアをデバイスにインストールしてデータを送信することができます。
このエージェントは Forwarder と呼ばれるのですが、Splunkのマニュアルを読み進めていると、Forwarder ってつく名前が色々出てきて何がなんだか分からなくなりがちです。
そしてぼくも混乱しました。
そこで、Forwarder あるいはForwarderぽいやつを整理してみました。

まず、

Forwarder あるいはForwarderぽいやつ

をリストしてみます。

  • Heavy Forwarder
  • Universal Forwarder
  • Light Forwarder
  • Intermediate Forwarder
  • Deployment Server

いきなりまとめ

整理した結果になります。

用語 概要
Universal Forwarder データ転送を行うためのエージェント。Universal Forwarder のインストーラを使う。軽量で最適化されているため、通常はこれ。
Heavy Forwarder データ転送を行うためのエージェント。Splunk Enterprise のインストーラを使う。特殊な要件がある時にこれを使う。
Light Forwarder データ転送を行うためのエージェント。現バージョンでは使われていない。
Intermediate Forwarder データ転送を中継する役割として構成された中継フォワーダー。Universal Forwarder でも Heavy Forwarder でも設定可能。
Deployment Server Forwarder を管理するために構築するサーバー。Splunk Enterprise のインストーラを使う。同じサーバーを Forwarder とすることはできない

それぞれの補足説明については以下にまとめています。
※以降に紹介する公式ドキュメントの参考URLは最新バージョンか利用しているバージョンに合わせてご確認ください。

Universal Forwarder

専用のインストーラー(データ転送に特化した軽量なエージェント)を使い、データの転送を行います。 UIは無く、機能もHeavy Forwarderに比較して抑えられているため、軽量でシンプルな処理を行います。

構成イメージになります。Indexer部分はSplunk Cloudだったり、Splunk Enterpriseだったりします。

一般的なデータ転送においては、Heavy Forwarderに比べ、エージェントのワークロード、アーキテクチャの複雑性、管理のしやすさの観点でUniversal Forwarderに優位性が高いので、こちらを採用することが推奨されています。

独自プロトコルのTCPか、HTTPプロキシ環境の場合はHTTPOUTという機能でHTTPまたはHTTPS経由でデータを送信することができます。

参考情報:
https://docs.splunk.com/Documentation/SplunkCloud/latest/Data/UsetheHTTPEventCollector

Splunkのブログでも、ほとんどのユースケースにおいて、Universal Forwarderを使うように記載されています。

インストール動画:
https://www.splunk.com/en_us/download/splunk-enterprise/thank-you-enterprise.html

ユニバーサル vs ヘビー:
https://www.splunk.com/ja_jp/blog/tips-and-tricks/universal-or-heavy-that-is-the-question.html

参考情報:
https://docs.splunk.com/Documentation/Forwarder/9.2.0/Forwarder/Deploy

Splunk Cloudへのデータ送信は、以下の方法でのデータ送信になります。

  • tcpout (Outbound tcp/9997)
  • httpout (Outbound HTTPS 443)

通常Forwarderでは、tcpout(tcp/9997)宛にデータを送信するように使われますが、HTTPプロキシを経由させないと外に出れない環境の場合も多いかと思います。
httpoutはHTTPプロトコルで通信(経由)させるために利用することができます。
Splunk Cloudの環境ではHTTPS 443宛にデータを送信することが可能です。
ちなみに Splunk では前者のtcpoutをS2Sプロトコル、後者のhttpoutをHEC (HTTP Event Collector)と呼ばれたりもします。
これも覚えておくとドキュメントを呼んだりする上で役に立ちます。

Splunk Enterpriseへのデータ送信の際も、tcpoutとhttpoutの2種類となりますが、扱えるポートなどは柔軟に変更することが可能となります。

参考情報:
https://docs.splunk.com/Documentation/Forwarder/9.2.0/Forwarder/Configureforwardingwithoutputs.conf

またSplunk Cloudへデータを送信する際は、Universal Forwarder Credential PackageをSplunk Cloudからダウンロードしてデータ送信するデバイス上に保存する必要があります。
Universal Forwarderのインストール時に必要な手順になりますので、注意が必要です。

参考情報:
https://docs.splunk.com/Documentation/Forwarder/9.2.0/Forwarder/ConfigSCUFCredentials

Heavy Forwarder

Splunk Enterprise のインストーラと同じものを使い、Forwarder としてデータの転送を行います。
UIを持たせることができ、データのマスク処理やイベントの分割処理を行ってからIndexerに送ることが可能で、Indexer側の処理を肩代わりして負荷を軽減する構成をとることができます。
Heavy Forwarder上でSplunk Enterpriseと同じような検索をすることも可能です。

Splunk Cloudを利用していて、Heavy Forwarderを構成したい場合は、インストール時に別途ライセンスの入力が必要になるので、あらかじめSplunkサポートからライセンスを入手する必要があります。

インストール方法と設定についてはこちらの公式ブログでも紹介されていますので、Heavy Forwarderを構成したい場合はこちらを見ながらセットアップできます。

セットアップ:
https://www.splunk.com/ja_jp/blog/tips-and-tricks/installation-and-configuration-of-heavy-forwarder-with-data-preprocessing-method-using-ingest-action.html

参考情報:
https://docs.splunk.com/Documentation/Splunk/9.2.0/Forwarding/ConfigureaforwardertouseaSOCKSproxy

Splunk Cloud/Splunk Enterpriseへのデータ送信は、以下の方法でのデータ送信になります。

  • tcpout (Outbound tcp/9997)
  • SOCKS5 Proxy

※Heavy Forwarderから各(Splunk Cloud)、(Splunk Enterprise)への送信ポートについてはHTTPによるデータ送信はサポートされていないので注意が必要です。
その代わりにSOCKS5での送信が可能です。

参考情報:
https://docs.splunk.com/Documentation/Splunk/9.2.0/Forwarding/EnableforwardingonaSplunkEnterpriseinstance

Light Forwarder

軽量化のためHeavy Forwarderの機能を制限したForwarder。
Splunk Enterprise 6.0で非推奨となっているため現在では利用されなくなっています。
Universal ForwarderがLight Forwarderの置き換えとなっているようです。
ドキュメント内でたまに出てくるのですが、現在は使われていないものと思って良いと思います。

参考情報:
https://docs.splunk.com/Documentation/Splunk/9.2.0/Forwarding/Deployaforwarder

Intermediate Forwarder

他のForwarderから受け取ったデータを中継する役割に割り当てたForwarderのことを言います。
Universal ForwarderまたはHeavy ForwarderをIntermediate Forwarderとすることができます。

構成イメージになります。

中継させるユースケースについては色々とありますが、主には、下記のような場合が多いかと思います。

  • セキュリティ要件として、プライベートネットワークからパブリックネットワークを経由してIndexerに送信する必要がある場合(Universal ForwarderとHTTPプロキシなどでも要件を満たせる場合もあります)
  • データの転送中にデータのマスキング、変換、エンリッチメントが必要な場合

Universal Forwarder編セットアップ:
https://docs.splunk.com/Documentation/Forwarder/9.2.0/Forwarder/Configureanintermediateforwarder

Heavy Forwarder編セットアップ:
https://docs.splunk.com/Documentation/Splunk/9.2.0/Forwarding/Configureanintermediateforwarder

Intermediate Forwarder Benefits:
https://docs.splunk.com/Documentation/SVA/current/Architectures/Intermediaterouting

Deployment Server

Deployment ServerはForwarderを管理するためのサーバーになり、顧客側の環境にSplunk Enterprise をインストールして使います。
またDeployment ServerはForwarderとして動作させることはできません
Forwarderのグルーピング設定アップデートなどの運用管理を一元的に行うことができます。
Forwarderが数台であれば問題ないと思いますが、例えば50台以上など管理する対象が増えてきた場合に、Deployment Serverをたてて管理することを検討します。

構成イメージになります。

また、Splunk Cloudを利用していて、Universal Forwarderを使ったデータ送信する際には、Universal Forwarder Credential Packageを各デバイスで設定する必要があります。
Deployment Serverがあれば、一括で配布・設定が可能になるので、便利になります。
Deployment ServerはForwarderからtcp/8089のインバウンドの開放と、Deployment ServerからSplunk CloudまたはSplunk Enterpriseへのtcp/9997のアウトバウンドの開放が必要になります。

参考情報:
https://www.splunk.com/ja_jp/blog/platform/adding-a-deployment-server-forwarder-management-to-a-new-or-existing-splunk-cloud-or-splunk-enterprise-deployment.html

https://docs.splunk.com/Documentation/Splunk/9.2.0/Updating/Deploymentserverarchitecture

以上、SplunkのForwarderについてのまとめになります。