Edited at

syslogサーバのログをSplunkに読み込ませるときにループバックIPをつけたくない!

More than 1 year has passed since last update.


ループバックアドレスがーーー!

rsyslogサーバ自身の/var/log/secureや/var/log/messagesをSplunkに送るとsrcipアドレスにループバックアドレスが付いてしまう。

複数台のSyslogサーバからSplunkフォワーダでSplunkインデクサにログを送信すると、srcipがループバックアドレスで被ってしまい、後々サーチ文がうまく書けなくなる。

サーバに割り振られたIPアドレスでなんとかする方法はないか?とググってみたが、一般常識なことらしく誰も記事を書いてくれていない。

ということで、少し考えていたんだけど、ちょっと姑息な手段を思いついたので試してみた。


ログをカスタマイズしちゃえばいいんじゃね?

rsyslogの出力設定はカスタマイズすることができる。テンプレートをちょっとカスタマイズすれば、Splunkに送るデータに127.0.0.1ではなく、IFについたIPアドレスをつけられるんじゃないか?と思ったのでやってみた。

まずテンプレートを作ってみた。ここで、192.168.1.200はrsyslogが動作しているサーバのインターフェースにつけたIPアドレスだ。


/etc/rsyslog.conf

# Provides UDP syslog reception

$ModLoad imudp # 受信設定
$UDPServerRun 514 # 受信設定

# Provides TCP syslog reception
$ModLoad imtcp # 受信設定
$InputTCPServerRun 514 # 受信設定

#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template mytmp, "%TIMESTAMP% 192.168.1.200 %msg%\n" # 送信元IP表示用テンプレート
~~~
#### RULES ####
:fromhost-ip, isequal, "127.0.0.1" /var/log/test.log;mytmp # ※
& stop


ここで、※のところを見ると、送信元IPが127.0.0.1の時に/varlog/test.logに保存するのだが、その際に"mytmp"という$templateの書式で保存される。

$templateは、%TIMESTAMP%(時間) 192.168.1.200(表示させたいIPアドレス) %msg%(実際のメッセージ) という出力フォーマットにしてみた。

この設定を入れたrsyslogサーバにloggerを使って試験してみた。

まず、rsyslogdをリスタートする。

# /etc/init.d/rsyslog restart

システムロガーを停止中: [ OK ]
システムロガーを起動中: [ OK ]

次に、loggerを使ってテストログを送信する

 logger -ip local0.info 'test test test'

ログは/var/log/test.logに入っているので見てみると

Jul 14 15:40:24 192.168.1.200  test test test

というログが出力されていた。


これでSplunkのデータが127.0.0.1だらけにならない!

このtest.logをSplunkフォワーダでSplunkインデクサに送信してやれば、そのサーバ固有のIPアドレスが着いたように見せかけることができ、sourceipが127.0.0.1だらけにならなくなる。


本当は違うやりかたがあるんだろうなー。

本当ならばhostsをいじくったり、rsyslogで適切に扱う等、違うやり方があるんだと思うのだが、自分にログを送信したらログがログを生む、ログのループ障害が発生してしまった。

どなたか、本筋のやり方をご存じの方は教えてください。