2017-01-24 74 views
0

我使用logstash和input-elasticsearch以及output-elasticsearch.Both弹性搜索具有不同的实例。 在数据进入输出块之前,我想汇总一些文档,创建新文档的散列并在弹性搜索中插入嵌套文档。 所以基本上我想在嵌套文档插入到elasticsearch之前做一些处理。这可能吗?Logstash-ElasticSearch中的聚合

input{ 
    # something here to get a value of variable stored in a different file 
    elasticsearch{ 
    hosts=>"abc.de.fg.hi:jklm" 
    query=>'{--some query---}' 
    } 
    } 
    output{ 

    elasticsearch{ 
    hosts=>"xxx.xx.xx.xx:yyyy" 

    } 
+0

不幸的是,目前还没有从Logstash内部运行聚合的方法。对于它的价值,有一个我一直在研究的插件就是这样做的,但我还没有发布它。当我运行某些东西时,我会更新这个线程。在此期间,您可能想查看['聚合过滤器](https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html),这可能会有所斩获。 – Val

+0

没有消息如何使用聚合 – hudi

回答

2

我使用的“聚合”插件。

在我的情况下,输入是从UDP和我一起将其过滤“神交”,但我相信你可以达到你想要做什么调整一下代码。

如果没有你的样本正在努力实现准确,最好这个我能做的就是告诉你我的代码示例:

aggregate { 
    task_id => “%{action}_%{progress}” 
    code => 
    “ 
    map[‘avg’] || = 0; 
    map[‘avg’] += event.get(‘elapsed’); 
    map[‘my_count’] || = 0; 
    map[‘my_count’] += 1; 

    if (map[‘my_count’] == ${LogstashAggregationCount})#Environment variable 
     event.set(‘elapsedAvg’, (map[‘avg’]/map[‘my_count’])) 
     event.set(‘Aggregetion’, true) 
     map[‘avg’] = 0 
     map[‘my_count’] = 0 
    end 
    “ 
}  
if (![Aggregetion]) { 
    drop {} 
} 

骂你需要以使其适应您的具体情况。有关我的代码的更多深入解释,请阅读此处:How to Use Logstash Aggregations