2015-02-10 83 views
3

我一直在嘗試將日誌從logstash發送到elasticsearch.Suppose我正在運行logstash實例,並在運行時對logstash實例所在的文件進行了更改監控,那麼先前保存在elasticsearch中的所有日誌都會再次保存,因此會形成重複。在logstash實例運行時將條目複製到Elastic Search

另外,當logstash實例關閉並重新啓動時,日誌會在elasticsearch中重複。

如何解決此問題? 如何僅將文件中最新添加的條目從logstash發送到elasticsearch? 我logstash instance命令如下: 斌/ logstash -f logstash-complex.conf

和配置文件是這樣的:

input 
{ 
    file 
{ 

    path => "/home/amith/Desktop/logstash-1.4.2/accesslog1" 

    } 
} 

filter 
{ 
    if [path] =~ "access" 
{ 
    mutate 
{ 
replace => 
{ "type" => "apache_access" } } 
    grok { 
     match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
    } 
    date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    } 
} 

output { 
    elasticsearch { 
    host => localhost 
    index => feb9 
    } 
    stdout { codec => rubydebug } 
} 

回答

0

正如你在你的問題中提到。

當logstash實例關閉並再次重新啓動時,日誌在elasticsearch中被複制。

因此,它可能已經刪除了.since_db。請看here。 嘗試具體的since_dbstart_position。例如:

input 
{ 
    file 
    { 
     path => "/home/amith/Desktop/logstash-1.4.2/accesslog1" 
     start_position => "end" 
     sincedb_path => /home/amith/Desktop/sincedb 
    } 
} 
+0

如果我創建的文件是一個新文件,start_position必須指向文件的開頭,該怎麼辦? – 2015-02-10 11:33:33

+0

進行上述更改後仍然重複。 – 2015-02-10 11:44:10

+0

你使用什麼操作系統?如果您在窗口上運行,則存在logstash上的錯誤。 https://logstash.jira.com/browse/LOGSTASH-429 – 2015-02-12 00:40:42

4

我得到了解決方案。 我正在打開文件,添加一條記錄並保存它,因爲每次保存文件時,logstash都會將同一個文件作爲不同的文件處理,因爲它爲同一個文件記錄了不同的inode編號。

解決方法是在不打開文件的情況下向文件追加一行,但通過運行以下命令。

回聲>>文件名「要添加到文件中的字符串」

1

[ELK堆棧] 我想一些定製CONFIGS在

/etc/logstash/conf.d/vagrant.conf 

所以第一步是使備份:/etc/logstash/conf.d/vagrant.conf.bk 這導致logstash在elasticseach中添加兩個條目,每個條目在<file>.log; 相同,如果我有3個文件在/etc/logstash/conf.d/*.conf.*在ES我有8條目在*.log

相關問題