2015-11-06 89 views
3

我在我的Windows 7機器上本地安裝了Logstash和Elasticsearch。 我在Logstash中安裝logstash-input-jdbcLogstash沒有讀入MySQL的新條目

我有MySql數據庫中的數據,我使用Logstash發送給Elasticsearch,因此我可以做一些報告生成。

執行此操作的Logstash配置文件。

input { 
jdbc { 
    jdbc_driver_library => "C:/logstash/lib/mysql-connector-java-5.1.37-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test" 
    jdbc_user => "root" 
    jdbc_password => "" 
    statement => "SELECT * FROM transport.audit" 
    jdbc_paging_enabled => "true" 
    jdbc_page_size => "50000" 
} 
} 

output { 
    elasticsearch { 
    hosts => ["localhost:9200"] 
    index => "transport-audit-%{+YYYY.mm.dd}" 
} 
} 

這個工程和Logstash當我運行數據發送到Elasticsearch:

bin\logstash agent -f \logstash\conf\01_input.conf 

這是從命令

io/console not supported; tty will not be manipulated 
Default settings used: Filter workers: 4 
Logstash startup completed 
Logstash shutdown completed 

的反應怎麼,Logstash關機?

當我檢查Elasticsearch數據時,如果再次運行該命令,數據將被重新索引(重複)。

enter image description here

下面是MySQL數據庫的數據:

enter image description here

我所試圖做的(實現):

我想Logstash運行,並聽取關於審覈新項目表並且只索引該數據(當新的審計條目輸入到表Logstash中時將知道並將該條目發送給Elasticsearch。)

另外,爲什麼Logstash在我運行該命令時會停止,是否應該不運行?我是Logstash和Elasticsearch的新手。

感謝

我也貼了同樣的問題在Elastic forum,如果我得到的答案,我會張貼在這裏幫助別人。

回答

3

默認情況下,logstash-input-jdbc插件將運行一次SELECT語句,然後退出。您可以通過添加一個cron表達式一個schedule parameter到您的配置,這樣的改變這種行爲:

input { 
jdbc { 
    jdbc_driver_library => "C:/logstash/lib/mysql-connector-java-5.1.37-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test" 
    jdbc_user => "root" 
    jdbc_password => "" 
    statement => "SELECT * FROM transport.audit" 
    schedule => "* * * * *"    <----- add this line 
    jdbc_paging_enabled => "true" 
    jdbc_page_size => "50000" 
} 
} 

結果是SELECT語句現在每分鐘運行一次。

如果您的MySQL表中有一個日期字段(但似乎並非如此),您也可以使用預定義的sql_last_start參數,以便在每次運行時不重新索引所有記錄。該參數可以在您的查詢中使用,如下所示:

statement => "SELECT * FROM transport.audit WHERE your_date_field >= :sql_last_start" 
+0

感謝@val爲您提供的幫助和編輯,我將在今天嘗試,並將問題標記爲已回答。是的,我同意日期字段,並會按照建議添加。 – Gman

+0

該計劃工作良好感謝與select語句,我重新創建表,添加了時間戳字段。當我添加WHERE子句時,什麼都不打印出來或發送到elasticsearch? 'code statement =>「SELECT * FROM transport。審計WHERE時間戳> =:sql_last_start「' – Gman

+0

你爲新的時間戳字段設置了什麼值? – Val