특정 프로그램에서 원격 syslog 서버로 로그를 보내도록 rsyslog를 어떻게 구성합니까?


17

주어진 태그 / 프로그램 이름으로 syslog에 출력하는 프로그램이 있습니다. 해당 프로그램에서 syslog 트래픽을 필터링하여 원격 syslog 서버로 보내 다른 모든 syslog 트래픽을 로컬로 남겨두고 싶습니다.

모든 트래픽을 원격 서버로 보낼 수 있습니다.

*.* @remote_server

어떻게 필터링합니까?


답변:


37

Rsyslog 구성 파일은 다음 위치에 있습니다. /etc/rsyslog.d/*.conf

Rsyslog는 conf 파일을 순차적으로 읽으므로 다른 설정이 발생하기 전에 특정 구성이로드되도록 구성 파일의 이름을 지정하는 것이 중요합니다. 따라서 앞에 0으로 시작하는 파일 이름을 지정하십시오.00-my-file.conf . 업데이트 등이 로컬 구성을 덮어 쓰지 않도록 새 파일을 만드는 것이 좋습니다.

예:

if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log

또는 특정 항목을 삭제하려는 경우 :

if $programname == 'programname' then ~

귀하의 경우 : (UDP)

if $programname == 'programname' then @remote.syslog.server
& ~

또는 (TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~

그만큼 & ~수단 (에만! 이전 라인) 매칭 처리를 중지 추가 항목에 대한.

좀 더 일반적인 정보 :

또한 필터가 항상 같은 줄에 있는지 확인하십시오.

# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~

유용한 필터 :

$hostname
$programname
$msg
$syslogseverity

연산자 :

== (equals)
contains
and
or

추가 정보 : http://wiki.rsyslog.com/index.php/Configuration_Samples


1
끊어진 링크를 고칠 수 있습니까?
Mark Walsh

1

우리는 또한 이것을 시도 할 수 있습니다. 그것은 나를 위해 잘 작동합니다.

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

참고 : 여기서 testing_docker폴더 소유권은 syslog 사용자에게 제공되어야합니다. 아래 명령에 따라 권한을 설정하십시오.

chown syslog:syslog testing_docker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.