Назад | Перейти на главную страницу

Парсер syslog-ng.conf csv потерял первые столбцы

Я пытаюсь разделить информацию, поступающую с сервера IIS, с конфигурацией syslog-ng. Я создаю и заполняю 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, а мой системный журнал - 3.4.1. Есть идея?

Просто столкнулся с тем же самым с file() источник. Решением было добавить flags(no-parse) к исходным параметрам. Я полагаю, это поможет и для сетевого источника.

Вы начинаете массив с 0, а не с 1.

Вам нужно добавить «жадный» флаг! Иначе последнее поле не будет.

Пример: csv_parser (columns ("COLUMN1", "COLUMN2", "COLUMN3") delimiters (",") 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