2016-08-15 112 views
1

由於類似的問題已經重複,我仔細看過以前的答案,不幸的是它還沒有解決我的問題。通過logstash進行日誌分析,沒有產生字段

通過下面提到的logstash的過濾配置,我期望在解析日誌之後生成字段線程,日誌級別和消息。

我試過這個過濾器https://grokdebug.herokuapp.com/和輸出生成過濾器中提到的字段。

但是除了消息之外,在輸出JSON/Kibana上沒有顯示的字段。解析時沒有錯誤。

如果有人能指出這裏的錯誤,會有所幫助。謝謝!

過濾配置

filter { 
    if [type] == "reporting" { 
    grok { 
     match => { "message" => "\[(?<timestamp>%{TIMESTAMP_ISO8601})\] - %{NOTSPACE:thread} - %{LOGLEVEL:loglevel} (?<logger>[A-Za-z0-9$_.]+) - %{GREEDYDATA:message}$"} 
    } 
    } 
} 

日誌示例

[2016-08-15 09:44:36,858] - RServer - INFO transformation - [01] starting the process for day 2016-06-06 

生成JSON

{ 
    "_index": "filebeat-2016.08.15", 
    "_type": "log", 
    "_id": "xxx", 
    "_score": null, 
    "_source": { 
    "message": "[2016-08-15 09:44:36,858] - RServer - INFO transformation - [01] starting the process for day 2016-06-06", 
    "@version": "1", 
    "@timestamp": "2016-08-15T09:44:37.700Z", 
    "source": "/xxx/yyy/main.log", 
    "count": 1, 
    "fields": { 
     "application": "reporting", 
     "category": "main" 
    }, 
    "beat": { 
     "hostname": "xxx", 
     "name": "xxx" 
    }, 
    "offset": 5033597, 
    "type": "log", 
    "input_type": "log", 
    "host": "xxx", 
    "tags": [ 
     "beats_input_codec_plain_applied" 
    ] 
    }, 
    "fields": { 
    "@timestamp": [ 
     1471254277700 
    ] 
    }, 
    "sort": [ 
    1471254277700 
    ] 
} 
+1

它看起來不像你設置的類型變量,因此你的過濾器永遠不會被調用。刪除if,然後再試一次。 – pandaadb

+0

@pandaadb所以你的評論觸發了一個想法來檢查FileBeat的配置(因爲Logstash中的if條件是有意的)。我發現其中一個字段'output_type'缺失。我添加了它,現在這些字段正在出現。謝謝你的幫助! – Srikanta

+0

沒問題:)或者,你可以在你的輸入中做類似type =>「reporting」的事情,這也可以設置 – pandaadb

回答

0

得益於來自@pandaadb的評論,我想到檢查FileBeat的配置,並意識到一個字段「output_type」丟失。這意味着進入的日誌沒有被過濾,因爲過濾器期待某種類型。

使用「output_type」,會添加一個關鍵字並由篩選器根據上述GROK表達式來解析日誌。由於FileBeat的相同實例正在轉發不同類別的日誌,因此它將在轉發器本身進行標記,而不是在Logstash的輸入配置中進行標記。