2014-06-05 73 views
2

我想從不同的目錄讀取我的日誌文件,如:Server1, Server2 ...從輸入文件路徑logstash中提取字段?

Server1有子目錄cron, auth ...裏面這些子目錄是log file分別。

所以我打算讀的文件是這樣的:但是

input{ 
     file{    
            #path/to/folders/server1/cronLog/cron_log 

          path => "path/to/folders/**/*_log" 
      } 
    } 

,我有困難的過濾他們即知道,哪個服務器(Server1)和日誌類型(cron),我必須應用grok模式:

如:我認爲做這樣的事情

if [path] =~ "auth"{ 

grok{ 
      match => ["message", ***patteren****] 
     } 
    }else if [path] =~ "cron"{ 
     grok{ 
      match => ["message", ***pattern***] 
     } 

以上的用於日誌文件(不是cronLog目錄)。 但是這樣我也想過濾server name因爲每個服務器將有cron,auth等日誌。

如何過濾兩者?

有沒有辦法在輸入時從path中抓取目錄名?從這裏開始

path => "path/to/folders/**/*_log" 

我該如何繼續?任何幫助表示讚賞?

+0

查看http://stackoverflow.com/questions/23561684/extracting-fields-from-paths-in-logstash/23567477#23567477 – Alcanzar

+0

@Alcanzar:我看到了你的答案。你的'過濾器'將被應用在'input'的外部?目前我做的是:'filter {if [path] =〜'auth'{grok ...'所以我從路徑中選擇auth。同樣,我想選擇服務器和日誌類型,並應用條件,如:路徑具有'服務器名= XYZ &&日誌類型= YYY',然後日誌格羅克模式。我錯過了什麼嗎?你能解釋一些代碼嗎? –

+0

你可以做多個grok。所以你在路徑上使用grok來從中提取你關心的部分。 – Alcanzar

回答

5

它非常簡單,並且幾乎完全一樣在我其他的答案...您使用神交的道路上提取了件你關心,然後你可以做任何你想從那裏

filter { 
    grok { "path", "path/to/here/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logname>.*) } 
    if [server] == "blah" && [logtype] =~ "cron" { 
     grok { "message", "** pattern **" } 
    } 
}