配置文件属性
生产配置
filebeat.inputs:
- type: log
enabled: true
paths:
- /tmp/logs/*.log
- /var/log/system.log
- /var/log/wifi.log
symlinks: true
json.keys_under_root: true
json.message_key: xxx
json.add_error_key: true
# 如果想卡部分日志,比如用时间作为过滤条件,加上下面两个选项,一个是时间筛选,一个是句柄是否关闭
ignore_older: 168h
close_inactive: 24h
multiline.pattern: '^\s+|^"'
multiline.match: after
fields:
type: fb-urmp-xx-test
fields_under_root: true
output.console:
pretty: true
2024.09.20补充
在后续实践的过程中,发现这个配置其实是有点多余的,目前生产上的filebeat配置如下:
filebeat.inputs: - type: log paths: - /home/logs/biz/*.log encoding: utf-8 fields: fb_collect_type: bizlog send_kafka: "false" fields_under_root: true - type: log paths: - /home/logs/sys/*.log encoding: utf-8 fields: fb_collect_type: syslog fields_under_root: true output.logstash: hosts: - "xxxx" processors: - drop_fields: fields: ["ecs", "agent", "log"]
去除了json相关处理和多行处理,为什么呢?
因为filebeat不是专业处理这些问题的,而且它的灵活性有点差,需要适配各种各样的场景(真的好多场景),与其这样,还不如在日志输出源哪里做好json格式化,具体做法可以参考logback日志格式高级玩法
同时增加了processors处理,这些在一定程度上可以提高采集性能,因为在高并发环境下,日志内容越少,性能就越好
还增加了encoding: utf-8,统一格式,至于原因,不添加这个,会在logstash采集上导致很多 /u0000问题,在logstash问题汇总这片文章有讲
参数释义
paths
待收集日志的路径列表
symlinks
使用 symlinks
属性的主要场景包括:
- 日志轮转:有些日志轮转工具会创建符号链接指向最新的日志文件。启用
symlinks
后,Filebeat 可以确保收集到最新的日志内容。 - 一致性路径:在一些系统中,符号链接可能用于统一路径,而实际文件位置可能会变化。通过设置
symlinks
,Filebeat 可以稳定地读取这些符号链接指向的日志文件。
假设你有一个应用程序,它生成的日志文件在 /var/log/myapp/
目录下,并且有一个日志轮转机制。轮转机制会将旧日志重命名并创建一个符号链接指向最新的日志文件,如下所示:
/var/log/myapp/
├── myapp.log -> myapp.log.20240628
├── myapp.log.20240626
├── myapp.log.20240627
└── myapp.log.20240628
在上面的结构中,myapp.log
是一个符号链接,指向 myapp.log.20240628
,这是最新的日志文件。
不使用 symlinks
如果你在 Filebeat 配置中没有启用 symlinks
:
这种情况下,Filebeat 只会读取实际的日志文件,即 myapp.log.20240626
、myapp.log.202406