我想用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..
由于这三个事件中的timestamp是相同的,因此搜索结果无法保持以前的顺序。
这是我的解决方案:
我想我可以为每个事件添加一个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功能强大且日志处理速度更快,则可能会有2个事件具有相同的值。请尝试一下。
关于logging - 使用Logstash解析日志时如何添加序列ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25482663/