天天看點

FileBeat采集JSON日志FileBeat采集JSON日志

FileBeat采集JSON日志

前言

使用FileBeat采集JSON日志傳輸到logstash或者elasticsearch中,其中FileBeat的版本為5.5.0,Elasticsearch的版本為5.6.8

檔案配置

簡單配置

關于配置filebeat的json采集,主要需要注意的有以下幾個配置項

#keys_under_root可以讓字段位于根節點,預設為false
json.keys_under_root: true
#對于同名的key,覆寫原有key值
json.overwrite_keys: true
#message_key是用來合并多行json日志使用的,如果配置該項還需要配置multiline的設定,後面會講
json.message_key: message
#将解析錯誤的消息記錄儲存在error.message字段中
json.add_error_key: true
           

參考的官方文檔

https://www.elastic.co/guide/en/beats/filebeat/6.2/configuration-filebeat-options.html

上面的幾個配置項,隻要配置了任意一項,filebeat就會開啟json采集的功能。配置完成後filebeat會和采集正常的日志一樣,對path中配置的json檔案路徑進行采集,然後會将json封包中的字段存儲到es中。

要注意的是,這種配置下關于multiline的配置,如果配置了multiline,會開啟合并多條json日志的功能,如果不需要該功能請務必注釋掉該yml中關于multiline的配置。

多行合并配置

在上面的配置中有提到關于multiline的配置,如果配置了multiline,那麼必須配置message_key。在這兩者配置完成後,假設日志如下json體:

{"id":"01","message":"我是第一條資訊","logDate":"2019-1-16 17:39:31"}
{"id":"02","message":"我是第二條資訊","logDate":"2019-1-16 17:40:20"}
           

filebeat會自動合并id為01和id為02的兩條日志,在es中會看到對應的index中隻有一條資料,其中message為

"我是第一條資訊我是第二條資訊"

。是以為了換行需要給原本json日志中的message加上辨別符,用于辨別是否需要合并為一條日志。範例如下

{"id":"01","message":"[01-2019]我是第一條資訊","logDate":"2019-1-16 17:39:31"}
{"id":"02","message":"我是第二條資訊","logDate":"2019-1-16 17:40:20"}
{"id":"03","message":"[03-2019]我是第三條資訊","logDate":"2019-1-16 17:41:34"}
           

然後對multiline相關的配置如下:

#将'['作為新的一行的辨別,如果message中不碰到'[',則合并為一條日志
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
           

同時配置

processors:
  - decode_json_fields:
      fields: ['message']
      target: json
           

配置完成後再次啟動filebeat,則對應的es中的日志為兩條

其中第一條的message:

[01-2019]我是第一條資訊我是第二條資訊

第二條的message:

[03-2019]我是第三條資訊

通過這種方式可以實作多行日志的合并與分離(順帶一提如果不需要多行合并的話務必記得注釋掉multiline,不然你會發現你的json的日志在es中全部合并成了一條……)。

繼續閱讀