Filebeat+Logstash+ELK日志系统核心是日志自动流转与字段对齐:Filebeat轻量采集转发,Logstash结构化解析(grok→date→mutate→geoip),Elasticsearch按需设计索引mapping,Kibana通过Index Patterns实现Discover到Dashboard闭环分析。

用 Filebeat + Logstash + ELK(Elasticsearch + Kibana)搭建日志收集分析系统,核心是让日志从源头自动流转到可视化界面,关键在各组件职责清晰、配置不冲突、字段能对齐。
Filebeat:轻量日志搬运工,专注采集与转发
Filebeat 不做解析、不写磁盘缓存(默认)、资源占用低,适合部署在每台业务服务器上。它读取日志文件(如 /var/log/nginx/access.log),按行发送给 Logstash(或直连 ES,但推荐过 Logstash 做统一处理)。
- 确保 filebeat.yml 中 output.logstash 正确指向 Logstash 主机和端口(如 hosts: ["192.168.1.10:5044"])
- 用 filebeat.modules enable nginx 或 system 启用内置模块,自动适配常见日志格式和索引模板
- 若自定义日志,用 prospector 配置 paths、exclude_lines、multiline.pattern 控制读取行为,例如合并 Java 异常堆栈
Logstash:日志“中转站”,负责解析、丰富、路由
Logstash 接收 Filebeat 发来的原始日志,通过 filter 插件做结构化处理——这是整个链路中最易出错也最关键的环节。
- input 使用 beats 插件监听 5044 端口,与 Filebeat 输出匹配
- filter 推荐顺序:grok(提取字段,如 %{NGINXACCESS} 解析 Nginx 日志)→ date(将 @timestamp 替换为日志真实时间)→ mutate(重命名、删除冗余字段)→ geoip(对 clientip 补充地理位置)
- output 指向 Elasticsearch,指定 index 名称(建议带日期后缀,如 "nginx-access-%{+YYYY.MM.dd}"),并确认 ES 地址、认证信息(如有)
Elasticsearch:存储与检索引擎,索引设计影响查询效率
ES 不是黑盒数据库,索引 mapping 要提前规划。Filebeat 自动加载的模板(filebeat-*)已预设常用字段类型,但业务字段需检查是否合理。
- 查看当前模板:curl -X GET "localhost:9200/_cat/templates?v"
- 若新增字段如 app_name,确保其 type 是 keyword(用于聚合/过滤)而非 text(避免分词);可在 Logstash filter 中用 mutate.add_field 添加,再用 elasticsearch template 显式声明
- 注意 time-based index 的 rollover 或 ILM(Index Lifecycle Management)策略,避免单索引过大或磁盘爆满
Kibana:可视化入口,从 Discover 到 Dashboard 闭环
Kibana 不只是画图工具,更是日志分析的工作台。所有操作都依赖底层字段是否可用、是否被正确索引。
- 先在 Stack Management → Index Patterns 中创建 pattern(如 filebeat-*, nginx-access-*),选中 @timestamp 作为时间字段
- Discover 页面验证字段是否可查:能看到 clientip、response、uri 等,说明 grok 和 date 处理成功
- 用 Visualize 创建图表(如响应码分布用 Terms,耗时趋势用 Line),再组合进 Dashboard;可保存时间范围、筛选条件,分享给运维或开发团队
整套流程跑通后,日常维护重点是监控 Filebeat 是否断连、Logstash pipeline 是否积压、ES 集群健康状态(yellow/red)、Kibana 查询响应速度。不复杂但容易忽略细节。










