Я использую Logstash 2.4.1 для загрузки данных в Elasticsearch 2.4.6.
У меня есть следующая конфигурация Logstash:
input {
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@database:1521:db1"
jdbc_user => "user"
jdbc_password => "password"
jdbc_driver_library => "ojdbc6-11.2.0.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
parameters => { "id" => 1 }
statement => "SELECT modify_date, userName from user where id = :id AND modify_date >= :sql_last_value"
schedule => "*/1 * * * *"
tracking_column => modify_date
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "index1"
document_type => "USER"
}
stdout { codec => rubydebug }
}
Итак, за каждую минуту он идет в базу данных, чтобы проверить, есть ли новые данные для Elastic.
Работает отлично, но есть одна проблема:
У нас около 100 клиентов, и все они находятся в одном экземпляре базы данных.
Это означает, что у меня есть 100 сценариев и 100 экземпляров Logstash, что означает 100 открытых подключений:
nohup ./logstash -f client-1.conf Logstash startup
nohup ./logstash -f client-2.conf Logstash startup
nohup ./logstash -f client-3.conf Logstash startup
nohup ./logstash -f client-4.conf Logstash startup
nohup ./logstash -f client-5.conf Logstash startup
and so on...
Это просто плохо.
Можно ли как-то использовать одно и то же соединение для всех моих скриптов?
Единственная разница между всеми этими сценариями - это идентификатор параметра и имя индекса, у каждого клиента будет свой идентификатор и свой индекс:
parameters => { "id" => 1 }
index => "index1"
Есть идеи?