使用logstash解析日志时如何添加序列ID

时间:2014-08-25 09:20:21

标签: logging elasticsearch logstash

我想用logstash和elasticsearch索引hadoop日志。 这是我的问题: 我通过logstash将日志加载到elasticsearch中,我希望通过elasticsearch搜索事件,并保持事件的顺序与原始日志文件中的相同。但它不起作用。 例如,原始日志文件中的事件可能如下所示:

2013-12-25 23:10:19,022 INFO A..
2013-12-25 23:10:19,022 INFO B..
2013-12-25 23:10:19,022 INFO C..

但是当我使用关键字“@timestamp”的elasticsearch搜索它时,结果可能是这样的:

2013-12-25 23:10:19,022 INFO B..
2013-12-25 23:10:19,022 INFO A..
2013-12-25 23:10:19,022 INFO C..

由于这三个事件的时间戳相同,因此搜索结果无法像以前那样保持顺序。

这是我的解决方案: 我想我可以为每个事件添加一个id,当logstash解析数据时会添加id,并且它会随着时间戳的增加而增加。然后,当我搜索事件时,我可以使用id而不是时间戳,即使他们的timastamp相同,他们也会保持正确的顺序。

但是我不知道如何使用logstash添加额外的自动增量'id'字段,我考虑了logstash的conf文件并且没有找到解决方案。 请给我一些如何实现这一点的建议,非常感谢!

1 个答案:

答案 0 :(得分:3)

您可以尝试使用时间戳来插入新字段seq。这是配置,

ruby {
    code => "
          event['seq'] = Time.now.strftime('%Y%m%d%H%M%S%L').to_i                
    "
}

使用此解决方案,您无需编写任何插件。在此示例中,我们使用timestamp millisecond作为字段seq的值。但是,如果您的CPU功能强大且日志处理速度更快,则可能会有2个事件具有相同的值。请试一试。