Syslog-ng.conf csv 解析器丢失了第一列

Syslog-ng.conf csv 解析器丢失了第一列

我尝试使用 syslog-ng 配置拆分来自 IIS 服务器的信息。我创建并填写了 syslog-ng.conf,但我的 csv 解析器丢失了第一列。让我们看看:

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 发送一条测试消息:

nc  -w0 -u 127.0.0.1 514 <<< "val1 val2 val3"

/var/log/me.log 文件中的结果是

test arg1 = val2 arg2 = val3 arg3 = 

我的 Linux 是 REDHAT 6,我的 syslog 版本是 3.4.1。您有什么想法吗?

答案1

刚刚遇到了与源相同的问题file()。解决方案是添加flags(no-parse)源参数。我想这对网络源也会有帮助。

答案2

数组以 0 开始,而不是以 1 开始。

答案3

您需要添加“贪婪”标志!否则它不会粘贴最后一个字段。

例如:csv_parser(columns(“COLUMN1”,“COLUMN2”,“COLUMN3”)分隔符(“,”)标志(贪婪));

更多细节 : 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

相关内容