我尝试使用syslog-ngconfiguration来分割来自IIS服务器的信息。 我创build并填写了syslog-ng.conf,但是我的csvparsing器丢失了第一列。 让我们看看:
source s_network { udp(ip(0.0.0.0) port(514)); }; template test { template("test arg1 = $VALUE1 arg2 = $VALUE2 arg3 = $VALUE3\n"); template_escape(yes); }; destination d_file { file("/var/log/me.log" template(test)); }; parser testpars { csv-parser(columns("VALUE1", "VALUE2", "VALUE3") flags(escape-double-char, strip-whitespace) delimiters(" ") quote-pairs('""<>[]')); }; log { source(s_network); parser(testpars); destination(d_file); };
我用netcat发送testing消息:
nc -w0 -u 127.0.0.1 514 <<< "val1 val2 val3"
/var/log/me.log文件中的结果是
test arg1 = val2 arg2 = val3 arg3 =
我的Linux是REDHAT 6,我的系统日志版本是3.4.1。 你有想法吗?
只是面对与file()源相同的东西。 解决的办法是给源参数添加flags(no-parse) 。 我想这也将有助于networking来源。
你用0开始一个数组,而不是1。
你需要添加“贪婪”的标志! 否则它不会粘在最后一个字段。
示例:csv_parser(列(“COLUMN1”,“COLUMN2”,“COLUMN3”)分隔符(“,”)flags(贪婪));
更多详情: http : //www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.3-guides/en/syslog-ng-ose-v3.3-guide-admin-en/html /reference_parsers_csv.html#example_parser_greedy