VirtualHostを介してロードバランシングされたApache httpログをrsyslogログサーバーにグループ化できますか?

VirtualHostを介してロードバランシングされたApache httpログをrsyslogログサーバーにグループ化できますか?

単一のログサーバー(log1)にログインする複数のWebサイト用の負荷分散アプリケーションサーバーセット(app1-app4)があります。ログサーバーのログを次のようにグループ化したいと思います。仮想ホストこれにより、仮想ホストごとに1つのログを取得できることがわかります。

現在、私のApacheはVirutalHostを先頭のフィールドとして使用して、私のrsyslogサーバーにログを送信します。たとえば、次のようになります。

LogFormat "%V %h %l %{USERID}e %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{Cookie}n\""  combinedcookie
CustomLog "|/usr/bin/logger --size 8192 -t httpd -p local6.info" combinedcookie

各アプリケーションサーバーに結合されたローカルログを生成します。たとえば、次のようになります。

www.example.com 190.120.94.32 - - [19/Jun/2020:14:47:05 -0400] "GET /help/ HTTP/1.1" 200 6621 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "*cookie*"
fubar.pro 177.27.44.23 - guest [19/Jun/2020:14:52:06 -0400] "GET /login HTTP/1.1" 200 6746 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "*cookie*"
www.yadayada.ca 176.82.169.235 - user [19/Jun/2020:14:55:04 -0400] "GET / HTTP/1.1" 200 5716 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "*cookie*"

ログサーバーrsyslog.confは次のとおりです。

$template HttpdTmp,"/backup1/logs/www/%HOSTNAME%/%$YEAR%/live_access_log-%$YEAR%%$MONTH%%$DAY%"
$template RawMsgFormat,"%msg:2:4096%\n"
local6.*                -?HttpdTmp;RawMsgFormat

次のログが生成されます。

/backup1/logs/www/app1/2020/live_access_log-20200619
/backup1/logs/www/app2/2020/live_access_log-20200619
/backup1/logs/www/app3/2020/live_access_log-20200619
/backup1/logs/www/app4/2020/live_access_log-20200619

欲しいものログサーバーは次のとおりです。

/backup1/logs/www/www.example.com/2020/live_access_log-20200619
/backup1/logs/www/fubar.pro/2020/live_access_log-20200619
/backup1/logs/www/yadayada.ca/2020/live_access_log-20200619

rsyslogタグまたは同様のタグを使用して実行できるいくつかの魔法の設定はありますか?それとも、ログの最初の単語(仮想ホスト名)に基づいて分割できますか?

(*匿名性を保護するために、IPはランダムに指定されました)

答え1

文字列がwww.example.com属性の先頭にあると仮定すると、ファイル名テンプレートの値を変更しようmsgとします。%HOSTNAME%おそらく最も単純な不動産代替品タスクは次のものを抽出することです。大地スペースで区切られます。これには次の形式があります。

%key:F,delimeter:numfield:options%

区切り文字は10進文字コードで、32はスペースを表し、最初のフィールドは1で始まります。先頭にスペースがあるように見えるので、msg2番目のフィールドを選択する必要があるかもしれません。

%msg:F,32:2%

したがって、あなたの例では、ログサーバーrsyslog.confは次のようになります。

$template SiteTmp,"/backup1/logs/www/%msg:F,32:2%/%$YEAR%/live_access_log-%$YEAR%%$MONTH%%$DAY%"
$template RawMsgFormat,"%msg:2:4096%\n"
local6.*                -?SiteTmp;RawMsgFormat

関連情報