从syslogd迁移到syslog-ng期间的FQDN

我正在从syslogd迁移到SLES 9服务器上的syslog-ng(syslog-ng库存版本为1.6.8)。 服务器碰巧是一些远程logging器的日志主机。

如何configurationsyslog-ng以确保与日志中打印的主机名的syslogd行为有最大的兼容性? 有一些自定义脚本来分析日志,这些可能取决于主机名保持不变。 其中一些已经被syslogd报告为FQDN,如果它们现在被剥离,名称冲突肯定会发生。

顺便说一下,我没有使用syslogd -s或-l选项去除FQDN。

我当前研究syslog-ng选项的快照( 更新:这是不正确的,请参阅我自己的答案 ):

options { check_hostname(yes); # invalid chars? keep_hostname(yes); # yes - if there is a hostname embedded in the message, it will # be kept without overwrite/append # see https://lists.balabit.hu/pipermail/syslog-ng/2002-August/003669.html # note: RFC3164 allows either short hostname or IP, no FQDN use_dns(yes); # if there is no hostname embedded in the message, try DNS use_fqdn(no); # do not try to expand everything to FQDN? strip all FQDNs? strip only DNS-resolved FQDNs? # old syslogd behaviour (?): use embedded hostname, print fqdn (strip only local # domain + strip "-s" domains + strip domains for "-l" hosts) chain_hostnames(no); # if keep_hostname(no) or hostname not embedded, attach (rather than assign) # hostname/IP of *sender*; same as long_hostnames(off) sync(0); # sync immediately }; 

我发现syslog-ng手册有些不足。

自答案。 模仿syslogd行为似乎是不可能的。 经过大量的实验后,我提供了有关syslog-ng选项的研究/猜测的最新快照:

 options { ##################################################################### ### the flow of decisions for hostnames, syslog-ng 1.6.8: use_dns(yes); # yes = first resolve the IP in $HOST_FROM (the message sender) keep_hostname(no); # no = ignore $HOST embedded in the message (rare); overwrite $HOST with $HOST_FROM # note: RFC3164 allows embedding short hostname or IP, not FQDN use_fqdn(yes); # yes = expand everything to FQDN, including local name # Note syslogd behaviour is incompatible: use FQDN, but strip local # domain + strip "-s" domains + strip domains for "-l" hosts chain_hostnames(no); # no = keep $FULLHOST same as $HOST; # do not expand $FULLHOST into either "src@$HOST" for localhost, # or to "$HOST/$HOST_FROM" for remote client #long_hostnames(no); # synonym of chain_hostnames ### with default template, the resulting $FULLHOST is written to log ##################################################################### check_hostname(yes); # invalid chars? sync(0); # sync immediately }; 

我发现远程系统的消息可能没有embedded主机名,这导致keep_hostname不起作用。

你有的选项可能是你想要的,除了use_dns(yes); 。 启用它将导致syslog-ng在日志来自的IP地址上进行DNS查找。 这是一个很大的性能问题(日志中的DNS查找是因为syslog-ng必须阻止,因为在dns查找返回之前它不能写入日志),这也意味着如果日志不包含条目,syslog-ng会尝试使用DNS主机名来填写它,而传统的syslog会用日志源的IP地址来填充。

说实话,你唯一需要的是keep_hostname(yes); 和(只是为了保持无效的字符), check_hostname(yes); 。 其余的不会伤害任何东西,但并不是严格要求的(除了use_dns(yes); ,正如上面提到的那样,你不需要)。

为了减less名称parsing的性能影响,您也可以尝试这些技巧: http : //www.balabit.com/dl/html/syslog-ng-v3.0-guide-admin-en.html/ch07s04.html

“我发现syslog-ng手册有些不足。” >关于syslog-ng手册和文档的意见和反馈非常欢迎您在[email protected]或syslog-ng邮件列表( https://lists.balabit.hu/mailman/listinfo/syslog-ng )。

请让我知道,如果use_dns(是)选项适合您的情况,我会尽量使这部分的文档在下一个版本中更清晰。