将MongoDB中的数据附加到由Logstash处理并解析为Elasticsearch的日志文件中

时间:2017-07-11 03:00:37

标签: mongodb logstash elastic-stack

对标题感到抱歉,我的案子真的无法用一句话来解释。

以下是我的情况:

  1. 我有一大堆日志文件(大约4GB),我希望用Logstash解析它与Elastic堆栈(Logstash,Elasticsearch,Kibana)一起使用。
  2. 在日志中,有一个我用Logstash成功解析的序列号。此数字对应于MongoDB集合的索引。在解析每个日志时,我希望能够使用解析的数字查询集合并检索我想要包含在传递给Elasticsearch的最终输出中的数据。
  3. 为了使事情更清楚,这是一个粗略的例子。假设我有原始日志:

    2017-11-20 14:24:14.011 123 log_number_one
    

    在解析的日志发送到Elasticsearch之前,我想用123查询我的MongoDB集合,并获取数据data1data2以附加到要发送到Elasticsearch的文档,所以我的最终结果将有类似于:

    的字段
    { 
        timestamp: 2017-11-20 14:24:14.011, 
        serial: 123, 
        data1: "foo", 
        data2: "bar", 
        log: log_number_one
    }
    

    我认为,实现这一目标的一种简单方法是简单地预处理日志并通过MongoDB运行数字,然后再通过Logstash解析它们。然而,看到我有4GB的日志文件,我希望有一种方法可以一举实现这一目标。我想知道我的边缘情况是否可以用ruby过滤器插件解决,在那里我可以运行一些任意的ruby代码来执行上述操作?

    非常感谢任何帮助/建议!

1 个答案:

答案 0 :(得分:0)

来自弹性团队成员Christian_Dahlqvist的回答(所有归功于他):

  

根据MongoDB中记录的数量和数据的总大小(假设它是一个合理的大小数据集),您可以将数据提取到一个文件中,其中每个序列号与字符串表示形式相关联JSON格式的数据。然后,您可以使用translate filter根据序列号使用序列化JSON填充字段,然后使用子过滤器对其进行解析并将其添加到事件中。

参考:https://discuss.elastic.co/t/appending-data-from-mongodb-into-log-files-being-processed-by-logstash-and-parsed-into-elasticsearch/92564/2