是否可以使用syslog-ng从日志中获取UUID?

时间:2016-03-02 20:14:49

标签: logging syslog-ng

我将我的日志集中到一个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"}]

1 个答案:

答案 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。