sql_last_value сбрасывается всякий раз, когда logsta sh перезапускается - PullRequest
0 голосов
/ 23 января 2020

Всякий раз, когда я перезагружаю logsta sh, он начинает получать записи базы данных с нуля, вот мой .conf файл, который я выполняю

input {
    jdbc {
        # Postgres jdbc connection string to our database, mydb
        jdbc_connection_string => "jdbc:postgresql://**************:5432/******"
        # The user we wish to execute our statement as
        jdbc_user => "*******"
        jdbc_password => "******"
        # The path to our downloaded jdbc driver
        jdbc_driver_library => "/usr/share/logstash/lib/postgresql-42.2.9.jar"
        # The name of the driver class for Postgresql
        jdbc_driver_class => "org.postgresql.Driver"
        jdbc_paging_enabled => true
        # the column which should be stored to .logstash_jdbc_last_run
        tracking_column => "unix_ts_in_secs"
        use_column_value => true
        tracking_column_type => "numeric"
        schedule => "*/5 * * * * *"
        jdbc_page_size => 500
        # sql_last_value is stored in this file so each pipeline should have different
        # file name so it doesn't get mixed
        last_run_metadata_path => "/etc/logstash/conf.d/lastrun/.logstash_jdbc_last_run_alerts"
        # our query
        statement_filepath => "/etc/logstash/db-queries/alerts-query.sql"
    }
}

filter {
  mutate {
    remove_field => ["unix_ts_in_secs"]
  }
}

output {
    elasticsearch {
        index => "typec"
        document_id => "%{id}"
        hosts => ["************"]
        user => "******"
        password => "******"
    }
}

Файл: alerts-query. sql

SELECT *
FROM alerts as a
WHERE (
    extract(epoch FROM a."updated_at") > :sql_last_value
    AND a."updated_at" < NOW()
)
ORDER BY a."updated_at" ASC

Есть ли способ сохранить :sql_last_value, и даже если перезапустить logsta sh, он начинается с ранее сохраненного :sql_last_value, а не с 0?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Проблема в настройке use_column_value .

Описание из документов:

При значении true использует определенное значение tracking_column в качестве: sql_last_value. Если установлено значение false, то: sql_last_value отражает время последнего выполнения запроса.

Это означает, что: sql_last_value ссылается не на значение в last_run_metadata_path, а на значение tracking_column-value. При перезапуске Logsta sh это значение пропадает / неизвестно до первого выполнения. Следовательно, значение по умолчанию равно 0, и Logsta sh извлекает все записи.

Поэтому, если вы хотите, чтобы: sql_last_value перезапустился, вам следует полагаться только на last_run_metadata_path и удалить параметр use_column_value.

0 голосов
/ 29 января 2020

Другое направление, которое может оказаться полезным для вас - Logsta sh должен создать файл в <home_folder>/.logstash_jdbc_last_run, чтобы сохранить это значение между запусками. Это было создано? Если это так, анализ может помочь.

...