Forwarder 総まとめ【Splunk】

この記事は約17分で読めます。
sponsored link

フォワーダー (Forwarder) とは

Forwarder とは「収集したデータを他のインスタンス(e.g., Indexer, other Forwarder)に転送するインスタンス」のことで『UF』『HF』『LF』の3種類があります。

1. Universal Forwarder (UF)

UFは「Indexerへのデータ転送に特化した最も一般的かつ推奨されているForwarder」で、マシンから収集したデータをそのまま転送するシンプルな設計が特徴です。
※ UFは他のForwarderと異なり単独でデプロイできず、別途インストールする必要があります。(UIも提供されていません)

2. Heavy Forwarder (HF)

HFは「収集したデータのうち条件 (e.g., source, event type) にマッチしたデータのみを Indexer に転送するForwarder」で、データの転送だけでなくインデックス/サーチ/加工も行えるのが特徴です。なお、HFは分散環境には使えません。
※ HFはメモリ利用率を抑えるために一部機能が無効化されています。

3. Light Forwarder (LF)

LFは「HFよりも機能を削減した旧式のForwarder」です。
※ Splunk Enterprise 6.2から非推奨となり、現在はほとんど使われていません。


Source: https://www.youtube.com/watch?v=RJAaTyFHKeo

UF 導入の流れ

Indexerで受信ポートを設定

UFからの受信ポートをそれぞれのIndexerで設定します。
※ Indexerの受信ポートはデフォルトで「9997」です。

[方法1] web を利用 (管理者のみ)

[Settings] > [Forwarding and receiving] > [Configure receiving]

[方法2] CLI を利用

Indexer上で enable listen を用いて受信ポートを設定します。

$SPLUNK_HOME/bin/splunk enable listen <port> -auth <username>:<pw>

[方法3] input.conf を編集

