filebeat配置讲解

1,020 阅读3分钟

filebeat配置文件讲解:

1、安装:

  • yum方式:
[elk]
name=elasticsearch
enabled=1
failovermethod=priority
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/
gpgcheck=0

若报错curl#60 - "Peer's Certificate has expired.",认证过期,处理方式:设置时区及时间

# 设置时区:
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或:
timedatectl set-timezone Asia/Shanghai

# 设置时间:
date -s "2021-04-24 23:56:40"		#修改为当前时间
或:
systemctl restart chronyd			#等待几秒即可

官方文档:

www.elastic.co/guide/en/be…

2、定义从何处开始收集日志

filebeat.inputs:
- type: log
  paths:
    - /var/log/messages
    - /var/log/*.log

日志路径的定义以"-"开头

日志路径除了以上示例中的格式,也可写为:/var/log/*/*.log,表示从/var/log/所有子目录下获取所有.log文件。但是这种格式不会从/var/log目录下获取日志。可以使用recursive_glob这个选项来开启从/var/log目录下获取日志。

3、递归获取日志

filebeat.inputs:
- type: log
  paths:
    - /var/log/**/*.log
  recursive_glob.enabled: true

recursive_glob.enabled:默认值true

在paths中使用**会对/var/log目录递归八层获取其下的日志,如:

/var/log/*.log
/var/log/a/*.log
/var/log/a/b/*.log
/var/log/a/b/c/*.log
....

4、给不同的日志添加对应标签:

filebeat.inputs:
- type: log 
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log 
  paths:
    - "/var/log/apache2/*"
  fields:
    apache: true
  fields_under_root: true

本示例给从/var/log/apache2/目录下获取的日志添加标签apache,默认情况下,apache标签位于输出文档中的fields分组下,若要使自定义字段存储为顶级字段,可使用feilds_under_root选项

5、filebeat处理多行信息

官方文档:www.elastic.co/guide/en/be…

filebeat切割日志文件时,日志文件的消息可能跨越多行。例如,java堆栈信息通常是多行。为了正确处理这些信息,你可以在filebeat.yml中配置多行设置,以指定单一事件包含哪些行。

为何用filebeat处理多行信息,而不用logstash?

  1. 官方提醒:使用Logstash中处理多行事件(例如,通过使用Logstash多行编码)可能会导致流混合和数据损坏。
  2. 减轻logstash负荷

你可以在filebeat.yaml的 filebeat.inputs配置段指定以下选项,以控制Filebeat如何处理多行信息

下面的例子演示了如何配置filebeat,以处理首行以"["开头的行。

multiline.pattern: '^\['
multiline.negate: true
multiline.match: after

Filebeat获取不以"["开头的行,并将它们与前面以[开头的行合并。例如:你可以使用这段配置把下面的多行信息处理为单个事件。

[beat-logstash-some-name-832-2015.11.28] IndexNotFoundException[no such index]
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77)
    at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)

multiline.pattern

指定要匹配的模式。注意,filebeat支持的正则与logstash支持的正则有所不同。要查看支持的正则,参考正则表达式的支持列表。根据你配置的多行选项,被正则匹配的行可以被视为前一行的延续或多行事件的开始。您可以设置negate选项来否定模式。

multiline.negate

定义是否否定模式。默认为false

multiline.match

指定Filebeat如何将匹配的行组合到事件中。可设置选项有before及after。这些设置的行为取决于您为negate指定的内容

negate设置match设置结果
falseafter匹配到的行附加到前面不匹配的行的后面
falsebefore匹配到的行放到不匹配的行的前面
trueafter不匹配的行追加到前面匹配成功的行后面
truebefore不匹配的行放到前面匹配成功的行的前面

6、排除不收集的行:

使用正则表达式来匹配不想收集的行。当行被exclude_lines的正则表达式匹配到时,filebeat就不会收集该行。默认情况下除了空行之外,不会丢弃任何行。

如果开启了multiline选项,在exclude_lines匹配前,多行会被合并为一行。

filebeat.inputs:
- type: log
  ...
  exclude_lines: ['^DBG']

上面示例表示排除日志中以DBG开头的日志条目

7、指定收集的行:

filebeat.inputs:
- type: log
  ...
  include_lines: ['^ERR', '^WARN']

上面示例表示收集以ERR、WARN开头的行。

若同时设置了exclude_lines和include_lines, Filebeat首先执行include_lines,然后执行exclude_lines。这两个选项的顺序并不重要。include_lines选项总是在exclude_lines选项之前执行,即使配置文件中的exclude_lines出现在include_lines之前。

filebeat.inputs:
- type: log
  ...
  include_lines: ['sometext']
  exclude_lines: ['^DBG']

上面的例子会输出所有包含'sometext'日志行,忽略所有以DBG开头的行。

8、单条日志最大字节数

max_bytes

默认值为10MB(10485760),多行日志可能会使一条日志条目变的很大,此时可把max_bytes选项设置大些。

  1. tail_files 设置从日志文件何处开始收集日志

    true:从文件尾开始监控文件新增内容把新增的每一行文件作为一个事件依次发送

    false:从文件开始发送所有内容

9、记录filebeat处理日志文件的位置的文件

默认位置:${path.data}/registry

registry_file: /var/lib/filebeat/registry

10、max_procs

可以同时执行的cpu的最大数量。默认值是系统中可用逻辑cpu的数量。

11、处理json日志

使filebeat可一行一行地处理json格式日志,每行只能有一个json对象。

配置示例:

json.keys_under_root: true
json.add_error_key: true
json.message_key: log

keys_under_root

默认情况下,解码后的JSON日志在输出文档中位于一个名为"json"的key下。如果开启这个设置,解码后的日志会在输出日志的最外层。

默认值:false

overwrite_keys

在开启keys_under_root并开启overwrite_keys后,若解码后的JSON日志字段与正常附加的部分冲突,解码后的日志会覆盖filebeat正常添加的部分(type, source, offset, etc.)

add_error_key

开启情况下,非JSON格式日志解码错误时,filebeat会在输出文档中添加 "error.message" 和"error.type: json"

ignore_decoding_error

日志解码错误时,要不要记录解码错误日志。默认关闭。

{ "Forward_addr": "-", "remote_addr":"192.168.100.100", "remote_user": "-", "time_local": "24/Apr/2021:03:29:22 +0800", "http_host": "www.xx.com", "request": "POST /xx/api HTTP/1.1", "http_referer": "https://www.xx.com/index.html", "status": "200", "body_bytes": "169", "upstream_addr": "192.168.100.100:1000", "ups_resp_time": "0.123", "request_time": "0.123", "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0" }