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

    Menu

    セキュリティコラム

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

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

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

    セキュアイノベーション:セキュリティブログ「ASMサービス比較ガイド | ASMとは? 導入前に知るべき7つの選び方ポイント」セキュアイノベーション:セキュリティブログ「ASMサービス比較ガイド | ASMとは? 導入前に知るべき7つの選び方ポイント」

    はじめに

    日頃から、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サイトを守る

    ヘルプデスク・サポート