2016-08-04 4 views
0

私の設定で2つのjdbcセクションを作成しましたが、常に最初のactionAとactionBを実行したいので、それは私のために重要です。これどうやってするの?ここでLogstashの順次スレッド実行フロー

は私の設定です:事前に

input { 
    jdbc { 
     type => "actionA" 
     jdbc_validate_connection => true 
     jdbc_connection_string => "jdbc:oracle:thin:@mycomp:1522/db1" 
     ... 
     statement => "SELECT ID FROM my_table WHERE delete='Y'" 
     } 

    jdbc { 
     type => "actionB" 
     jdbc_validate_connection => true 
     jdbc_connection_string => "jdbc:oracle:thin:@mycomp:1522/db1" 
     ... 
     statement => "UPDATE my_table SET delete='T' WHERE delete='Y'" 
     } 
} 
output { 
    stdout { codec => rubydebug } 
    if [type] == "actionA" { 
     elasticsearch { 
      action => "delete" 
      index => "contacts" 
      document_type => "contact" 
      document_id => "%{id}" 
      hosts => ["http://localhost:9200"] 
     } 
    } 
    if [type] == "actionB" { } 


} 

おかげ

ジェイ

答えて

0

あなたはscheduleパラメータを活用し、actionAは常に例えば、actionB前に実行することができますactionAラン毎にさえ分(0、2、4、6、...)とactionBラン毎の奇数分することにより(1、3、5、...)それのためのトリックあり

input { 
    jdbc { 
     type => "actionA" 
     jdbc_validate_connection => true 
     jdbc_connection_string => "jdbc:oracle:thin:@mycomp:1522/db1" 
     ... 
     schedule => "*/2 * * * *" # run every even minutes 
     statement => "SELECT ID FROM my_table WHERE delete='Y'" 
     } 

    jdbc { 
     type => "actionB" 
     jdbc_validate_connection => true 
     jdbc_connection_string => "jdbc:oracle:thin:@mycomp:1522/db1" 
     ... 
     schedule => "1-59/2 * * * *" # run every odd minutes 
     statement => "UPDATE my_table SET delete='T' WHERE delete='Y'" 
     } 
} 
+0

それは良い変種で、私はそれについて考えました。しかし何らかの理由でSELECTに時間がかかりますか?このソリューションはどれくらい安全ですか? actionAの実行を待つことは可能でしょうか? – Frank

+0

両方のアクション間でいつでもデルタを増やすことができます。あなたはどれくらいの頻度で実行する必要がありますか? – Val

+0

私は毎時間それを実行する必要があります。しかし、私はactionBの後に常にactionAが行われるという保証はないので、エンタープライズソリューションではないと思います。実際、ほとんどの場合、actionAは非常に高速に動作します。アクションBのための10分。最高の解決策は、actionAの終了を待ってからactionBを開始し、CRONEの助けを借りてこのスクリプトを開始するスクリプトを書くことだと思います。 – Frank

0

ので、各ファイルは、次のようになり、別々のファイルにあなたの行動を置き:

# action_X.conf 
input { 
    jdbc { 
     # ... 
    } 
} 
output { 
    # ... 
} 

次に、ファイルごとに手動でlogstashを実行します。

logstash -f action_a.conf 
logstash -f action_b.conf 

を定期的に繰り返すには、あなたが上記のコマンドを入れることができますシェルスクリプトでこのスクリプトをcrontabに追加します。

関連する問題