Elastic сохраняет только последнюю запись из logstash
Вот оператор выбора, который является данными транзакции, каждый раз, когда данные вставляются в UserProfile, старые значения индекса удаляются из эластичного
jdbc {
statement => "SELECT userId,salesTeam FROM UserProfile with (nolock)"
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "q_d"
document_type => "cd"
document_id => "%{userId}%"
}
stdout { codec => rubydebug }
}
Я хочу обновить существующие документы, если есть какие-либо изменения, иначе индексировать новый документ.
что я тут не так делаю?
1 ответ
input {
jdbc {
# Postgres jdbc connection string to our database, mydb
jdbc_connection_string => "jdbc:postgresql://localhost:5432/bhavya"
# The user we wish to execute our statement as
jdbc_user => "postgres"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/root/postgresql-42.2.2.jar"
# The name of the driver class for Postgresql
jdbc_driver_class => "org.postgresql.Driver"
jdbc_password => "postgres"
jdbc_validate_connection => true
#You can schedule input from this plugin,the following uses cron syntax
schedule => "* * * * *"
# our query
statement => "SELECT uid,email,first_name,last_name FROM contacts"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "contacts"
document_type => "record"
document_id => "%{uid}"
}
stdout { codec => rubydebug }
}
Сначала вы должны добавить вышеупомянутые параметры, которые я указал в плагине ввода в соответствии с вашей базой данных. Я использовал Postgresql в качестве базы данных. Соответственно, вам необходимо загрузить соответствующий jar библиотеки драйверов для этой базы данных и указать соответствующий путь.
Во-вторых, вы должны использовать опцию расписания в плагине "jdbc", чтобы он периодически считывал данные из базы данных.
В-третьих, вы должны удалить лишний "%" из части "document_id" в части плагина "output".
Вы должны обратиться к этой странице для импорта данных в logstash из базы данных: ->