Quantcast
Channel: IT瘾博客推荐
Viewing all articles
Browse latest Browse all 532

FileBeat采集JSON日志_大数据_Mr.Bean-CSDN博客

$
0
0

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:truemultiline.match:after

同时配置

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

配置完成后再次启动filebeat,则对应的es中的日志为两条

其中第一条的message: [01-2019]我是第一条信息我是第二条信息

第二条的message: [03-2019]我是第三条信息

通过这种方式可以实现多行日志的合并与分离(顺带一提如果不需要多行合并的话务必记得注释掉multiline,不然你会发现你的json的日志在es中全部合并成了一条……)。


Viewing all articles
Browse latest Browse all 532

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>