VirtualHost를 통해 로드 밸런싱된 Apache http 로그를 rsyslog 로그 서버로 그룹화할 수 있습니까?

VirtualHost를 통해 로드 밸런싱된 Apache http 로그를 rsyslog 로그 서버로 그룹화할 수 있습니까?

단일 로그 서버(log1)에 로그인하는 여러 웹 사이트에 대한 로드 밸런싱된 애플리케이션 서버 세트(app1-app4)가 있습니다. 로그 서버의 로그를 다음과 같이 그룹화하고 싶습니다.가상 호스트그러면 가상 호스트당 하나의 로그를 얻을 수 있음을 알 수 있습니다.

현재 내 아파치는 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로 시작합니다. 시작 부분에 공백이 있는 것처럼 보이므로 msg두 번째 필드를 선택해야 할 수도 있으므로 다음을 사용하십시오.

%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

관련 정보