Используете идентификатор таблицы для sql_last_value в logstash?

У меня есть инструкция MySQL как таковая в моем jdbc плагине на logstash input.

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 файл, чтобы загрузить документы, он вообще не загружается. Количество документов равно нулю. Я убедился, что удалил .logstash_jdbc_last_run, прежде чем запустить logstash файл conf.

Часть вывода консоли logstash:

[2016-11-02T16: 33: 00,294] [ИНФОРМАЦИЯ] [logstash.inputs.jdbc] (0,002000 с) SELECT count (*) AS count FROM (SELECT * from TEST, где id> '2016-11-02 11:02 : 00 ') КАК t1 ПРЕДЕЛ 1

и это продолжается, ежеминутно проверяя, что является правильным, но тогда он не получает записи. Как это работает?

Я что-то упускаю? Любая помощь может быть оценена по достоинству.


person Kulasangar    schedule 02.11.2016    source источник
comment
Вы пробовали добавить clean_run => true в свою jdbc конфигурацию ввода? Это ненормально, что значение, используемое для сравнения с полем идентификатора, представляет собой дату 2016-11-02 11:02:00   -  person Val    schedule 02.11.2016
comment
@Val Я тоже пробовал, но результат тот же.   -  person Kulasangar    schedule 02.11.2016
comment
clean_run удаляет файл .logstash_jdbc_last_run. Возможно, попробуйте также указать tracking_column_type => "numeric", хотя это значение по умолчанию.   -  person Val    schedule 02.11.2016
comment
Возможно, также обновите свой вопрос с помощью последней конфигурации ...   -  person Val    schedule 02.11.2016
comment
@Val, что я должен указать здесь tracking_column_type => ? Что вы подразумеваете под числовым? Вы хотите, чтобы я вставил что-то вроде 0 или 1 или просто само число? И я обновил вопрос с последней конф.   -  person Kulasangar    schedule 02.11.2016
comment
То же, что я описал выше: tracking_column_type => "numeric" Это недокументированная настройка   -  person Val    schedule 02.11.2016
comment
@Val, ладно, обязательно проверим и вернусь! Спасибо   -  person Kulasangar    schedule 02.11.2016
comment
Позвольте нам продолжить это обсуждение в чате.   -  person Kulasangar    schedule 02.11.2016


Ответы (1)


Вам нужно изменить конфигурацию 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" 
}

Последние пять настроек важны в вашем случае. Также не забудьте удалить .logstash_jdbc_last_run файл, даже если это делает clean_run => true.

person Val    schedule 02.11.2016