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

想把多台 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-* 无限增长










