0

jdbc 플러그인에 logstash 입력 내용의 MySQL 문이 있습니다.logstash에서 sql_last_value에 대한 테이블의 ID를 사용합니까?

statement => "SELECT * from TEST where id > :sql_last_value" 

내 테이블과 같은 어떤 date 또는 datetime 필드가 없습니다. 그래서 새로운 행이 테이블에 추가되었는지 여부를 확인하기 위해 scheduler을 사용하여 분 단위로 확인하여 인덱스를 업데이트하려고합니다.

기존 레코드에서 기존 값 변경 내용을 업데이트하지 않고 새 레코드를 업데이트 할 수 있어야합니다. 그래서 나는 얼마쯤 logstash 입력이 데이 작업을 수행합니다 :

input { 
    jdbc { 
     jdbc_connection_string => "jdbc:mysql://myhostmachine:3306/mydb" 
     jdbc_user => "root" 
     jdbc_password => "root" 
     jdbc_validate_connection => true 
     jdbc_driver_library => "/mypath/mysql-connector-java-5.1.39-bin.jar" 
     jdbc_driver_class => "com.mysql.jdbc.Driver" 
     jdbc_paging_enabled => "true" 
     jdbc_page_size => "50000" 
     schedule => "* * * * *" 
     statement => "SELECT * from mytable where id > :sql_last_value" 
     use_column_value => true 
     tracking_column => id 
     last_run_metadata_path => "/path/.logstash_jdbc_last_run" 
     clean_run => true 
    } 
} 

내가 인덱스를 생성하고 문서를 업로드하기 위해이 logstash 파일을 실행 할 때마다 그래서, 전혀 업로드되지 않습니다를. 문서 개수는 0으로 표시됩니다. logstash conf 파일을 실행하기 전에 .logstash_jdbc_last_run을 삭제했는지 확인했습니다. logstash 콘솔 출력

부품 :

[2016-11-02T16 : 33 : 00294] [INFO] logstash.inputs.jdbc] (0.002000s) SELECT COUNT (*) 발 count AS (TEST에서 *을 선택 여기서 ID> '2016년 11월 2일 11시 2분 0초')이 '1 케이 다음

이것이 올바른 분하여 예약을 선택하여가는 유지하지만 LIMIT t1 AS 기록을 가져 오지 마라. 어떻게 작동합니까?

내가 누락 된 항목이 있습니까? 어떤 도움을 주셔서 감사합니다.

+1

'jdbc' 입력 설정에'clean_run => true'를 추가하려고 시도 했습니까? ID 필드와 비교할 때 사용한 값이 날짜가 '2016-11-02 11 : 02 : 00' 인 것은 정상이 아닙니다. – Val

+0

@Val 또한 시도해 보았지만 여전히 결과는 같습니다. – Kulasangar

+0

'clean_run'은'.logstash_jdbc_last_run' 파일을 삭제합니다. 어쩌면'tracking_column_type => 'numeric'을 기본값으로 지정하려고 시도 할 수도 있습니다. – Val

답변

3

는이처럼 logstash 구성을 수정해야합니다

jdbc { 
    jdbc_connection_string => "jdbc:mysql://myhostmachine:3306/mydb" 
    jdbc_user => "root" 
    jdbc_password => "root" 
    jdbc_validate_connection => true 
    jdbc_driver_library => "/mypath/mysql-connector-java-5.1.39-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_paging_enabled => "true" 
    jdbc_page_size => "50000" 
    schedule => "* * * * *" 
    statement => "SELECT * from TEST where id > :sql_last_value" 
    use_column_value => true 
    tracking_column => "id" 
    tracking_column_type => "numeric" 
    clean_run => true 
    last_run_metadata_path => "/mypath/.logstash_jdbc_last_run" 
} 

마지막 다섯 가지 설정은 경우에 중요하다. clean_run => true에서도 파일 .logstash_jdbc_last_run을 삭제해야합니다.