# $SPLUNK_HOME/etc/system/local/input.confを直接編集
[splunktcp://<port>]

UFインストール

Splunk公式サイトから UF をインストールし、*NIX系であれば .tgz, .rpm を解凍、Windowsであれば .msi を実行します。(大規模環境下ではCLIでの自動化が有効)

インストール後は画面ウィザードに従ってIndexerの『hostname/IP』『port』を設定します。

UFでの転送設定

UFの output.conf で転送先のIndexerを設定します。設定後は自動で「index=_internal」にログが送信されます。

[方法1] CLI を利用

UF上で add forwarder-server を用いて転送先のIndexerを指定します。

$SPLUNK_HOME/bin/splunk add forward-server <hostname/IP>:<port> 
# addではなくremoveを使えば登録を解除できます

[方法2] output.conf を編集

[tcpout] 
defaultGroup = my_indexers    # データ転送先のグループを指定
[tcpout:my_indexers] 
server = indexer1:9997, indexer2:9996, indexer3:9995   #個別のサーバーをグループに登録 

[tcpout-server://indexer1:9997]   # 任意

UFで特定のデータを収集する場合 add monitor を利用します。

# /var/logのディレクトリを監視する場合
$SPLUNK_HOME/bin/splunk add monitor /var/log

(options) トポロジを追加

Load balancing

Load balancingは「Forwarder から複数 Indexers に処理を分散させる」という機能で、各インスタンスの負荷軽減やフェールオーバーなどを実現します。
※一般的なForwarderのネットワークポートは “9997” ですが、1024より大きなポート番号を独自に設定することも可能です。
※外部のロードバランサーの導入は推奨されていません。

Load balncing forwarderが Indexer を切り替えるタイミングは『EOF (i.e., end of file) 検知時』『Indexerダウン時』『autoLBFrequency (default: 30s), autoLBVolume (default: 0=disable) 超過時』などです。
※ autoLBFrequency, autoLBVolume はoutput.confで指定します。

イベントの境界は基本的にデータ加工を行う Indexer 側で定義されるのですが、一部のストリーミングデータや複数行をもつイベントデータ (e.g., syslog, log4j) の影響でEOFが正しく判定されないことがあります。そんな時は、props.confでsourcetype毎にイベントの境界を設定すると良いでしょう。

# output.conf
[tcpout:sample_indexer_4_LB]
server = 10.10.10.1:9997, 10.10.10.2:9996, 10.10.10.3:9995

# props.conf
# 単一行のストリーミングデータ(syslog)を想定
[sample_sysog]
EVENT_BREAKER_ENABLE = true

# 複数行のイベント(log4j)を想定
[sample_log4j]
EVENT_BREAKER_ENABLE = true
EVENT_BREAKER = ([\r\n]+)\d\d\d\d-\d\d-\d\d

Cloning

Cloningは「Forwarder のデータを複数 Receivers に複製する」という機能です。ただし、Cloningではデータの完全性は保証されません。

[tcpout] 
defaultGroup = indexer1, indexer2   # indexer1, indexer2の両方に複製

[tcpout:indexer1] 
server = 10.10.10.1:9997 

[tcpout:indexer2] 
server = 10.10.10.2:9996

Compressing data

Compressing dataは「データを圧縮して送信/受信する」という機能で output.conf, input.conf の両方で設定することができます。
※ CPU 利用率はやや増加します。

# Forwarder側 (output.conf)
[tcpout:sample_indexer]
server = 123.10.10.10:9997
compressed = true

# Indexer側:123.10.10.10 (input.conf)
[splunktcp://9997]
compressed = true

SSL

以下ではデフォルトの証明書のセットアップについて紹介しますが、Splunk公式サイトでは「ユーザーが独自の証明書」の利用が推奨されています。(デフォルトの証明書の有効期限は3年)
※ CPU 利用率は増加します。

なおSSL化を行った場合、送受信されるデータは自動で圧縮されます。

# Forwarder側 (output.conf)
[tcpout:sample_indexer]
server = 123.10.10.10:9997
clientCert = $SPLUNK_HOME/etc/auth/server.pem
sslPassword = password   # デフォルトの証明書のPWは「password」です
sslVerifyServerCert = false

# Forwarder側 (server.conf)
[sslConfig]
sslRootCAPath = $SPLUNK_HOME/etc/auth/cacert.pem
# その後「$SPLUNK_HOME/bin/splunk restart splunkd」でForwarderを再起動

# Indexer側:123.10.10.10 (input.conf)
[splunktcp-ssl:9997]
disable = 0
[SSL]
serverCert = $SPLUNK_HOME/etc/auth/server.pem
sslPassword = password
requireClientCert = false   # デフォルトの証明書では不要

# Indexer側:123.10.10.10 (server.conf)
[sslConfig]
sslRootCAPath = $SPLUNK_HOME/etc/auth/cacert.pem
# その後「$SPLUNK_HOME/bin/splunk restart splunkd」でForwarderを再起動

Indexer acknowledgement

Indexer acknowledgement は「in-flight data (未受信のデータ) の損失を防ぐ」という機能で、以下のプロセスでデータを保護します。

  1. Forwarder がデータをブロック単位で送信 (※ Indexerからの承認があるまでブロックのコピーをメモリ内で保持)
  2. Indexer がブロックを受信し、加工、イベント(raw data + index data)の書き込み
  3. Indexer がacknowledgement(承認のサイン)を Forwarder へ送信
  4. Forwarder のメモリで保持していたブロックを削除 (※ acknowledgementが届かなければブロックを再送)

①の時点でIndexerと接続できなければ、Forwarderが自動で他のIndexerへ転送します。(Indexerが見つからなかった場合はキューへ蓄積されます)
※ maxQueueSizeはデフォルトで auto に設定されており、useACK=falseの場合は「output_queue=500KB, wait_queue=0」useACK=trueの場合は「output_queue=7MB, wait_queue=21MB」となります。

[tcpout:sample_indexer_4_LB] 
server = 10.10.10.1:9997, 10.10.10.2:9996, 10.10.10.3:9995
useACK = true
maxQueueSize = 20MB   # output_queue=20MB, wait_queue=20MB*3=60MB

UF 運用

設定後のチェック

display, list を用いると Indexer, Forwarder で設定した項目をチェックすることができます。

# Indexer側で、受信ポートを表示
$SPLUNK_HOME/bin/splunk display listen
# Forwarder側で、Indexerの構成を表示
$SPLUNK_HOME/bin/splunk list forward-server

また、Forwarder – Indexer 通信の設定をした時点でログが「index=_internal」に送信されるので、サーチ画面で通信が成功しているかをチェックすることもできます。

index=_internal host=<hostname>

指定したIndexersへのルーティング

UF, LF のinput.conf, output.confでルーティング設定を記述することで、host, source, spurcetypeに応じたルーティングを実現することができます。
※イベント単位でデータを解析し選択的にルーティングができるのは HF のみです。UFではできません。

# output.confで、それぞれのreceiving indexer用のスタンザを作成
[tcpout:DevOps]
server = server1:9997
[tcpout:Marketing]
server = server2:9997

# input.confで、先ほど設定したindexerへのルーティング用スタンザを作成
[monitor://.../system.log]
_TCP_ROUTING = DevOps
[monitor://.../sales.log]
_TCP_ROUTING = Marketing

Deployment Server (DS) とは

Deployment Server (DS) とは「Forwardersの設定を一元管理する専用インスタンス」のことで、最新のファイル/アプリなどを deployment clients に一括でデプロイできるのが特徴です。
※クライアントの数が50以下であれば、DSのインスタンスに LM, MC, SHC-D をデプロイすることができます。

主に大規模環境下でのForwardersや、複数タイプのForwaredersを一元管理する用途で用いられます。

用語 意味
DS 最新の構成やファイルを他のインスタンスに展開する中心的なインスタンス。
deployment client DSのアップデートを受ける遠隔に構成されたインスタンス。
server class Deployment clients で共有される構成カテゴリ。
deployment app 1つ以上の server class にデプロイされるコンテンツ単位。

DS 利用の流れ

DSのインスタンスを1つ選択

DSではCPU/メモリの負荷が大きくなるため、専用インスタンスを設ける必要があります。

また、Splunk EnterpriseではデフォルトでDSの利用が有効化されているため、ここではインスタンスを選択するだけで大丈夫です。
※ DSは自身のクライアントになることはできません。

クライアントに接続するDSを指定

各クライアントの deploymentclient.conf で接続するDSを指定します。
※このファイルを通して DS-clients 間の連絡を行うため、DSから deployment.conf をプッシュしてはいけません。

[方法1] CLI を利用

クライアント上でset deploy-poll を用いてDSを指定します。

$SPLUNK_HOME/bin/splunk set deploy-poll <DS_hostname/IP>:<management_port>   # デフォルトのポートは8089
$SPLUNK_HOME/bin/splunk restart

[方法2] deploymentclient.conf を編集

# $SPLUNK_HOME/etc/system/local/deploymentclient.confを直接編集
[deployment-client]                      # 属性の設定(基本、編集しなくてOK)
phoneHomeIntervalInSecs = 30             # クライアントがDSのコンテンツを確認する頻度(デフォルトは60s)
[target-broker:deploymentServer]         # DSの場所を指定
targetUri = <DS_URI>:<management_port>   # デフォルトのポートは8089

※変更後は再起動が必要です。

なお、設定後は [Setting] > [Server settings] > [Deployment client setting] や、DS上の Forwarder Management からクライアントステータスを確認することができます。

Deployment apps をDS上に作成

Deployment apps (e.g., apps, conf files) をDS上の $SPLUNK_HOME/etc/deployment-apps/ に作成します。
※ serverclass.confの [repositoryLocation] でappsディレクトリの変更が可能です。
※ダウンロード後はクライアントの $SPLUNK_HOME/etc/apps/ に配置されます。(中身はカスタマイズできません)

アプリをディレクトリに追加した後は、CLIでreload deployment-server を実行することで、変更をDSへ知らせます。

$SPLUNK_HOME/bin/splunk reload deployment-server

一度DSでアプリの管理を開始すると「その後クライアント側でアプリは制御できなくなる」という点に注意が必要です。(DSから削除されたアプリはクライアントからも削除されます)
※ DSのアプリのコピーを自身のインスタンス上で管理するには deployment clients 機能を無効化する必要があります。

DS上で server classes を作成しアプリをデプロイ

DS上で deployment apps をマッピングする server classes を作成し、アプリ/クライアントを登録します。
※名前はスペースを含まないユニーク値でなければいけません。

[方法1] Forwarder Managemet を利用

[Server Classes] > [New Server Class] で名前をつけて新しいserver classを作成し、画面ウィザードに従って apps/clients を登録すれば完了です。
※ Server classを編集すると、DS管理下にある関連性のないクラスも全て再度デプロイされます。

[方法2] serverclass.conf を編集

# $SPLUNK_HOME/etc/apps/<app>/local/serverclass.confを直接編集
# MachineTypeでserver classを作成する場合
[serverClass:Apps_MT]
whitelist.0 = *.mycompany.com
[serverClass:Apps_MT:app:CIM]
machineTypeFilter = windows-*
[serverClass:Apps_MT:app:unix]
machineTypeFilter = *-JP, *-CA

(option) 設定後のチェック

display, list を用いると DS, Forwarder で設定した項目をチェックすることができます。

# DS側で、クライアントの情報を表示
$SPLUNK_HOME/bin/splunk list deploy-clients
# Forwarder側で、DSの情報を表示
$SPLUNK_HOME/bin/splunk list deploy-poll

References

How to forward data to Splunk Enterprise – Splunk Documentation

Enable a receiver – Splunk Documentation

Start the universal forwarder – Splunk Documentation

Configure deployment clients – Splunk Documentation

Configure forwarding with outputs.conf – Splunk Documentation

Configure the universal forwarder – Splunk Documentation

outputs.conf – Splunk Documentation

Administrative CLI commands – Splunk Documentation

Route and filter data – Splunk Documentation

Configure Splunk forwarding to use the default certificate – Splunk Documentation

Configure load balancing for Splunk Enterprise – Splunk Documentation

Protect against loss of in-flight data – Splunk Documentation

Types of forwarders – Splunk Documentation

Deployment server architecture – Splunk Documentation

Plan a deployment – Splunk Documentation

Configure deployment clients – Splunk Documentation

Create deployment apps – Splunk Documentation

Create serverclasses – Splunk Documentation

serverclass.conf – Splunk Documentation

Use forwarder management to define server classes – Splunk Documentation

Adding a Deployment Server / Forwarder Management to a new or existing Splunk Cloud (or Splunk Enterprise)… – Splunk Blogs