.rsyslog 구성이 포함된 애플리케이션을 작성 중입니다 /etc/rsyslog.d/
.
특정 로그 메시지는 다음과 같이 명명된 파이프로 리디렉션되어야 합니다.
template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
action(type="ompipe" Pipe="/tmp/SITENAME/pipe" Template="my_fmt")
stop
}
이것은 예상대로 작동합니다. 안타깝게도 위 파이프 이름의 SITENAME은 사전에 알 수 없으며 고객이 구성해야 합니다.
이런 지시사항을 쓸 수 있어요"파일에서 SITENAME이라는 단어를 찾아 특정 $sitename으로 바꾸세요."명령을 내려도 sed
이 방법은 마음에 들지 않습니다. 대신 파일 시작 부분에 상수를 설정하고 필요할 때마다 사용하고 싶습니다. 이와 같이:
set ACTUAL_SITE = "foo";
template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
action(type="ompipe" Pipe="/tmp/$ACTUAL_SITE/pipe" Template="my_fmt")
stop
}
어떻게 해야 하나요? 나는 (내가 생각하기에) $
, 및 %…%
의 모든 변형을 시도했지만 그 중 아무것도 %$…%
작동하지 않았습니다 Pipe="…"
. ACTUAL_SITE
초기 설치 후에는 값이 변경되지 않습니다. 고객을 위해 구성을 단순화하고 싶습니다."ACTUAL_SITE 값을 실제 사이트 이름으로 설정하세요."그 사람이 파일의 나머지 부분을 만지작거리게 두지 마세요.
답변1
오래된 rsyslog
버전(8.32 이하)은 수행하려는 작업을 지원하지 않습니다.
현재 rsyslog 버전에서는 백틱 상수를 통해 이 작업을 수행할 수 있습니다.여기.
이를 위해:
rsyslog가 시작되기 전에 일반적으로 대상 컴퓨터에 설치할 때 시작 스크립트에 환경 변수를 추가하여 환경 변수를 정의하거나 파일에 씁니다. 우리는 이것을 SITE_PIPE라고 부르고 다음을 수행합니다.
export SITEPIPE="/tmp/mysite/pipe"
그런 다음 백틱을 사용합니다.
action(type="ompipe" Pipe=`echo $SITEPIPE` Template="my_fmt")
파일에 쓰는 경우 다음 구조를 사용할 수 있습니다.
action(type="ompipe" Pipe=`cat pipenamefile` Template="my_fmt")
이 모든 것은 bash 작동 방식에 익숙해야 합니다.
실제 예제는 Docker 컨테이너에서 찾을 수 있습니다. 컨테이너에 대한 링크는 다음과 같습니다.rsyslog.conf.
그러나 나머지 Docker 정의를 살펴보고 전체 그림을 얻을 수도 있습니다.