如何获取rsyslogd来记录服务器的FQDN而不是其简短的主机名?


22

我正在尝试在Ubuntu 10.04 LTS上使用库存rsyslogd(4.2.0-2ubuntu8.1)实现一个简单的集中式syslog服务器。此时,我所有的客户端节点都将日志发送到中央服务器,但是客户端正在发送日志消息,其中包含其简短的主机名而不是FQDN。

根据Ubuntu 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”的配置,因此我希望在系统日志消息中看到FQDN主机名,但是该设置似乎没有任何作用。我为rsyslog找到的大多数其他设置都旨在从FQDN中剥离域,而不是保留它们。我认为问题的根源在于我的客户最初没有发送FQDN,但我不知道如何强制这种行为。

谁能评论我可能会缺少的东西?我想我不是唯一需要在日志消息中包含FQDN的人。


随后,我在服务器和部分客户端节点上从Ubuntu 11.04构建并安装了rsyslog 4.6.4-2ubuntu4软件包,但未观察到此行为的变化。
cwjohnston 2011年

Answers:


38

我也遇到了这个问题。这是我能够解决的方法。

  1. 在客户端上,修改/ etc / hosts文件,以便所需的主机名位于localhost之前。

    127.0.0.1主机名用于日志localhost

  2. 在客户端和服务器上,修改/etc/rsyslog.conf以包含以下语句:

    $ PreserveFQDN在

  3. 在服务器上,我将%HOSTNAME%变量用于rsyslog.conf中的模板:


1
这应该标记为答案
ErJab 2014年

1
请标记以上作为答案。
格雷格·安南代尔

1
4年后,这个答案仍然存在。感谢您在圣诞节前夕为Matt提供帮助。

7

要更改rsyslog发送的主机名,请在加载任何模块之前在/etc/rsyslog.conf中的第一行添加以下指令:

$LocalHostName yourhostname

或者,要使rsyslog使用完全限定的域名(FQDN,例如system1.example.com)发送而不是简单地使用主机名(system1)发送,请使用以下指令:

$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 2011年

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}}为所需的主机名,或者您可以自动使用胡子在每个客户端上取消模板化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.