はじめに
Splunkへのデータ転送は通常、Universal Forwarder(UF)を使いますが、たまに通信上の課題があります。
それは、UFでは独自のTCP通信を使用するためHTTP Proxyを使用できず、HTTP Proxyを介さなければUFからSplunkに到達できない環境にいる場合はデータ転送が行えないことです。
※SOCKS5 Proxyには対応していますので、それが使用可能であれば問題ありません。
そんな中、Universal Forwarder 8.1からhttpoutという機能が追加されています。
この機能を使うことでSplunkのHEC(HTTP Event Collector)を使用したHTTP通信に切り替えられ、HTTP Proxyを利用することができます。
また、ロードバランサーで負荷分散できるようにもなるというメリットもあります。
早速試してみましょう。
構成
こんな感じで環境を用意しました。
UF、Splunk Enterpriseはインストールだけした状態とします。
ちなみに、SplunkはEnterpriseで用意していますがSplunk Cloudでも同様に行えます。
httpoutを設定しよう
HECを用意
SplunkでHECを追加します。
- ヘッダーメニューから設定 > データ入力
- HTTPイベントコレクターの「新規追加」をクリック
- 適当に設定
- 名前:任意(「UF httpout」など)
- ソースタイプ:自動
- インデックス:いじらない ※indexもsourcetypeもUF側で指定するため
- 払い出されたトークン値をメモしておく
- 再びヘッダーメニューから設定 > データ入力
- HTTPイベントコレクターをクリック
- グローバル設定ボタンをクリック
- 全トークンが「有効」であることを確認(無効だったら有効にしておく)
httpoutの設定(outputs.conf)
UFでHTTP送信するためのhttpoutの設定を行います。
$SPLUNK_HOME/etc/system/local/outputs.conf
を開き(なければ新規作成)、以下を追記。
[httpout]
httpEventCollectorToken = 払い出したトークン
uri = https://Splunkのホスト名orIPアドレス:8088
Splunk CloudのURLとポートはこちら。
https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector#Send_data_to_HTTP_Event_Collector_on_Splunk_Cloud_Platform
なお、通常はCLIでsplunk add forward-server
で送信先を設定しますが上記のhttpout設定だけでOKです。
※もし通常の設定(tcpout)とhttpoutが両方存在しても、httpoutが優先されます。
Proxyの設定(server.conf)
HTTP Proxyを使用するための設定を行います。
$SPLUNK_HOME/etc/system/local/server.conf
を開き(なければ新規作成)、以下を追記。
[proxyConfig]
http_proxy = http://ProxyサーバURLまたはIPアドレス:Proxyサーバポート
https_proxy = http://ProxyサーバURLまたはIPアドレス:Proxyサーバポート
UF再起動
設定を反映するために再起動を行います。
$SPLUNK_HOME/bin/splunk restart
確認
これでHTTPデータ送信が可能になりました。
諸々確認してみます。
データ取り込み確認
Splunk側でサーチ実行。UFからデータ受信できていることが確認できました。
index=_internal | stats count by host
通信データの確認
念のため、ちゃんとProxy経由しているよねということを確認。
Proxyサーバでtcpdumpしてみます。
UF: 10.202.37.190
Proxy: 10.202.37.20
Splunk: 10.202.6.7
UF > Proxy(TCP:3128通信)
tcpdump dst port 3128 -nn
Proxy > Splunk(TCP:8088通信)
tcpdump dst port 8088 -nn
問題なさそうです。
パフォーマンス確認
UFのスループットはデフォルト256KB/sです。httpoutでも同様に適用されるか確認します。
この上限値はlimits.confのmaxKBpsで定義されています。
UFでバカでかファイルを用意してadd monitorします。
$SPLUNK_HOME/bin/splunk add monitor <バカでかファイルのパス>
Splunk側でモニターコンソールから確認すると・・・
※設定 > モニターコンソール > インデックス化 > パフォーマンス > インデックスパフォーマンス:インスタンス
253 KB/sでています(他に取り込みはしていない)。
だいたい上限値で取り込めています。
UFでmaxKBpsを倍の512にしてみると
[thruput]
maxKBps = 512
きっちり倍になりました。
限界にチャレンジ(ダメ絶対)。
[thruput]
maxKBps = 0 #上限なし
この環境だと3599 KB/sでました。
まとめ
簡単な設定でHTTP送信に切り替えられました。
もしHTTP Proxyが必須な場合は使えますね。