株式会社セキュアイノベーション
Menu

セキュリティコラム

  • エンドポイント
  • ネットワーク

公開:2025.08.27 11:00 | 更新: 2025.08.27 04:16

Splunk Universal Forwarderからログ転送時の負荷分散について

セキュアイノベーション:セキュリティブログ「Splunk Universal Forwarderからログ転送時の負荷分散について」セキュアイノベーション:セキュリティブログ「Splunk Universal Forwarderからログ転送時の負荷分散について」

はじめに

日頃から、Splunkの構築をしているエンジニアです。
最近、SplunkのエージェントであるUniversal Forwarderの負荷分散技術について問い合わせをもらうことが多く、これを機に調べてみました。

本記事では、SIEM製品として広く使用されているSplunkと、そのログ収集にUniversal Forwarderを使用した複数のindexerへの負荷分散機能についての設定例、および簡易なデモ環境で確認した挙動について紹介します。

INDEX

Splunkとは
Universal Forwarderとは
負荷分散の設定内容
検証概要
検証手順
動作検証:「送信間隔(autoLBFrequency) を 5 分に設定した際、定期的にindexerが切り替わるか」
動作検証:「接続中のindexerが停止した際、自動的に他のindexerへ切り替わるか」
まとめ
参考資料

Splunkとは

Splunkは、ITインフラやビジネスシステムから収集したデータを検索・分析・可視化できるSIEM製品として活用されています。

ウェブサイトやアプリケーション、センサー、各種デバイスなど多様なソースからデータを取り込み、データストリームにインデックスを付け、それを表示および検索可能な一連の個別のイベントに解析します。

Universal Forwarderとは

監視対象のサーバやクライアントなど任意のマシン上にインストールされ、そのマシンのログをindexerに送信するための軽量エージェントです。ログをリアルタイムで監視・転送することが可能です。

Universal Forwarderのデータ送信時における負荷分散とは

複数のindexerに対してログデータを分散送信します。
この機能により、ログ処理の水平スケーリングが可能になり、全体のパフォーマンス向上が期待できます。また、障害発生時には利用可能な別のindexerへ自動的に切り替えることで、可用性の確保にも寄与します。

注意すべき点

1. 各indexerは全体データの一部を保持するため、検索時には分散検索の設定が必要です。

2. Universal Forwarderとindexer間の負荷分散を実現する際には、外部のロードバランサーは使用しないでください。

負荷分散の設定内容

Universal Forwarderで負荷分散を行う際は、outputs.confに以下の設定を記述します。

設定説明
autoLBFrequency<integer>indexerを切り替えるかを(秒)単位で指定します。
デフォルト値は30秒。
autoLBVolume
※今回の検証では未使用
<integer>indexerに送信するデータ量(バイト)を設定します。この量に達した時点で、送信先のindexerを切り替えます。
※今回の検証では未使用
useACKtrue/falseindexerがデータを受信したことを明示的に確認(ACK)する機能。indexerが応答を送信するまで、送信した各イベントのコピーを保持します。この設定が有効(true)な場合、Universal Forwarderは確認応答を受信しなかった場合、他のindexerへ切り替えます。 デフォルトは false

※送信間隔(autoLBFrequency)とデータ量(autoLBVolume)の設定をどちらも設定した場合は、以下の優先順位で負荷分散を行います。

1. 送信データ量(autoLBVolume)が上限に達した場合は、送信間隔(autoLBFrequency)の経過前でもindexerを切り替えます。

2. 送信データ量(autoLBVolume)が上限に達していない場合は、送信間隔(autoLBFrequency)が経過した時点でindexerを切り替えます。

検証概要

検証環境:
- Universal Forwarder:1台
- indexer(非クラスタ構成):3台(indexer01 / 02 / 03)

検証目的:
1. 送信間隔(autoLBFrequency) を 5 分に設定した際、定期的にindexerが切り替わるか。
2. データ受信中のindexerが停止した際、自動的に他のindexerへ切り替わるか。

検証手順

1. Universal Forwarderの設定
outputs.confに以下の設定を行い、indexer3台と接続する

[tcpout] 
defaultGroup = default-autolb-group 
[tcpout:default-autolb-group] 
server = indexer01:9997,indexer02:9997,indexer03:9997 
autoLBFrequency = 300 #5分間 
useACK = true

