Filebeat定义index
一、Filebeat自定义index
如下:
配置文件
filebeat.inputs: - type: log enabled: true paths: - /data/logs/pb-dubbo-user/err_*.log fields: source: dubbo-user multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after - type: log enabled: true paths: - /data/logs/pb-server-admin/err_*.log fields: source: server-admin multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after - type: log enabled: true paths: - /data/logs/pb-dubbo-product/err_*.log fields: source: dubbo-product multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: false multiline.match: after - type: log enabled: true paths: - /data/logs/pb-server-api/err_*.log fields: source: server-api multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by|^java\.net|^org\.spring|^org\.apache:' multiline.negate: true multiline.match: after filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 # 定义模板的相关信息 setup.template.name: "pb_log" setup.template.pattern: "pb-*" setup.template.overwrite: true setup.template.enabled: true #7版本自定义ES的索引需要把ilm设置为false setup.ilm.enabled: false setup.kibana: hosts: "192.168.100.163:5601" output.elasticsearch: hosts: ["192.168.100.163:9200"] index: "pb-%{[fields.source]}-*" indices: - index: "pb-dubbo-user-%{+yyyy.MM.dd}" when.equals: fields.source: "dubbo-user" - index: "pb-server-admin-%{+yyyy.MM.dd}" when.equals: fields.source: "server-admin" - index: "pb-server-api-%{+yyyy.MM.dd}" when.equals: fields.source: "server-api" - index: "pb-dubbo-product-%{+yyyy.MM.dd}" when.equals: fields.source: "dubbo-product" processors: - add_host_metadata: ~ - add_cloud_metadata: ~
如果不想以日期来划分,可以将{+yyyy.MM.dd}日期格式去掉
二、Filebeat合并多行日志
将JAVA堆栈跟踪日志组合成一个message
示例:
Exception in thread "main" java.lang.IllegalStateException: A book has a null property at com.example.myproject.Author.getBookIds(Author.java:38) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) Caused by: java.lang.NullPointerException at com.example.myproject.Book.getId(Book.java:22) at com.example.myproject.Author.getBookIds(Author.java:35) ... 1 more
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' multiline.negate: false multiline.match: after
C风格的日志
一些编程语言在一行末尾使用反斜杠()字符,表示该行仍在继续,如本例中所示:
printf ("%10.10ld \t %10.10ld \t %s\ %f", w, x, y, z );
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置
multiline.pattern: '\\$' multiline.negate: false multiline.match: before
此配置将以"\"字符结尾的任何行与后面的行合并。
时间戳
来自Elasticsearch等服务的活动日志通常以时间戳开始,然后是关于特定活动的信息,如下例所示:
[2015-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after
Multiline
-
multiline.pattern: 正则表达式,以空格开头,值为^[[:space:]]
-
multiline.negate: 是否匹配正则表达式内容,取值为 true|false
-
multiline.match: 取值为after|before
pattern=^b,意思是以b开头。negate有false和true两种取值,match也有after和before两种取值。下面详述: negate参数为false,表示“否定参数=false”。multiline多行参数负负得正,表示符合pattern、match条件的行会融入多行之中、成为一条完整日志的中间部分。如果match=after,则以b开头的和前面一行将合并成一条完整日志;如果match=before,则以b开头的和后面一行将合并成一条完整日志。 negate参数为true,表示“否定参数=true”。multiline多行参数为负,表示符合match条件的行是多行的开头,是一条完整日志的开始或结尾。如果match=after,则以b开头的行是一条完整日志的开始,它和后面多个不以b开头的行组成一条完整日志;如果match=before,则以b开头的行是一条完整日志的结束,和前面多个不以b开头的合并成一条完整日志。