[英]Extract from ElasticSearch, into Kafka, continuously any new ES updates using logstash
我有一個帶有多個索引的ES集群,它們均在隨機時間間隔內接收更新。 我有一個logstash實例,從ES提取數據並將其傳遞到Kafka。
每分鍾運行一次並獲取ES中的任何更新的好方法是什么?
Conf:
input {
elasticsearch {
hosts => [ "hostname1.com:5432", "hostname2.com" ]
index => "myindex-*"
query => "*"
size => 10000
scroll => "5m"
}
}
output {
kafka {
bootstrap-servers => "abc-kafka.com:1234"
topic_id => "my.topic.test"
}
}
我想在查詢中使用文檔@timestamp並將其保存在臨時文件中,然后重新運行查詢(使用時間表)並獲取最新的更新/插入(例如Logstash的jdbc-input插件支持的功能)
有任何想法嗎?
先感謝您
幾個月前有人問過同樣的事情 ,但是這個問題並沒有帶來太多流量。 您可以對其+1。
同時,您可以在elasticsearch
輸入中修改query
,如下所示:
query => '{"query":{"range":{"timestamp":{"gt": "now-1m"}}}}'
即,您查詢所有timestamp
字段(任意名稱,更改為與您的名稱匹配)在過去一分鍾內的文檔
然后,您需要設置一個cron,它將每分鍾啟動一次logstash進程。 現在,由於觸發cron的時間,logstash開始運行的時間與查詢到達ES服務器端的時間之間的延遲,只知道1m
可能不夠,您可能會丟失一些文檔。 您需要對此進行測試,然后找出最合適的。
根據最近的這篇博客文章 ,另一種方法可能是記錄Logstash在環境變量LAST_RUN
運行的最后時間,並在查詢中使用該變量:
query => '{"query":{"range":{"timestamp":{"gt": "${LAST_RUN}"}}}}'
在這種情況下,您將創建一個由cron運行的shell腳本,該腳本基本上可以執行以下操作:
logstash -f your_config_file.conf
LAST_RUN=$(date +"%FT%T")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.