2. 受信ログの可視化(indexerごとに確認)
各indexerにて、以下の SPL をリアルタイム検索で実行:

index=main 
| timechart span=1m count by main
  • タイムレンジ:リアルタイム20分前
  • 確認目的:indexerごとの1分間区切りの、受信イベントを確認

動作検証:「送信間隔(autoLBFrequency) を 5 分に設定した際、定期的にindexerが切り替わるか」

イベント受信状況(時間帯と接続indexer)

時刻範囲接続先indexer
開始~14:49indexer02
14:49~14:54indexer01
14:54~15:03indexer02
15:04~終了indexer03

以下のキャプチャは
indexer01(黄色),indexer02(緑),indexer03(赤)でデータ取得時間(1分)を囲っています。

indexer01(黄色),indexer02(緑),indexer03(赤)でデータ取得時間(1分)を囲っています。

キャプチャ範囲の時間は、20分です。キャプチャ外で1時間ほど様子を見ても、同様の挙動をしていました。
なお、今回の観測結果では、同一のindexerに対して連続してデータが送信されるケースも何度か確認されました。常に送信先が切り替わるわけではなく、5分周期で3台のindexerの中からランダムに選択されるような挙動が見受けられました。

公式の資料では「ランダムにグループ内の別のindexerに切り替える」(引用文)とあるため、構成やタイミングによって切り替え先のindexerに変動がある可能性もあります。

~~引用文
if you have a load-balanced group that consists of indexer A, B, and C, at a specified interval, the forwarder switches the data stream to another indexer in the group at random.
~~

※以下引用の画像等、本記事内容に関する出典・参考:
ヘルプSplunk Enterprise / Set up load balancing

動作検証:「接続中のindexerが停止した際、自動的に他のindexerへ切り替わるか」

1. ログの受信をしているindexer03を停止します。(15:26停止)

ログの受信をしているindexer03を停止します

2. indexer02でログの受信が開始

    15:26停止後から indexer02でのログの受信が開始されました。

    15:26~15:29(検証終了)までのログ受信を確認

    受信中のindexerを停止しても中断はなく、自動でindexerの切り替えが行われる事が確認できました。

(検証終了)までのログ受信を確認

まとめ

今回の検証により、autoLBFrequencyを利用することで、Universal Forwarderからのログ送信先indexerを定期的に切り替えることが可能であることが確認できました。

ただし、検証時間が比較的短かったこと、またautoLBVolumeの設定によるデータ量に基づく負荷分散については未検証であるため、今後検証してみたいです。

さらに、接続中のindexerが停止した場合でも、ログの送信が中断されることなく、他のindexerへ自動的に切り替わることも確認できました。

Splunk Universal Forwarderは、シンプルな設定で負荷分散と障害耐性を実現できる機能が実装できることがわかりました。

参考資料

https://docs.splunk.com/Documentation/Splunk/9.4.2/Overview/AboutSplunkEnterprise

https://help.splunk.com/en/splunk-enterprise/forward-and-process-data/universal-forwarder-manual/9.4/about-the-universal-forwarder/about-the-universal-forwarder

https://help.splunk.com/en/splunk-enterprise/forward-and-process-data/universal-forwarder-manual/9.4/working-with-the-universal-forwarder/advanced-configurations-for-the-universal-forwarder

https://help.splunk.com/en/splunk-enterprise/forward-and-process-data/forwarding-and-receiving-data/9.4/perform-advanced-configuration/set-up-load-balancing

https://help.splunk.com/en/splunk-enterprise/forward-and-process-data/forwarding-and-receiving-data/9.4/perform-advanced-configuration/protect-against-loss-of-in-flight-data

https://docs.splunk.com/Documentation/Splunk/9.4.2/Admin/Outputsconf

https://docs.splunk.com/Documentation/Splunk/9.4.2/DistSearch/Whatisdistributedsearch

関連サービス

【サービスページ】SIV-SOC(セキュリティオペレーションセンター)

Splunkの構築と運用をワンストップで対応

最新のコラム記事

LOADING...

セキュアイノベーション サービス一覧

ネットワーク・サーバー

Webサイトを守る