簡體   English   中英

從ElasticSearch提取到Kafka,使用logstash連續不斷地進行任何新的ES更新

[英]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腳本,該腳本基本上可以執行以下操作:

  1. 運行logstash -f your_config_file.conf
  2. 完成后,設置LAST_RUN=$(date +"%FT%T")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM