こんばんは。torippy1024です。
本日は、せっかくログを転送しようと設定したのにSplunkにデータが転送できないと悩んでいる初心者Splunkユーザーに対し、トラブルシューティングの方法を書いてみようと思います。
私も昔はうまくいかねー、と悩み続けていたので、参考になれば幸いです。
大まかな切り分けの流れ
他にやり方はいろいろあるのかもしれませんが、私は以下の順で確認していきます。
(1)ネットワークレベルでの通信確認
Splunkに限らない問題であるか確認
(2)Forwarderの全体の設定確認
_internalログがSplunkに転送でているかまで確認
(3)Forwarderの個別ログの設定確認
個別の監視対象ログの設定の問題か確認。多くはinputs.confの書き方の問題
(4)Splunkサポートへの問い合わせ
どうしてもうまくいかず、かつ本番環境でサポート契約があればこちらで対応
ちなみに、コマンド中に出現するデフォルトの$SPLUNK_HOMEのパスは以下の通りです。
Linux Universal Fowarder
$SPLUNK_HOME=/opt/splunkforwarder
Linux Heavy Forwarder
$SPLUNK_HOME=/opt/splunk
#Windows Universal Fowarder
$SPLUNK_HOME=C:\Program Files\SplunkUniversalForwarder
#Windows Heavy Forwarder
$SPLUNK_HOME=C:\Program Files\Splunk
(1)ネットワークレベルでの通信確認
まずはネットワークレベルです。これはまあSplunkだけに限らない分野ですね。
以下のどれかにひっかかったら、ネットワークレベルでの疎通ができていない可能性があるので、間にあるFWなどの設定や、DNSによる名前解決などを確認する必要がありそうです。
ping確認(Universal Forwarder -> Heavy Forwarder、Heavy Forwarder -> Splunk間両方)
ping -c 4 <hostname>
9997ポートの疎通確認(Universal Forwarder -> Heavy Forwarder間)
# Linuxの場合
telnet <hostname> 9997
# Windowsの場合
Test-NetConnection -ComputerName <hostname> -Port 9997
http疎通確認(Heavy Forwarder - Splunk Cloud間で、httpout転送を行う場合など)
# Linuxの場合
telnet https://<stackname>.splunkcloud.com 443
# Windowsの場合
Test-NetConnection -ComputerName https://<stackname>.splunkcloud.com -Port 443
(2)Forwarderの全体の設定確認
ここからそれぞれのForwarderの状態や設定を確認していきます。Heavy ForwarderとUniversal Forwarder、両方で確認していきます。ここでひっかかった場合はそもそも全ログが転送されていないという状態なので、Forwarder全体の設定や状態を見直す必要があります。
Splunkdプロセスが起動していることを確認
$SPLUNK_HOME\bin\splunk status
(Heavy Forwarderの場合)受信ポート(基本的には9997)が解放されていることをHF上で確認
$SPLUNK_HOME/bin/splunk show listen
Active Forwardsに次の転送先ホストが登録されていることを確認
(ただしHFの場合、httpoutでSplunk Cloudに転送していると表示されません。その場合は次のコマンドで直接outputs.confを参照してください)
$SPLUNK_HOME\bin\splunk list forward-server
直接outputs.confを参照して次の転送先ホスト:ポートが登録されていることを確認
$SPLUNK_HOME\bin\splunk btool outputs list --debug
内部ログ(_internalログ)が転送されているか、Splunk Web上で以下のSPLをサーチして確認
(検索範囲に注意。表示されない場合は探索期間を全期間にして実行してみること)
index=_internal | stats count by host
内部ログ以外のログが転送されているか、Splunk Web上で以下のSPLをサーチして確認
(同じく検索範囲に注意。表示されない場合は探索期間を全期間にして実行してみること)
index=* | stats count by host sourcetype
内部ログが転送されていない場合、splunkd.logにエラーが出力されている場合があるので以下で確認
tail $SPLUNK_HOME/var/log/splunk/splunkd.log
TCP転送でエラーが発生したログがないか確認
tail -f splunkd.log | egrep 'TcpOutputProc|TcpOutputFd'
(3)Forwarderの個別ログの設定確認(監視対象ログを適切に設定できているかの確認)
ここまで正常だった場合は、一部のログだけが転送できていないという状態と考えられます。
その場合、考えられるのは入力設定の誤りや、データの転送遅延です。一つ一つ確認していく必要があります。
inputs.confの設定を表示(inputs.confに入力設定が反映されていることを確認する)
$SPLUNK_HOME\bin\splunk btool inputs list --debug
監視対象の一覧を表示(表示されない場合はモニター対象として認識されていない状態であるので、stanzaの内容などを確認する)
$SPLUNK_HOME\bin\splunk list monitor
ファイル読み込み状況を表示(表示されない場合はファイルの読み込みが行われていない状態であるので、これ以前の設定などを見直す)
$SPLUNK_HOME\bin\splunk list inputstatus
Oneshotによるマニュアルログ転送テスト("C:\temp\splunk.txt"を作成してマニュアルでログ転送するコマンド。Oneshot 'C:\temp\splunk.txt' addedと表示された後、Splunk上でサーチしてこのログが登録されるか確認)
# Linuxの場合
echo "Test-Splunk" > /tmp/splunk.txt
$SPLUNK_HOME\bin\splunk add oneshot /tmp/splunk.txt -index main
# Windowsの場合
echo "Test-Splunk" > "C:\temp\splunk.txt"
$SPLUNK_HOME\bin\splunk add oneshot "C:\temp\splunk.txt" -index main
上記を試して、全て正常に設定されているように見える場合はデータの転送遅延が考えられます。
初期導入時など、大容量のファイルを読み込んでおり転送帯域が不足している場合などです。
その場合は、念のために再起動を実施した後、しばらく時間をおいてからサーチを試行してみたり、古いログから取り込まれており細心のログがヒットしない場合はサーチの時間範囲を全範囲にしてみるなど試してみてください。
(4)Splunkサポートへの問い合わせ
最終手段がsplunkサポートへの問い合わせです。
Splunkサポートへ問い合わせする際は、diagと呼ばれるファイルの提出を依頼されることがあります。diag出力コマンドは以下です。
$SPLUNK_HOME\splunk" diag
やや時間や負荷がかかるので本番環境で実施する際は注意してください。ファイル容量もGB単位になる可能性があります。確実かどうかはわかりませんが、このファイルをサポートケース上に添付して問い合わせすれば回答がもらえやすいと思われます。
その他参考資料
Use btool to troubleshoot configurations
https://help.splunk.com/en/splunk-enterprise/administer/troubleshoot/10.4/first-steps/use-btool-to-troubleshoot-configurations
Configure forwarding with outputs.conf
https://help.splunk.com/en/splunk-cloud-platform/forward-and-process-data/universal-forwarder-manual/10.4/forward-data/configure-forwarding-with-outputs.conf
outputs.conf(outputs.confのパラメータ定義)
https://help.splunk.com/en/data-management/splunk-enterprise-admin-manual/10.4/configuration-file-reference/10.4.3-configuration-file-reference/outputs.conf
Monitor files and directories with inputs.conf
https://help.splunk.com/en/splunk-enterprise/get-started/get-data-in/10.4/get-data-from-files-and-directories/monitor-files-and-directories-with-inputs.conf
inputs.conf(inputs.confのパラメータ定義)
https://help.splunk.com/en/data-management/splunk-enterprise-admin-manual/10.4/configuration-file-reference/10.4.3-configuration-file-reference/inputs.conf