Filebeat 收集 Linux 系统日志:配置文件编写、多行日志处理(如 Java 堆栈)
·
Filebeat 收集 Linux 系统日志配置指南
1. 基础配置文件编写
创建 filebeat.yml 配置文件,核心结构如下:
filebeat.inputs:
- type: filestream
id: system-logs
enabled: true
paths:
- /var/log/syslog
- /var/log/messages
- /var/log/*.log
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
indices:
- index: "linux-system-%{+yyyy.MM.dd}"
2. 多行日志处理(Java 堆栈示例)
针对 Java 堆栈等跨行日志,添加 multiline 配置:
filebeat.inputs:
- type: filestream
id: java-logs
paths:
- /var/log/app/*.log
multiline.type: pattern
multiline.pattern: '^[[:space:]]+(at|Caused by)' # 识别堆栈行首特征
multiline.negate: true
multiline.match: after
参数解析:
pattern: 正则匹配行首特征(如缩进空格 + "at/Caused by")negate: true: 将不匹配该模式的行视为新事件match: after: 将匹配行追加到上一事件
3. 完整配置示例
filebeat.inputs:
- type: filestream
id: system
paths:
- /var/log/syslog
- /var/log/auth.log
- type: filestream
id: java-app
paths:
- /opt/app/logs/*.log
fields:
app: java-service
multiline:
pattern: '^\s+(\w+\.)+' # 匹配包名前缀
negate: true
match: after
timeout: 5s # 多行等待超时
output.elasticsearch:
hosts: ["es-node1:9200", "es-node2:9200"]
username: "filebeat-user"
password: "secure-password"
4. 关键优化技巧
- 日志类型标记:
fields: log_type: system fields_under_root: true # 将字段提升到根层级 - 处理器增强:
processors: - drop_fields: # 过滤无用字段 fields: ["log.offset"] - dissect: # 提取时间戳 tokenizer: "%{timestamp} %{message}" field: "message" target_prefix: "" - 性能调优:
queue.mem: events: 4096 # 内存队列大小 max_procs: 4 # CPU核数限制
5. 验证与调试
# 测试配置文件语法
filebeat test config
# 模拟日志采集(不发送至ES)
filebeat -e --strict.perms=false \
-E output.console.pretty=true
最佳实践:
- 对不同的日志源使用独立的
id- 使用
fields添加环境标签(如env: production)- 通过
multiline.timeout防止大堆栈阻塞- 结合
ignore_older避免历史日志重复采集
更多推荐
所有评论(0)