我将我的日志集中到一个syslog中,我想从即将到来的日志中获取UUID以将其保存到数据库中。这可能吗?
日志消息如下所示:
3月28日14:14:26 172.17.42.1 1 2016-03-28T08:14:26.912-03:00 0e40cd94516b service-godzilla-central - 审计 - 0c9886fc-ab7f-42a1-8081-5ae6409a0e66 Header中未找到correlationId。 一个是生成的。
3月28日14:14:26 172.17.42.1 1 2016-03-28T08:14:26.927-03:00 0e40cd94516b service-godzilla-central - 审计 - 0c9886fc-ab7f-42a1-8081-5ae6409a0e66 Entrada - 控制器 - initParameter [{" terminalId":3354," channel":5," version":" AU-014"}]
3月28日14:14:26 172.17.42.1 1 2016-03-28T08:14:26.927-03:00 0e40cd94516b service-godzilla-central - 审计 - 0c9886fc-ab7f-42a1-8081-5ae6409a0e66 Entrada - 服务 - 参数 [{" terminalId":3354,"信道":5,"版本":" AU-014""的correlationID&# 34;:" 0c9886fc-ab7f-42a1-8081-5ae6409a0e66"}]
答案 0 :(得分:0)
要获取UUID(0c9886fc-ab7f-42a1-8081-5ae6409a0e66),您可以使用csv-parser将消息拆分为每个空间的列。有关详细信息,请参阅The syslog-ng Administrator Guide - Parsing messages with comma-separated values。
基本上,您必须创建一个使用空格作为分隔符的csv-parser,并为列添加名称(具有名称的最后一列将包含消息的其余部分)。类似的东西:
parser p_uuid {
csv-parser(columns("COLUMN1", "COLUMN2", "COLUMN3", "COLUMN4", "COLUMN5", "COLUMN6", "COLUMN7", "COLUMN8" )
flags(greedy)
delimiters(" ")
);
};
然后在日志路径中使用此解析器。尝试将其与文件目标一起使用,您可以在模板中使用模板中的列名来查看何时获得正确的解析。您可以将解析后的列用作模板中的宏,例如:
log { source(s_local);
parser(p_uuid); destination(d_file);};
};
destination d_file {
file ("/var/log/parsed-logs" template("${ISODATE} ${HOST} Col1=${COLUMN1} Col2=${COLUMN2} Col3=${COLUMN3} Col4=${COLUMN4} Col5=${COLUMN5} Col6=${COLUMN6} Col6=${COLUMN6} Col7=${COLUMN7} Col8=${COLUMN8}\n") );
};
如果需要,您还可以使用多个解析器来解析消息的不同部分(例如,如果您需要消息的JSON部分,您可以首先使用带有[]分隔符的csv-parser,生成两列,然后在第二列上运行json-parser。