0

我将日志集中到系统日志中,我想从即将到来的日志中获取 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 在标头中找不到相关 ID。生成了一个。

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,"channel":5,"version":"AU-014","correlationId":"0c9886fc-ab7f-42a1-8081-5ae6409a0e66"}]

4

1 回答 1

0

要获取 UUID (0c9886fc-ab7f-42a1-8081-5ae6409a0e66),您可以使用 csv-parser 将消息拆分为每个空间的列。有关详细信息,请参阅syslog-ng 管理员指南 - 使用逗号分隔值解析消息

基本上,您必须创建一个使用空格作为分隔符的 csv 解析器,并为列添加名称(具有名称的最后一列将包含消息的其余部分)。就像是:

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)。

于 2016-03-30T10:54:44.683 回答