Logstash 5.2.1爲什麼Logstash將錯誤的時區放在〜/ .logstash_jdbc_last_run中?下面
的結構是OK,則局部更新沃金。我只是誤解了結果以及Logstash如何使用時區。
jdbc_default_timezone 時區轉換。 SQL不允許timestamp字段中的時區數據。此插件會自動將您的SQL時間戳字段轉換爲Logstash時間戳,相對UTC時間採用ISO8601格式。 使用此設置將手動分配指定的時區偏移量,而不是使用本地機器的時區設置。例如,您必須使用規範時區,歐洲/羅馬。
我想指數從一個PostgreSQL的一些數據與Logstash幫助Elasticseach。部分更新應該工作。
但在我的情況下,Logstash將錯誤的時區放在~/.logstash_jdbc_last_run
。
$cat ~/.logstash_jdbc_last_run
--- 2017-03-08 09:29:00.259000000 Z
我的電腦/服務器時間:
$date
mer 8 mar 2017, 10.29.31, CET
$cat /etc/timezone
Europe/Rome
我Logstash配置:
input {
jdbc {
# Postgres jdbc connection string to our database, mydb
jdbc_connection_string => "jdbc:postgresql://localhost:5432/postgres"
# The user we wish to execute our statement as
jdbc_user => "logstash"
jdbc_password => "logstashpass"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/home/trex/Development/ship_to_elasticsearch/software/postgresql-42.0.0.jar"
# The name of the driver class for Postgresql
jdbc_driver_class => "org.postgresql.Driver"
jdbc_default_timezone => "Europe/Rome"
# our query
statement => "SELECT * FROM contacts WHERE timestamp > :sql_last_value"
# every 1 min
schedule => "*/1 * * * *"
}
}
output {
stdout { codec => json_lines }
elasticsearch {
hosts => [ "localhost:9200" ]
index => "database.%{+yyyy.MM.dd.HH}"
}
}
沒有jdbc_default_timezone
的時區是錯了。
我PostgeSQL數據:
postgres=# select * from "contacts"; uid | timestamp | email | first_name | last_name
-----+----------------------------+-------------------------+------------+------------
1 | 2017-03-07 18:09:25.358684 | [email protected] | Jim | Smith
2 | 2017-03-07 18:09:25.3756 | | John | Smith
3 | 2017-03-07 18:09:25.384053 | [email protected] | Carol | Smith
4 | 2017-03-07 18:09:25.869833 | [email protected] | Sam |
5 | 2017-03-08 10:04:26.39423 | [email protected] | T | Rex
數據庫導入數據是這樣的:
INSERT INTO contacts(timestamp, email, first_name, last_name) VALUES(current_timestamp, '[email protected]', 'Sam', null);
爲什麼Logstash把錯誤的時區~/.logstash_jdbc_last_run
?以及如何解決它?
好的,那麼爲什麼我會連續導入第5個DB記錄?看看更新問題。 – trex
對不起,我以前的評論是誤導。我在Logstash中配置了'jdbc_default_timezone =>「Europe/Rome」''。所以,我必須有羅馬時區,不是嗎? – trex
'時區轉換。 SQL不允許timestamp字段中的時區數據。此插件會自動將您的SQL時間戳字段轉換爲Logstash時間戳,相對UTC時間採用ISO8601格式。' 所以導入後的時區總是'UTC',這個設置只用於轉換 –