2015-11-07 93 views
0

我有兩個名爲access_loghttp_access_2015-03-06_log的文件,我想將accesshttp_access_2015-03-06部分文件設置爲索引。如何在logstash conf中建立索引時添加文件名

我讀了類似問題的一些答案,但我無法得到如何使用grok篩選器篩選文件路徑,並將其用作索引的參考。

下面是我的配置文件:

input { 
    file { 
    path => ["G:/logstash-1.5.0/bin/tmp/*_log"] 
    start_position => "beginning" 

    } 
} 

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

output { 
    elasticsearch { 
    action => "index" 
    host => localhost 
    index => "test" 
    } 
    stdout { codec => rubydebug } 
} 

如何可以做到?

+0

可能重複的[Logstash:如何添加文件名作爲字段?](http://stackoverflow.com/questions/22916200/logstash-how-to-add-file-name-as-a-field) –

回答

0

您正在設置'type'字段。如果這是夠好,你可以參考它在你的輸出{}節:

index => "%{type}-%{+YYYY.MM.dd}" 

如果你想利用你的過濾器,你是不是也想存儲在elasticsearch一些信息,你可以把它放在元數據字段,例如:

[@metadata][myField] 

然後以相同的方式引用它。

+0

我不喜歡引用類型字段。我需要提取文件名並設置索引。我該如何在索引中使用文件名? –

+0

你在文檔中是否有'文件'或'路徑'字段?如果你只需要它的一部分,你可以運行grok {}來創建你想要使用的值。 –