Я пытаюсь проанализировать сообщения журнала, полученные из порта udp, и вставить их в базу данных MYSQL . Мое место назначения в моем файле syslog-ng.conf выглядит следующим образом:
source syslog_udp {
udp(port(<port num>) flags(no-parse));
};
Я написал следующий синтаксический анализатор:
parser p_logparser{
csv-parser(columns("<column1>", "<column2>", ...)
flags(strip-whitespace)
delimiters(",")
template("${<column1}\n")
);
};
Я также использую фильтр, чтобы «отбросить» определенную часть сообщения журнала:
filter log_filter { not (match("<string>") and match("<string>"));};
В конечном итоге я хочу иметь возможность записать содержимое "column1" в базу данных MYSQL, но в целях тестирования я сейчас записываю в файл:
destination d_file {
file("<path>/${ISODATE}" template("Testing : ${column1}"));
};
log {
source(syslog_udp);
parser(p_logparser);
filter(log_filter);
destination(d_file);
};
Однако, когда я открываю файл, описанный в d_file, все, что я можно увидеть "Testing:", а содержимого column1 на самом деле нет. У меня такое ощущение, что мой синтаксический анализатор не создает программные макросы должным образом. Что я делаю не так?
Вам не нужна строка «шаблон» в парсере. Эта опция указывает, какую часть сообщения журнала вы хотите проанализировать с помощью анализатора CSV, и на данном этапе это, вероятно, значение по умолчанию ($ {MESSAGE}).