Syslog-ng:带斜杠的主机名

Syslog-ng:带斜杠的主机名

我们遇到了一个问题,即我们有一个设备类型日志,其主机名为 slot1/devicename。不幸的是,当日志写入磁盘时,只有 slot1 被写入;由于我们有许多设备,这让我们无法知道哪个设备发送了日志。我们进行了数据包捕获以确认在网络上,主机名为 slot1/devicename

options {
  long_hostnames(off);
  sync(0);
  perm(0640);
  stats(3600);
  chain_hostnames(on);
  keep_hostname(on);
  create_dirs(on);
  bad-hostname("^[0-9][0-9]*$");
}

source s_in {
  udp();
  tcp(max-connections(255)); };
}

destination s_files {
  file (
    "/opt/syslog-ng/$HOST/$FACILITY-$HOUR.log"
    template("$DATE $HOST $MSG\n")
    template_escape(no)
  );
};

log { source(s_in); destination(s_files); }

这是 SUSE Linux Enterprise Server 11 SP4 上的 syslog-ng-2.0.9-27.34.39.2

答案1

我的猜测是 syslog-ng 不希望主机名包含斜线,因此它假定该字符串的第一部分是主机名。它要么删除第二部分,要么假定它属于消息的下一个字段。检查 $PROGRAM 宏的值,它可能包含您要查找的设备名称。(如果没有,还请检查 $HOST_FROM、$FULLHOST_FROM 和 $FULLHOST 宏。)

如果是,您可以将目标文件名修改为 /$HOST-$PROGRAM/,或类似名称(并且可能还为此设备使用过滤器和单独的日志路径,以便新模板不会弄乱正常工作的设备的目录名称)。

如果这不能解决问题,较新版本的 syslog-ng 可以通过多种方式解析和重写日志消息来解决这个问题,但为此您需要安装较新的版本(2.0.9 已经过时了)。

HTH,罗伯特

相关内容