2016-12-14 10 views
1

同期logstash JDBC入力

jdbc { 
    jdbc_driver_library => "../vendor/oracle/ojdbc7.jar" 
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver" 
    connection_retry_attempts => 10 
    connection_retry_attempts_wait_time => 5 
    jdbc_validate_connection => "true" 
    jdbc_connection_string => "connectionString/myDataBase" 
    jdbc_user => "USER_NAME" 
    jdbc_password => "PASSWORD" 
    schedule => "* * * * *" 
    statement_filepath => "myPath/queryA.sql" 
    tracking_column => "myTrackingcolumn" 
    last_run_metadata_path => "myPath/.logstash_jdbc_last_run" 
    type => "documentType" 
    add_field => { 
      "tag" => "myFirstTag" 
      } 
    } 

jdbc { 
    jdbc_driver_library => "../vendor/oracle/ojdbc7.jar" 
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver" 
    connection_retry_attempts => 10 
    connection_retry_attempts_wait_time => 5 
    jdbc_validate_connection => "true" 
    jdbc_connection_string => "connectionString/myDataBase" 
    jdbc_user => "USER_NAME" 
    jdbc_password => "PASSWORD" 
    schedule => "* * * * *" 
    statement_filepath => "myPath/queryB.sql" 
    tracking_column => "myTrackingcolumn" 
    last_run_metadata_path => "myPath/.logstash_jdbc_last_run" 
    type => "documentType" 
    add_field => { 
      "tag" => "mySecondTag" 
      } 
    } 

jdbc { 
    jdbc_driver_library => "../vendor/oracle/ojdbc7.jar" 
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver" 
    connection_retry_attempts => 10 
    connection_retry_attempts_wait_time => 5 
    jdbc_validate_connection => "true" 
    jdbc_connection_string => "connectionString/myDataBase" 
    jdbc_user => "USER_NAME" 
    jdbc_password => "PASSWORD" 
    schedule => "* * * * *" 
    statement_filepath => "myPath/queryC.sql" 
    tracking_column => "myTrackingcolumn" 
    last_run_metadata_path => "myPath/.logstash_jdbc_last_run" 
    type => "documentType" 
    add_field => { 
      "tag" => "myThirdTag" 
      } 
    } 

私は、これは次のようなエラー誘発照会していたデータベース用に定義されたSESSIONS_PER_USER limit存在するので:

[31mPipeline aborted due to error {:exception=>#<Sequel::DatabaseConnectionError: Java::JavaSql::SQLException: ORA-02391: 
exceeded simultaneous SESSIONS_PER_USER limit>, :backtrace=>["oracle.jdbc.driver.T4CTTIoer.processError(oracle/jdbc/driver/T4CTTIoer.java:450)", "oracle.jdbc.driver. 
T4CTTIoer.processError(oracle/jdbc/driver/T4CTTIoer.java:392)", "oracle.jdbc.driver.T4CTTIoer.processError(oracle/jdbc/driver/T4CTTIoer.java:385)", 
"oracle.jdbc.driver.T4CTTIfun.processError(oracle/jdbc/driver/T4CTTIfun.java:938)", "oracle.dbc.driver.T4CTTIoauthenticate.processError(oracle/jdbc/driver/T4CTTIoauthenticate.java:480)", 
"oracle.jdbc.driver.T4CTTIfun.receive(oracle/jdbc/driver/T4CTTIfun.java:655)", "oracle.jdbc.driver.T4CTTIfun.doRPC(oracle/jdbc/driver/T4CTTIfun.java:249)", 
"oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(oracle/jdbc/driver/T4CTTIoauthenticate.java:416)", "oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(oracle/jdbc/driver/T4CTTIoauthenticate.java:825)", 
"oracle.jdbc.driver.T4CConnection.logon(oracle/jdbc/driver/T4CConnection.java:596)", "oracle.jdbc.driver.PhysicalConnection.<init>(oracle/jdbc/driver/PhysicalConnection.java:715)", 
"oracle.jdbc.driver.T4CConnection.<init>(oracle/jdbc/driver/T4CConnection.java:385)", "oracle.jdbc.driver.T4CDriverExtension.getConnection(oracle/jdbc/driver/T4CDriverExtension.java:30)", 
"oracle.jdbc.driver.OracleDriver.connect(oracle/jdbc/driver/OracleDriver.java:564)", "RUBY.connect(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/adapters/jdbc.rb:222)", 
"RUBY.make_new(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool.rb:110)", "RUBY.make_new(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:226)", 
"RUBY.available(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:199)", "RUBY._acquire(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:135)", 
"RUBY.acquire(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:149)", "RUBY.sync(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:280)", 
"org.jruby.ext.thread.Mutex.synchronize(org/jruby/ext/thread/Mutex.java:149)", "RUBY.sync(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:280)", 
"RUBY.acquire(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:148)", "RUBY.acquire(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/extensions/connection_validator.rb:98)", 
"RUBY.hold(D:myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/connection_pool/threaded.rb:106)", "RUBY.synchronize(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/database/connecting.rb:256)", 
"RUBY.test_connection(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/sequel-4.36.0/lib/sequel/database/connecting.rb:266)", "RUBY.prepare_jdbc_connection(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-3.1.0/lib/logstash/plugin_mixins/jdbc.rb:173)", 
"RUBY.register(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-3.1.0/lib/logstash/inputs/jdbc.rb:187)", "RUBY.start_inputs(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.4-java/lib/logstash/pipeline.rb:330)", "org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)", 
"RUBY.start_inputs(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.4-java/lib/logstash/pipeline.rb:329)", "RUBY.start_workers(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.4-java/lib/logstash/pipeline.rb:180)", 
"RUBY.run(myPath/Env/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.4-java/lib/logstash/pipeline.rb:136)", 
"RUBY.start_pipeline(myPath/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.4-java/lib/logstash/agent.rb:473)"], :level=>:error}?[0mstopping pipeline {:id=>"main"} 

どのように設定するには、をこれらの入力により、logstashはSQLクエリを順番に実行し、許可されたセッション制限を超えないようにします。

答えて

1

入力を順番に実行する方法はないと思います。

ただし、SESSIONS_PER_USERの制限を回避するために、jdbc入力のscheduleオプションを使用するとクエリの頻度を減らすことができます。

そのままです:schedule => "* * * * *"、プラグインは毎分dbに接続します(here参照)。代わりにschedule => "*/15 * * * *"を使用することができます。これは15分ごとに接続します(参照)。

+0

これは回避策ですが、永続的な解決策ではないと思います。すべての入力が実行され、logstashインスタンスがクラッシュするのを避ける必要があります。 crontabエディタは素晴らしいです! – M3HD1

+1

@Mehdiええ、私はそれが単なる回避策であることを知っています。長期的な解決策は、入力ごとに1人のユーザーを使用するか、制限を増やすことです(しかし、それはあなたのケースでは不可能かもしれません)。もう一つの解決策(しかし、私はそれがうまくいくとは思えません):ワーカー数とバッチサイズを1に設定してください([here](https://www.elastic.co/guide/en/logstash/current/command 1つのイベントだけが一度に処理されます。これは入力をブロックします([documentation](https://www.elastic.co/guide/en/logstash/5.1/execution- – baudsp

+0

私はlogstashインスタンスを1つのパイプラインワーカーで起動しようとしましたが、これで問題は解決されません。この文書で述べたように、パイプライン作業者はフィルタと出力だけを実行しますが、入力は実行していないようです。 (このオプションは、並行してパイプラインのフィルタと出力ステージを実行する作業者の数を設定します) – M3HD1

関連する問題