2014-11-04 120 views
0

我在一台机器上有一个现成的Apache索引,我想克隆到另一台机器使用logstash。相当容易我以为复制弹性搜索索引与Logstash

input { 
    elasticsearch { 
     host => "xxx.xxx.xxx.xxx" 
     index => "logs" 
    } 
} 
filter { 

} 

output { 
    elasticsearch { 
     cluster => "Loa" 
     host => "127.0.0.1" 
     protocol => http 
     index => "logs" 
     index_type => "apache_access" 
    } 
} 

,拉过的文档,但不会停止,因为它使用的默认查询"*"(原指标具有〜50.000文档和我杀前的脚本,当新的指数为过600.000文档和上升)

下一个我试图以确保文档会得到更新,而不是复制,而是this commit还没有做出这些事,所以我没有主..

然后我记得sincedb但似乎无法在查询中使用它(或可能)

有什么建议吗?也许一个完全不同的方法?非常感谢!

+0

你解决了这个问题吗?有类似的问题,但输入似乎只运行一次,并没有拿起输入索引上的任何新条目。 – Raoot 2016-05-10 12:07:57

回答

0

假设elasticsearch输入创建与文档ID的logstash事件(我认为它会被_id或类似的东西),尝试设置弹性的搜索输出方式如下:

output { 
    elasticsearch { 
     cluster => "Loa" 
     host => "127.0.0.1" 
     protocol => http 
     index => "logs" 
     index_type => "apache_access" 
     document_id => "%{_id}" 
    } 
} 

这样,即使如果elasticsearch输入无论出于何种原因继续无限期地推送相同的文档,elasticsearch将仅更新现有文档,而不是使用新的id创建新文档。

一旦你达到50,000,你可以停下来。

+0

感谢您的回答..这是我试过的第二件事,但不幸的是'_id'字段不是由elasticearch-input返回的(这应该是由我在提问中链接的提交所固定的,但还没有) – harpax 2014-11-07 13:38:26

+0

那么为什么不使用它呢?等待它进入可能需要一段时间.... – Roman 2014-11-07 14:14:43