可行性与典型架构
可以,Ubuntu 上的 Filebeat 与 ELK(Elasticsearch、Logstash、Kibana) 完全兼容,常用于将主机与应用日志高效采集到中央平台。常见有两种部署方式:一是 Filebeat → Logstash → Elasticsearch → Kibana,由 Logstash 做复杂解析与丰富;二是 Filebeat 直连 Elasticsearch(适合轻量场景),再由 Kibana 进行检索与可视化。两种模式在生产环境均有广泛实践。
快速配置示例
-
方案A(经 Logstash 解析):在 Ubuntu 安装 Filebeat 后,编辑 /etc/filebeat/filebeat.yml,示例要点:
- 输入:采集 /var/log/*.log 等路径;多行日志(如 Java 堆栈)可用 multiline 合并。
- 输出:指向 Logstash 的 5044 端口。
- 启动:systemctl start filebeat && systemctl enable filebeat。
示例片段:
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/*.log
output.logstash:
hosts: [“logstash.example.com:5044”]
在 Logstash 侧创建管道(如 /etc/logstash/conf.d/filebeat.conf):
input { beats { port => 5044 } }
filter {
grok { match => { “message” => “%{COMBINEDAPACHELOG}” } }
date { match => [ “timestamp”, “dd/MMM/yyyy:HH:mm:ss Z” ] target => “@timestamp” }
}
output { elasticsearch { hosts => [“http://es.example.com:9200”] index => “logs-%{+YYYY.MM.dd}” } }
该模式便于使用 Grok、date、useragent 等插件做字段解析与时间标准化。
-
方案B(Filebeat 直连 ES):在 Filebeat 中启用 output.elasticsearch,并配置 ILM(索引生命周期管理) 与索引模板,实现按日滚动与热温冷分层。示例片段:
output.elasticsearch:
hosts: [“http://es.example.com:9200”]
index: “filebeat-%{+yyyy.MM.dd}”
ilm.enabled: true
ilm.rollover_alias: “filebeat”
ilm.policy_name: “filebeat”
并在 Kibana 创建索引模式 filebeat-*,时间字段选 @timestamp。此方式部署更简,解析工作可交由 Elasticsearch 的 Ingest Pipeline 或后续在 Kibana 处理。
版本选择与兼容性建议
- 建议 Elasticsearch、Logstash、Kibana、Filebeat 版本保持一致或相近,可显著降低兼容性与映射冲突风险;例如多份实践文档均在同一主版本(如 7.12.x 或 6.2.x)下部署整套组件。
- 若使用 Elasticsearch 8.x,Filebeat 也建议 8.x,并优先采用 ILM 管理索引生命周期;在 Kibana 的 Index Patterns 中使用通配符 filebeat-* 并指定 @timestamp 为时间字段。
常见问题与排查要点
- 权限与路径:确保 Filebeat 对日志路径(如 /var/log/)具备读取权限;在容器或 systemd 环境下,注意挂载日志卷与运行用户。
- 多行日志:对 Java 异常堆栈、Nginx 错误日志 等启用 multiline,避免行被错误拆分。
- 解析与字段:复杂文本建议在 Logstash 用 Grok 解析,或使用 Elasticsearch Ingest Pipeline;时间字段统一转换为 @timestamp。
- 索引与生命周期:开启 ILM 实现按大小或时间 rollover,并按热/温/冷阶段管理保留与降成本。
- 连通性验证:依次检查 Filebeat→Logstash(端口 5044)、Logstash→ES(端口 9200)、Kibana(端口 5601)网络与防火墙;在 Kibana 创建索引模式并查询数据是否落盘。