Ubuntu 上 Filebeat 处理日志格式的实践指南
一 处理思路总览
二 常见日志格式与 Filebeat 配置
JSON 日志(每行一个 JSON 对象)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: event
output.elasticsearch:
hosts: ["localhost:9200"]
index: "myapp_json-%{+yyyy.MM.dd}"
多行堆栈日志(Java、Python traceback 等)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/java/*.log
multiline.negate: true
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.match: after
multiline.max_lines: 500
multiline.timeout: 5s
Ubuntu 系统日志(auth、syslog 等)
# 启用模块
sudo filebeat modules enable system
sudo filebeat modules list
# 输出到 Logstash(示例)
output.logstash:
hosts: ["192.0.2.10:5044"]
# 重启服务
sudo systemctl restart filebeat
键值或正则可解析文本(如 Spring Boot 默认格式)
filebeat.inputs:
- type: stdin
processors:
- dissect:
tokenizer: "%{logDate} %{logTime} %{logLevel} %{pid} --- [%{thread}] %{logger} : %{message}"
field: "message"
output.console:
enabled: true
pretty: true
三 输出与索引模板
output.elasticsearch:
hosts: ["localhost:9200"]
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"
setup.template.settings:
index.number_of_shards: 3
四 调试与运行
sudo filebeat -e -c /etc/filebeat/filebeat.yml
sudo systemctl restart filebeat