logging - 使用Logstash解析日志时如何添加序列ID

标签 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..

但是,当我使用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/

相关文章:

ubuntu - Logstash 和 iptables

Python - 不同的日志应该位于不同的文件中,但出现在同一个文件中

elasticsearch - 如何使用Elasticsearch过滤查询结果

elasticsearch - 无法在 Windows 上使用单播启动两个 ElasticSearch 节点

elasticsearch - 引用不同索引中的对象-Elasticsearch

templates - 多索引logstash模板

java - 如何在 log4j.xml 文件中指定自定义/扩展记录器?

javascript - AngularJS:服务器端记录客户端错误

java - Log4j 2 性能 : is single-threaded Console logging faster in Logback than Log4j 2?

python - 如何在elasticsearch-dsl-py中获取aggs