rsyslogd가 짧은 호스트 이름 대신 서버의 FQDN을 기록하도록하려면 어떻게해야합니까?


22

우분투 10.04 LTS에서 주식 rsyslogd (4.2.0-2ubuntu8.1)를 사용하여 간단한 중앙 집중식 syslog 서버를 구현하려고합니다. 이 시점에서 모든 클라이언트 노드가 중앙 서버에 로그를 전송하지만 클라이언트는 FQDN 대신 짧은 호스트 이름이 포함 된 로그 메시지를 전송합니다.

우분투 rsyslogd 맨 페이지에 따라 :

원격 호스트가 호스트와 동일한 도메인에 있고 rsyslogd가 실행 중이면 전체 fqdn 대신 단순 호스트 이름 만 기록됩니다.

환경간에 짧은 이름 (예 : core1.example.com 및 core1.stg.example.com)을 재사용하므로 메시지가 core1로 기록되므로 문제가됩니다.

클라이언트와 서버 모두 동일한 / etc / default / rsyslog를 갖습니다.

RSYSLOGD_OPTIONS="-c4"

동일한 /etc/rsyslogd.conf 파일 :

$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf

클라이언트는이 /etc/rsyslog.d/remote.conf 파일을 가지고 있으며, 원격 서버로 보내도록 지시합니다.

*.* @@syslog.example.com

서버는이 /etc/rsyslog.d/server.conf 파일을 사용합니다 :

$ModLoad imtcp
$InputTCPServerRun 514
$DirGroup root
$DirCreateMode 0755
$FileGroup root
$template PerHostAuth,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/auth.log"
$template PerHostCron,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/cron.log"
$template PerHostSyslog,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog"
$template PerHostDaemon,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/daemon.log"
$template PerHostKern,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/kern.log"
$template PerHostLpr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/lpr.log"
$template PerHostUser,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/user.log"
$template PerHostMail,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.log"
$template PerHostMailInfo,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.info"
$template PerHostMailWarn,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.warn"
$template PerHostMailErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.err"
$template PerHostNewsCrit,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.crit"
$template PerHostNewsErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.err"
$template PerHostNewsNotice,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.notice"
$template PerHostDebug,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/debug"
$template PerHostMessages,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages"
auth,authpriv.*         ?PerHostAuth
*.*;auth,authpriv.none  -?PerHostSyslog
cron.*                  ?PerHostCron
daemon.*                -?PerHostDaemon
kern.*                  -?PerHostKern
lpr.*                   -?PerHostLpr
mail.*                  -?PerHostMail
user.*                  -?PerHostUser
mail.info               -?PerHostMailInfo
mail.warn               ?PerHostMailWarn
mail.err                ?PerHostMailErr
news.crit               ?PerHostNewsCrit
news.err                ?PerHostNewsErr
news.notice             -?PerHostNewsNotice
*.=debug;\
   auth,authpriv.none;\
   news.none;mail.none   -?PerHostDebug
   *.=info;*.=notice;*.=warn;\
      auth,authpriv.none;\
      cron,daemon.none;\
      mail,news.none        -?PerHostMessages

클라이언트와 서버 모두 "$ PreserveFQDN on"을 지정하는 구성을 공유하므로 syslog 메시지에 FQDN 호스트 이름이 표시 될 것으로 예상되지만 설정이 효과가없는 것 같습니다. rsyslog에 대해 찾은 대부분의 다른 설정은 도메인을 유지하는 대신 FQDN에서 도메인을 제거하는 것입니다. 문제의 근본 원인은 고객이 FQDN을 먼저 보내지 않지만 그 행동을 강요하는 방법을 알지 못한다는 것입니다.

아무도 내가 잃어버린 것에 대해 의견을 말할 수 있습니까? 로그 메시지에 FQDN을 포함시켜야하는 유일한 사람은 아닙니다.


그 후 서버와 클라이언트 노드의 하위 집합에 Ubuntu 11.04의 rsyslog 4.6.4-2ubuntu4 패키지를 빌드하고 설치했지만 결과적으로이 동작의 변화는 관찰되지 않았습니다.
cwjohnston

답변:


38

나는이 문제에 부딪쳤다. 여기에 내가 고칠 수 있었던 방법이 있습니다.

  1. 클라이언트에서 원하는 호스트 이름이 localhost 앞에 오도록 / etc / hosts 파일을 수정하십시오.

    localhost를위한 127.0.0.1 호스트 이름

  2. 클라이언트와 서버에서 /etc/rsyslog.conf를 수정하여이 명령문을 포함하십시오.

    에 $ PreserveFQDN

  3. 서버에서 rsyslog.conf의 템플릿에 % HOSTNAME % 변수를 사용했습니다.


1
정답으로 표시되어야합니다
ErJab

1
위의 답변으로 표시하십시오.
Greg Annandale

1
4 년이 지난 후에도이 답변에는 여전히 다리가 있습니다. devops의 크리스마스 이브에서 Matt를 도와 주셔서 감사합니다.
Joe

7

rsyslog 전송 호스트 이름을 변경하려면 모듈을로드하기 전에 /etc/rsyslog.conf의 첫 번째 행으로 다음 지시문을 추가하십시오.

$LocalHostName yourhostname

또는 rsyslog가 호스트 이름 (system1) 대신 정규화 된 도메인 이름 (system1.example.com과 같은 FQDN)으로 보내도록하려면 다음 지시문을 사용하십시오.

$PreserveFQDN on

이것은 거의 필요하지 않습니다. 동일한 이름의 시스템이없는 경우 호스트 이름 (도메인 이름없이)을 사용하는 것이 좋습니다.

다른 로그를 다른 호스트 이름으로 보낼 수있는 다른 방법은 사용자 지정 템플릿을 설정하는 것입니다.

$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate

4

버그 일 수 있습니다. 등록 된 FQDN 버그 는 적용 되지 않는 것으로 보이지만 FQDN 지원은 원하거나 알려진 것으로 알려져 있습니다.

해결 방법으로 릴레이를 수행하지 않으면 %FROMHOST%% HOSTNAME % 대신 사용하십시오 .


1
를 사용 %FROMHOST%하면 FQDN이 제공되지만 클라이언트 노드의 IP 주소에서 역방향 조회의 결과 인 것 같습니다. 내 시스템이 AWS EC2에서 실행되고 있기 때문에 불행히도 항상 FQDN이 생성되어 즉각적인 의미는 없습니다.
cwjohnston

0

7.6.x 와만 대화 할 수 있지만 $PreserveFQDN작동하는 데 필요한 전부였습니다. /etc/hosts노드의 FQDN이 올바르게 설정되어 있으면 혼란을 피할 수 있습니다 .

CentOS / RHEL 시스템의 예 :

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

# To this
HOSTNAME=service-a-1.sn1.vpc3.example.com

재부팅해야합니다.


0

클라이언트 측 rsyslog 구성에서이를 사용할 수 있습니다.

$LocalHostName {{HOSTNAME}}

{{HOSTNAME}}원하는 호스트 이름으로 바꾸 거나 콧수염을 사용하여 각 클라이언트에서 자동으로 템플리트 할 수 있습니다 .

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