2016-03-02 52 views
0

我有我的日志集中到一个系统日志,我想从日志中获取UUID将其保存到数据库中。这可能吗?是否可以使用syslog-ng从日志获取UUID?

日志消息看起来像这样:

年03月28十四点14分26秒1 172.17.42.1 2016-03-28T08:14:26.912-03:00 0e40cd94516b服务哥斯拉中央 - 审计 - 0c9886fc-ab7f-42a1-8081-5ae6409a0e66在标题中找不到相关性标识符。 生成了一个。

年03月28 14时14分26秒1 172.17.42.1 2016-03-28T08:14:26.927-03:00 0e40cd94516b服务哥斯拉中央 - 审计 - 0c9886fc-ab7f-42a1-8081-5ae6409a0e66 ENTRADA - 控制器 - initParameter [{“terminalId”:3354,“channel”:5,“version”:“AU-014”}]

Mar 28 14:14:26 172.17.42.1 1 2016-03-28T08:服务 - 参数 [{“terminalId”:3354,“channel”:5,“version” :“AU-014”,“correlationId”:“0c9886fc-ab7f-42a1-8081-5ae6409a0e66”}]

+0

嗨,是日志消息中已有的UUID,并且您想要提取它,还是希望为syslog-ng生成每条消息的唯一ID?在第一种情况下,您可以使用解析器,但它取决于消息格式。在第二种情况下,较新的syslog-ng版本具有可以生成UUID的模板函数,请参阅http://docbuilder.balabit/job/syslog-ng-OSE-master-github/lastSuccessfulBuild/artifact/en/out/en/ syslog-ng-ose-guide-admin/html/reference-template-functions.html#template-function-uuid –

+0

UUID已经在日志消息中可用,我想提取它 – Rys

+0

然后它取决于消息格式。您是直接从应用程序接收消息,还是通过另一台主机的系统日志协议接收消息?你可以发布一条示例消息吗?可能您需要使用解析器从消息中提取uuid:https://www.balabit.com/documents/syslog-ng-ose-3.7-guides/en/syslog-ng-ose-guide-admin/ html/chapter-parsers.html –

回答

0

要获取UUID(0c9886fc-ab7f-42a1-8081-5ae6409a0e66),可以使用csv解析器将消息拆分为每个空间的列。详情请参阅The syslog-ng Administrator Guide - Parsing messages with comma-separated values

基本上,您必须创建一个使用空格作为分隔符的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解析器,即会产生两列,然后在第二列上运行一个json解析器)。

相关问题