すべてのリモートLinux syslogとネットワークログを取得する次の設定を持つrsyslogサーバーがあります。
# cat /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template noida-dc, "/scratch/rsyslog/%HOSTNAME%/messages.log"
authpriv.* ?noida-dc
*.info,mail.none,authpriv.none,cron.none ?noida-dc
$IncludeConfig /etc/rsyslog.d/*.conf
Linux syslogは、ホスト名自体を使用してディレクトリを作成し、その中にホスト名のログを保存するためのメッセージファイルを作成する方法で実行されます/scratch/rsyslog
。大丈夫です。
ところで、ウェブログを分離したいので、デフォルトで月名でフォルダを作成してからフォルダを作成し Jan Feb Mar
ますmessage.log
。ファイルそれはすべてですmessages.log
。私が望むのは、これらのWebログを別のディレクトリ(例えば/scratch/network
。
以下は、ネットワークログディレクトリのメッセージ形式です。Dec
Dec 2 19:04:22 Dec 02 13:34:22.768 cisco-apic-1 %LOG_-3-SYSTEM_MSG
したがって、リモートメッセージDec
に。Jan
/scratch/network
以下を試しましたが、動作しません。
$template mynets,"/scratch/network/%HOSTNAME%/messages.log"
if $fromhost contains 'cisco-apic-1' then -?mynets
& stop
&
$template mynets,"/scratch/network/%HOSTNAME%/messages.log"
if $fromhost startswith 'Dec' then -?mynets
& stop
LinuxディストリビューションはCentos 6です。
答え1
私はあなたの意図を完全に理解していないことを認めます。それでも解決策があるかもしれません。
まず、「Dec」、「Jan」などは通常、従来のRFC3164 syslogの場合にのみsyslogヘッダーに返されます。最新のシステムには対応する指示はありません。また、多くのシステムが syslog 標準に違反しているため、メッセージ内でこれらの文字列が見つからない場合があります。
存在すると仮定し、syslog ヘッダーにあるとします。これは$ msgまたは$ fromhostの一部ではありません。スムーズで簡単にするには、ネットワークに表示されるメッセージである$rawmsgを確認するだけです。これは、構文解析されていない形式でこれらの問題を処理するのに良い方法ではありませんが、理論全体を理解することなく動作するという利点があります。
だからあなたは言うことができます:
$template mynets,"/scratch/network/%HOSTNAME%/messages.log"
if $rawmsg contains 'Dec ' then -?mynets
& stop
「Dec」の後にスペースを1つ以上追加したことに注意してください。それ以外の場合は、その文字列(「Decimal」など)を含むすべての項目と一致するためです。
これはうまくいくかもしれませんが、当然考えてはいけない多くのものに依存します。より良いアプローチは、$ fromhost-ipがlocalhostと異なることを確認することです。または、リモートロギング用の専用ルールセットを作成することをお勧めします。しかし、これは元の質問に合わないので無視するようにします。