elasticsearch,logstash,Logging,elasticsearch,Logstash" /> elasticsearch,logstash,Logging,elasticsearch,Logstash" />

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

Logging 使用logstash解析日志时如何添加序列id,logging,elasticsearch,logstash,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..

我想用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..
但当我使用elasticsearch按关键字“@timestamp”搜索时,结果可能如下:

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..
因为这三个事件中的timesta是相同的,所以搜索结果不能像以前那样保持顺序

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

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

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

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

使用此解决方案,您无需编写任何插件。在本例中,我们使用时间戳毫秒作为字段
seq
的值。但是,如果您的CPU功能强大,并且日志处理速度更快,那么可能会有两个事件具有相同的值。请试穿一下

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

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

使用此解决方案,您无需编写任何插件。在本例中,我们使用时间戳毫秒作为字段
seq
的值。但是,如果您的CPU功能强大,并且日志处理速度更快,那么可能会有两个事件具有相同的值。请试穿一下

以前有人问过这个问题:这正是我想要的,也是一个很好的解决方案,非常感谢!以前有人问过这个问题:这正是我想要的,也是一个很好的解决方案,非常感谢!感谢您的回答,这是一个很好的解决方案,但我认为您考虑到多个事件将有相同的seq可能会因为毫秒而发生。我会再试一次,再次感谢。谢谢你的回答,这是一个很好的解决方案,但我认为你考虑到多个事件将有相同的序列可能会因为毫秒而发生。我会试试的,再次谢谢。