こんにちは。torippy1024です。
今日はSplunkにデータを転送するためのエージェントであるForwarderについて調べたことを書きます。
特に中継Forwarderを利用する際、Forwarderに何を利用するべきかがわからないので、参考にしていただければ嬉しいです。
Forwarderとは何か
SplunkにおけるForwarderとは、ログ取得対象サーバに導入するエージェントのことです。
Splunkにおいて、ログデータを保管するコンポーネントはIndexerと呼ばれますが、このIndexerに向けてログを転送する役割を持っているコンポーネントがForwarderです。
画像引用元: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となります。
この際、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 ベースの中間転送層のデフォルトの実装です。ただし、ニーズに最適なソリューションを見つけるには、ヘビー オプションとユニバーサル オプションの両方を検討する必要があります。)[機械翻訳]
どちらのドキュメントにも、重要なのは要件だ、ということが書かれています。
Heavy Forwarderでなければ満たせない要件があれば当然Heavy Forwarderを選択することになりますが、そうでない場合は常にUniversal Forwarderを選択すればいいのか、明確な要件がなくてもHeavy Forwarderを選択するメリットがあるのか、などは公式ドキュメントからすぐには読み取れません。
Heavy Forwarderを選択したほうがよいケース
公式ドキュメントやコミュニティの回答を読み漁り、いろいろな情報を総合すると、以下の場合においては、中継ForwarderにHeavy Forwarderを選択した方がよいように思えます。
- (1) 中継Forwarderでデータのマスキングやドロップをする必要がある場合
- 最も多いケースかもしれません。Universal Forwarderではデータの加工やドロップができないため、Heavy Forwarderを選択する必要があります。ただ最近だと回避策としてIngest Action(https://help.splunk.com/en/splunk-cloud-platform/get-started/get-data-in/9.3.2411/improve-the-data-input-process/use-ingest-actions-to-improve-the-data-input-process )と呼ばれる機能がSplunk Cloudには実装されており、この機能を使うことでデータのマスキングやドロップを行うことができる場合もあります)
- (2) 中継Forwarder上にもデータをインデックスとして保管したい場合
- (3) HEC(HTTP Event Collector)を使用して中継Forwarderがデータを受信する必要がある場合
- Universal ForwarderはHECを搭載していないため、HEC(HTTPS)によってデータ受信することができません(https://docs.splunk.com/Documentation/SplunkCloud/latest/Data/ScaleHTTPEventCollector#Where_to_place_HEC )。この場合もHeavy Forwarderを使用する必要があります。
- (4)オンプレミス環境上の中継Forwarder上にAdd-onを導入し、Add-onを使ってオンプレミス環境上のデータを収集してSplunk Cloudに転送する必要がある場合
- 一部のデータ収集Add-onは、Universal Forwarder上では動作せず、Heavy Forwarderを使用しなけれならないことがあります。例えば、DBからデータを収集してSplunkに転送するAdd-onであるDB Connect(https://splunkbase.splunk.com/app/2686 )はその一例です。
Universal Forwarderを選択してもよいケース
上記のHeavy Forwarderを選択したほうがよいケース(1)-(4)に該当せず、データを中継して転送する要件がシンプルである場合は、Universal Forwarderを選択してもよいと思われます。
慎重にする場合はHeavy Forwarderを選択するのがよいと思われます。
(ただ、Heavy Forwarderはそれなりに多くのリソースを必要としサイジングも難しいので、それはそれで難点でもあります。数百GB/dayレベルまでのデータ取り込み量であれば、4vCPU/8GBメモリで十分そうではあるのですが・・・・・・)
まとめ
中継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