我想用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文件并且没有找到解决方案。 请给我一些如何实现这一点的建议,非常感谢!
答案 0 :(得分:3)
您可以尝试使用时间戳来插入新字段seq
。这是配置,
ruby {
code => "
event['seq'] = Time.now.strftime('%Y%m%d%H%M%S%L').to_i
"
}
使用此解决方案,您无需编写任何插件。在此示例中,我们使用timestamp millisecond作为字段seq
的值。但是,如果您的CPU功能强大且日志处理速度更快,则可能会有2个事件具有相同的值。请试一试。