0

我在本地机器和服务器端都使用“yum install syslog-ng”安装了 syslog-ng。我正在使用 syslog-ng 的开源版本。

我需要将日志文件名从客户端传递到服务器端。我在客户端的 18372.4.name 字段中明确设置了 .SDATA.file,因为文件的名称在 $FILE_NAME 宏中可用。但是“.SDATA.file at 18372.4.name”在服务器端是空的。当我使用一些静态文件名时,日志就可以工作了。

以下是我的代码,我不知道我哪里出错了如果您需要更多信息,我可以提供给您,任何人都可以帮助我。

MY CLIENT END SYSLOG-NG CODE:
source s_application_logs { 
    file( 
        "/var/log/test.log"
        flags(no-parse)
    );
};

destination d_access_system {
    syslog( 
          "52.38.34.160"
          transport("tcp")
          port(6514)
    );
};

rewrite r_set_filename {
   set(
       "$FILE_NAME",
       value(".SDATA.file at 18372.4.name")
      );
};

rewrite r_rename_filename {
   subst(
         "/var/log/",
         "",
         value(".SDATA.file at 18372.4.name")
         type("string")
         flags("prefix")
        );
};

log {
    source(s_application_logs);
    rewrite(r_set_filename);
    rewrite(r_rename_filename);
    destination(d_access_system);
};



MY SERVER END SYSLOG-NG CODE:
source s_server_end {
              syslog(
                     port(6514)
                     max_connections(1000)
                     keep_hostname(yes)
                    );
};

destination d_log_files {
    file(
        "/var/log/test/${.SDATA.file at 18372.4.name}"
        create_dirs(yes)
    );
};

log {source(s_server_end);destination(d_log_files);};
4

1 回答 1

1

问题是 $FILE_NAME 宏目前仅在 syslog-ng 的商业版本中可用。有关可能的解决方法,请参阅此博文:使用 syslog-ng 转发文件名

于 2016-08-16T06:53:37.043 回答