FileBeat JSONログの収集

5647 ワード

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.この2つの構成が完了した後、ログは次の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の2つのログを自動的にマージし、esには対応するindexに1つのデータしか表示されず、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のログは2つになります.
そのうち第1条のmessage:[01-2019] 第二条のmessage:[03-2019] このようにして、複数行のログのマージと分離を実現することができます(ちなみに、複数行のマージを必要としない場合はmultilineに注釈を付けることを忘れないでください.そうしないと、jsonのログがesの中ですべて1つに統合されていることに気づきます......).