【问题标题】:How to add sequence id when using logstash to parse log使用logstash解析日志时如何添加序列id
【发布时间】:2014-08-26 11:54:32
【问题描述】:

我想用 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..

由于这三个事件的timestampa相同,搜索结果不能保持之前的顺序。

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

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

【问题讨论】:

标签: logging elasticsearch logstash


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答,这是一个很好的解决方案,但我认为您认为多个事件将具有相同的 seq 可能会因为毫秒而发生。我会试试的,再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2020-02-19
相关资源
最近更新 更多