EFK是什么?如何快速搭建一个上手试试?

6 阅读5分钟

排查问题、监控系统,离不开日志分析。分布式系统中日志分散杂乱,手动排查低效且易遗漏,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. 创建索引模式

  1. 主页 → 管理 → 索引模式,点击“创建索引模式”。
  2. 输入filebeat-*(匹配所有Filebeat采集日志),下一步。
  3. 时间字段选@timestamp,点击“创建索引模式”。

2. 日志查询操作

  1. 主页 → 发现,调整顶部时间范围(如最近1小时)。
  2. 下方即可查看采集的日志,支持3种常用查询:
    1. 关键词查询:搜索框输入error、warning筛选异常日志。
    2. 标签筛选:点击左侧tags,选择system-log筛选指定日志。
    3. 字段筛选:通过左侧字段(如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全服务器部署采集全量日志。