rsyslogが受け取るログがローカルとリモートで違う
4月21日のエントリで、rsyslog経由でとったログのあたま一文字が消えるという現象について書きました。
apacheのログを標準出力でperlスクリプトに流して、rsyslogで書き出したら頭の一文字が消えたって件です。
その際はrsyslog.confのMsgテンプレートを以下にして解決したなぁと思っていたんですが、
$template MsgFormat, "%msg:1:$%\n"
ところがこれが違ったんですね。
ローカル(rsyslogが動作して実際のログを書き出すホスト)では、これでいいんですが、リモートでこんなふうにログを飛ばしているホストから来たログでは逆に頭に一文字空白ができてしまう。
local0.debug @@172.16.xx.xx:514 local1.debug @@172.16.xx.xx:514
現象はこんな感じ。
ホスト | 実行コマンド | 結果 |
---|---|---|
localhost | echo "12345" | logger -p local0.debug | "12345" |
リモート | echo "12345" | logger -p local0.debug | " 12345" |
そうするとやっぱり頭に一文字空白が入ってくるほうが正しくて、ローカルでやった時のビヘイビアがおかしいってことになります。
で、しばらくrsyslog.confを眺めていて怪しそうなディレクティブを発見。
これをコメントアウトして解決しました。
$OmitLocalLogging on
ローカルのメッセージはimjoruanl経由だからなんとかかんとか。
まぁよくわからないけど解決したからよし。