我正在尝试解析从 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 的内容实际上并不存在。我有一种感觉,这是因为我的解析器没有正确创建软宏。我究竟做错了什么?
答案1
您的解析器中不需要“模板”行。此选项指定您要使用 CSV 解析器解析日志消息的哪一部分,此时这可能是默认值 (${MESSAGE})。