2017-01-24 107 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