уведомлять Logstash при вводе новых данных в базе данных mysql без использования расписания параметров - PullRequest
0 голосов
/ 29 мая 2018

Я работаю над Elastic Stack с Mysql.все работает нормально, как logstash, получая данные из базы данных mysql и отправляя их вasticsearch, а когда новые записи вводятся в данные mysql, а затем для автоматического обновленияasticsearch, я использую параметр: Расписание, но в этом случае logstash постоянно проверяет наличие новых данных из своего терминала, которыймоя главная проблема.

input {

  jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    # The user we wish to execute our statement as
    jdbc_user => "root"
    jdbc_password => ""
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/Downloads/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #run logstash at an interval of on minute
    schedule => "*/15 * * * *"
    use_column_value => true
    tracking_column => 'EVENT_TIME_OCCURRENCE_FIELD'
    # our query
    statement => "SELECT * FROM brainplay WHERE EVENT_TIME_OCCURRENCE_FIELD > :sql_last_value"
    }

  }
output {
  stdout { codec => json_lines }
  elasticsearch {
  "hosts" => "localhost:9200"
  "index" => "test-migrate"
  "document_type" => "data"
  "document_id"   => "%{personid}"
  }
}

Но если данные большие, Logstash проверит наличие новых записей во всех данных без какой-либо остановки, тогда это уменьшит масштабируемость и потребит больше энергии.

Есть лилюбой другой метод или любой webhook, например, когда новые данные вводятся в базу данных, тогда mysql будет уведомлять Logstash только о новых данных, или Logstash будет проверять только новые записи. Пожалуйста, помогите

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете использовать параметр sql_last_start в своем запросе с любым полем отметки времени (при условии, что есть поле отметки времени, например last_updated).

Например, ваш запрос может быть похож на

WHERE last_updated >= :sql_last_start

От этого ответа ,

Например, при первом запуске этого sql_last_start будет 1970-01-01 00:00:00, и вы 'Я получу все строки.Второй запуск sql_last_start будет (например) 2015-12-03 10:55:00, и запрос вернет все строки с отметкой времени более новой, чем эта.

или вы можете прочитать этот ответ об использовании :sql_last_value

WHERE last_updated > :sql_last_value
...