Splunk Version 9.2.1
割とハマりやすい点かなと思います。
SearchHeadとIndexerが別ノードの場合のLookupファイルの扱いについて。
Splunk内部動作
SPLで | inputlookup, | lookup を実行する場合、
何も指定しなければ「Indexerに保存されたLookupファイル
」を検索している。
LookupファイルはSearchHead上に作成/保存されるが、
1分毎に圧縮されてIndexerにコピーされ、サーチではこれを読み込んでいる。
(同期の実体ファイルどこか忘れました。知っている人いたら教えてください)
問題点①
1分毎に更新するようなリアルタイムのLookupを運用すると、
最新のLookupが読み込まれない場合がある。
<実際にあった事象>
・古い情報が紐づく
・タイミングによってlookupの紐づけが出来ずNullになる。
解決策①
リアルタイムに近いLookup運用をする際は、local=t オプションを付ける。
これにより、IndexerではなくSearch Head上の最新Lookupを参照するようになる。
そもそもLookupではなく、Summary Indexに格納しなおすと良いかも。
(| collectコマンド stash形式ならば、ライセンスにカウントされない)
問題点②
一部のユーザが巨大なLookupファイル(4GByteとか)を保存すると、
他にも同期されているtransforms.conf 等が機能しなくなる事がある。
今までできていたのに、何故かフィールド抽出されなくなるとか。
システム全体に影響を及ぼすので、こちらの方も割と重要。
解決策②
Lookupファイルの(Indexerへの)同期上限を設定する。
デフォルトだと無効なので注意。
<設定箇所>
$SPLUNK_HOME/etc/system/local/
excludeReplicatedLookupSize = [integer]
※デフォルトは 0(無効)
Splunk公式ドキュメントは以下URLから。