Linux分布式日志收集教程_ELKFilebeatLogstash整合实践

17次阅读

elk+Filebeat是linux日志集中分析的主流方案:Filebeat轻量采集转发,Logstash解析增强,elasticsearch存储检索,Kibana可视化;需注意权限、时区统一和ILM索引生命周期管理。

Linux分布式日志收集教程_ELKFilebeatLogstash整合实践

想把多台 Linux 服务器的日志集中分析?ELK(Elasticsearch + Logstash + Kibana)配合 Filebeat 是目前最主流、轻量又可靠的方案。关键不在装全组件,而在理清角色分工:Filebeat 负责轻量采集和转发,Logstash 做解析增强,Elasticsearch 存储检索,Kibana 可视化。下面直接说落地要点。

Filebeat 部署:每台业务机只装它

Filebeat 是 go 写的,资源占用低,适合装在日志源头。别在业务机上跑 Logstash —— 它吃 CPU 和内存,容易拖慢服务。

  • 下载官方 deb/rpm 包或用 apt/yum 直接安装,启动前改 filebeat.yml
  • 重点配 filebeat.inputs:指定日志路径(支持通配符,如 /var/log/nginx/*.log),开启 multiline.pattern 合并日志
  • 输出设为 Logstash:output.logstash: hosts: ["logstash-server:5044"],别直连 Elasticsearch(会绕过解析逻辑)
  • 启动后用 filebeat test output 确认连通性,再 systemctl start filebeat

Logstash 配置:专注解析与结构化

Logstash 在专用节点运行,接收 Filebeat 发来的原始日志,做字段提取、时间重写、敏感信息过滤等。

  • 输入插件固定用 beats,监听 5044 端口input { beats { port => 5044 } }
  • 过滤阶段用 grok 解析 Nginx、java、Syslog 等常见格式,例如:grok { match => { "message" => "%{NGINXaccess}" } }
  • 加上 date 插件校准时间戳(Filebeat 发送的是采集时间,不是日志真实时间)
  • 输出到 Elasticsearch:output { elasticsearch { hosts => ["es-node1:9200"] index => "logs-%{+yyYY.MM.dd}" } }

Elasticsearch + Kibana:存储与看板

ES 建议至少 2 节点起步(防单点故障),Kibana 装在任意能访问 ES 的机器上。

  • ES 配置里关掉 discovery.type: single-node(生产环境必须禁用),调大 heap.size(建议不超过物理内存 50%,且 ≤32GB)
  • Kibana 启动前改 kibana.yml:设 server.host: "0.0.0.0"(如需远程访问),并指向 ES 地址:elasticsearch.hosts: ["http://es-node1:9200"]
  • 首次打开 Kibana,进 Stack Management → Index Patterns,创建 logs-* 模式,选 @timestamp 为时间字段
  • 之后就能在 Discover 查日志,在 Dashboard 建图表,比如“每分钟 5xx 错误数”或“Top IP 访问排行”

避坑提醒:权限、时区、索引爆炸

三个高频问题,提前处理省半天调试。

  • Filebeat 权限不够读不了日志? 把 filebeat 用户加进对应日志组(如 usermod -a -G adm filebeat),或改日志文件权限(不推荐 chmod 777)
  • 日志时间全是 UTC? Filebeat 和 Logstash 都要配 timezone => "Asia/Shanghai",ES 索引模板里也显式声明
  • ES 磁盘爆了? 用 ILM(Index Lifecycle Management)自动删旧索引,比如保留 7 天,每天滚动一个索引,别让 logs-* 无限增长
text=ZqhQzanResources