排查问题、监控系统,离不开日志分析。分布式系统中日志分散杂乱,手动排查低效且易遗漏,EFK作为主流日志管理架构,能高效解决这一问题。
一、先搞懂核心:EFK到底是什么?
EFK是开源日志管理与分析架构,实现“日志采集-存储-检索-可视化”全链路,由三大核心组件组成,与ELK核心差异在采集层:
1. EFK三大核心组件
- Elasticsearch(ES) :核心组件,负责日志存储与检索,高性能分布式搜索引擎,支持多维度秒级检索,与ELK共用。
- Filebeat:日志采集与转发工具,轻量(内存仅几十MB)、稳定,部署在目标服务器,实时采集日志并转发至ES,是EFK与ELK的核心区别。
- Kibana:可视化操作面板,与ES深度集成,无需复杂命令,即可实现日志查询、筛选和统计,与ELK共用。
2. EFK核心工作流程
服务器产生日志 → Filebeat监控采集 → 转发至Elasticsearch存储索引 → 开发者通过Kibana可视化查询分析。
二、关键对比:ELK为何淘汰,EFK成主流?
ELK(Elasticsearch+Logstash+Kibana)被淘汰的核心原因,是采集层Logstash的硬伤,而EFK用Filebeat完美替代,适配现代架构需求。
1. ELK的致命痛点
- 资源占用高:基于Java开发,内存占用几百MB~1GB+,占用业务服务器资源,不适配小型服务器和容器。
- 稳定性差:配置复杂,高并发海量日志场景下易卡顿、崩溃,导致日志丢失,运维成本高。
- 适配性弱:非为云原生、容器化设计,K8s环境部署管理繁琐,无法适配容器动态增减。
2. EFK的核心优势
- 轻量低耗:Go语言开发,无需Java环境,内存占用几十MB,不影响业务,适合大规模部署。
- 稳定可靠:核心功能简洁,高并发场景下稳定运行,支持断点续传,避免日志丢失。
- 配置简单:几行配置即可实现采集转发,新手易上手,复杂处理可结合ES的Ingest Node。
- 适配性强:完美适配云原生、容器化环境,支持K8s、Docker,部署管理便捷。
3. 核心对比总结
| 对比维度 | ELK(Logstash) | EFK(Filebeat) |
|---|---|---|
| 资源占用 | 高(几百MB~1GB+) | 极低(几十MB) |
| 稳定性 | 较差,易崩溃 | 极强,不易中断 |
| 配置复杂度 | 复杂 | 简单 |
| 适配场景 | 传统低并发场景 | 分布式、容器化高并发场景 |
| 运维成本 | 高 | 低 |
| 补充:部分场景用Fluentd替代Filebeat,但Filebeat与Elastic生态集成更优、配置更简,本文以Filebeat为例。 |
三、实操部署:从0到1搭建EFK
部署环境:CentOS 7/8(测试2GB+,生产4GB+),root用户操作,组件版本统一为8.12.2,核心分3步部署。
第一步:部署Elasticsearch
1. 环境准备
# 关闭防火墙(生产开放9200、9300端口)
systemctl stop firewalld && systemctl disable firewalld
# 关闭SELinux
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置系统参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
# 创建elastic用户(ES禁止root启动)
useradd elastic && passwd elastic # 自定义密码,如123456
2. 下载安装
cd /usr/local
# 下载并解压
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.12.2-linux-x86_64.tar.gz && mv elasticsearch-8.12.2 elasticsearch
# 授权
chown -R elastic:elastic /usr/local/elasticsearch
3. 配置ES
vim /usr/local/elasticsearch/config/elasticsearch.yml
# 添加以下配置
cluster.name: my-efk-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
cluster.initial_master_nodes: ["node-1"]
xpack.security.enabled: false # 测试环境关闭认证
bootstrap.memory_lock: false
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
4. 启动验证
su - elastic
cd /usr/local/elasticsearch
nohup ./bin/elasticsearch > es.log 2>&1 &
# 等待一下
curl http://localhost:9200 # 返回集群信息即成功
常见报错:内存不足则修改jvm.options,调整-Xms2g -Xmx2g;权限报错重新执行授权命令。
第二步:部署Filebeat
与ES、Kibana同机部署(分布式修改ES地址即可),采集Linux系统日志为例。
1. 下载安装
su - root && cd /usr/local
# 下载解压并重命名
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.2-linux-x86_64.tar.gz
tar -zxvf filebeat-8.12.2-linux-x86_64.tar.gz && mv filebeat-8.12.2-linux-x86_64 filebeat
2. 配置采集与转发
vim /usr/local/filebeat/filebeat.yml
# 核心配置
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages # 系统日志路径,可替换为应用日志
tags: ["system-log"]
output.elasticsearch:
hosts: ["localhost:9200"] # ES地址
setup.kibana:
host: "localhost:5601"
setup.template.enabled: false
setup.ilm.enabled: false
3. 启动验证
cd /usr/local/filebeat
nohup ./filebeat -e -c filebeat.yml > filebeat.log 2>&1 &
tail -f /usr/local/filebeat/filebeat.log # 无报错、显示连接ES成功即正常
第三步:部署Kibana
1. 下载安装
su - root && cd /usr/local
# 下载解压并重命名
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.12.2-linux-x86_64.tar.gz
tar -zxvf kibana-8.12.2-linux-x86_64.tar.gz && mv kibana-8.12.2-linux-x86_64 kibana
# 授权
chown -R elastic:elastic /usr/local/kibana
2. 配置Kibana
vim /usr/local/kibana/config/kibana.yml
# 核心配置
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"] # 连接ES
kibana.index: ".kibana"
i18n.locale: "zh-CN" # 中文界面
# 保存退出
3. 启动验证
su - elastic
cd /usr/local/kibana
nohup ./bin/kibana > kibana.log 2>&1 &
tail -f /usr/local/kibana/kibana.log # 显示Kibana is available即成功
# 浏览器访问:http://服务器IP:5601,直接进入中文主页
第四步:Kibana主页查询日志
1. 创建索引模式
- 主页 → 管理 → 索引模式,点击“创建索引模式”。
- 输入filebeat-*(匹配所有Filebeat采集日志),下一步。
- 时间字段选@timestamp,点击“创建索引模式”。
2. 日志查询操作
- 主页 → 发现,调整顶部时间范围(如最近1小时)。
- 下方即可查看采集的日志,支持3种常用查询:
- 关键词查询:搜索框输入error、warning筛选异常日志。
- 标签筛选:点击左侧tags,选择system-log筛选指定日志。
- 字段筛选:通过左侧字段(如host.name)精准定位。
四、总结与注意事项
1. 核心总结
- EFK(ES+Filebeat+Kibana)轻量、稳定、易部署,适配现代分布式、容器化架构,替代ELK成为主流。
- ELK淘汰核心:Logstash资源高、不稳定、适配差;Filebeat完美解决这些痛点。
- 部署关键:组件版本一致,ES/Kibana禁止root启动,配置正确的ES地址和日志路径。
2. 注意事项
- 版本一致:避免兼容性问题,三者统一版本。
- 内存配置:ES测试2GB+,生产4GB+,按需调整jvm堆内存。
- 权限问题:ES/Kibana需授权elastic用户,禁止root启动。
- 生产优化:开启ES安全认证,开放必要端口,Filebeat全服务器部署采集全量日志。