支持多种日志格式的能力
在 Ubuntu 上,Filebeat 可以同时采集并解析多种日志格式,包括 系统日志(/var/log/syslog、/var/log/auth.log)、Nginx(access.log、error.log)、MySQL、以及各类自定义应用日志;内置 System/ Nginx/ MySQL 等模块可简化常见格式的采集与解析,并支持 JSON 解析 与 多行日志合并 等能力。
实现方式
- 使用内置模块:通过 filebeat modules enable 启用 system、nginx、mysql 等模块,自动完成输入与解析配置,适合标准化日志。
- 自定义输入与处理器:在同一台主机上配置多个 filebeat.inputs,分别指向不同路径与解析方式;结合 processors(如 if/then、add_cloud_metadata)按内容或标签分流与增强。
- 多行日志:为堆栈日志、Java 异常等配置 multiline,将多行合并为单条事件,避免碎片化。
- 复杂解析交给 Logstash:将 output 指向 Logstash(默认端口 5044),在 Logstash 中用 grok、date、mutate 等完成更灵活的解析与丰富,再写入 Elasticsearch。
最小配置示例
- 同时采集系统日志与 Nginx,按标签分流到不同索引
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog
tags: [“system”]
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
tags: [“nginx”]
multiline.pattern: ‘^\d{4}-\d{2}-\d{2}’ # 示例:合并以日期开头的多行
multiline.negate: true
multiline.match: after
output.elasticsearch:
hosts: [“localhost:9200”]
indices:
- index: “filebeat-system-%{+yyyy.MM.dd}”
when.contains:
tags: “system”
- index: “filebeat-nginx-%{+yyyy.MM.dd}”
when.contains:
tags: “nginx”
实践建议
- 为不同日志类型设置不同 tags,便于后续在 Logstash 条件判断或在 ES/Kibana 中做索引与可视化分流。
- 对 JSON 日志 使用 json.* 选项(如 message_key、keys_under_root)直接结构化;对 多行堆栈 正确配置 multiline,避免事件被拆分。
- 需要更强的解析与清洗能力时,采用 Filebeat → Logstash → Elasticsearch 的链路;仅做轻量采集与直发 ES 时,优先使用模块与内置处理器。