一、EFLK 与 EFK 的区别
1. 基本组成
- EFK:Elasticsearch + Fluentd + Kibana
- EFLK:Elasticsearch + Filebeat + Logstash + Kibana
2. 核心差异
特性 | EFK | EFLK |
---|---|---|
日志收集器 | Fluentd | Filebeat + Logstash |
资源消耗 | 较高(Ruby实现) | 较低(Go实现Filebeat) |
处理能力 | 内置强大过滤和路由功能 | 需要结合Logstash进行复杂处理 |
扩展性 | 插件丰富但依赖Ruby生态 | 更轻量级,易于扩展 |
适用场景 | 复杂日志处理场景 | 大规模日志收集场景 |
二、EFK 搭建流程
1. 环境准备
- 至少3台服务器(可单机测试)
- 安装Docker和Docker Compose
- 建议配置:4核CPU,8GB内存,100GB存储
2. 安装步骤
使用Docker Compose部署
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
fluentd:
image: fluent/fluentd:v1.14-1
ports:
- "24224:24224"
- "24224:24224/udp"
volumes:
- ./fluentd.conf:/fluentd/etc/fluent.conf
depends_on:
- elasticsearch
volumes:
es_data:
Fluentd 配置文件 (fluentd.conf)
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match *.*>
@type elasticsearch
host elasticsearch
port 9200
index_name fluentd-${tag}-%Y%m%d
type_name fluentd
<buffer>
@type file
path /fluentd/log/buffer
</buffer>
</match>
启动服务
docker-compose up -d
3. 验证安装
- Elasticsearch:
curl http://localhost:9200
- Kibana: 访问
http://localhost:5601
- 发送测试日志:
echo '{"message":"test"}' | nc localhost 24224
三、EFLK 搭建流程
1. 环境准备
同EFK,额外需要安装Filebeat
2. 安装步骤
Docker Compose 文件
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
logstash:
image: docker.elastic.co/logstash/logstash:7.14.0
ports:
- "5044:5044"
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
filebeat:
image: docker.elastic.co/beats/filebeat:7.14.0
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
- /var/log:/var/log:ro
depends_on:
- logstash
volumes:
es_data:
Logstash 配置文件 (logstash.conf)
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
Filebeat 配置文件 (filebeat.yml)
启动服务
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.logstash:
hosts: ["logstash:5044"]
docker-compose up -d
3. 验证安装
- 检查Elasticsearch索引:
curl http://localhost:9200/_cat/indices?v
- 在Kibana中创建索引模式
- 查看收集到的日志数据
四、性能调优建议
EFK 调优
-
Fluentd:
- 调整buffer_chunk_limit和buffer_queue_limit
- 使用多worker进程
- 启用压缩传输
-
Elasticsearch:
- 合理设置分片数
- 配置索引生命周期管理(ILM)
EFLK 调优
-
Filebeat:
- 配置backoff和max_backoff参数
- 使用loadbalance选项分散负载
-
Logstash:
- 调整pipeline.workers和pipeline.batch.size
- 使用持久化队列
-
Elasticsearch:
- 同EFK配置建议
五、选择建议
选择EFK当:
- 需要复杂日志处理逻辑
- 已有Ruby技术栈
- 需要丰富的插件生态系统
选择EFLK当:
- 处理大规模日志数据
- 需要更轻量级的日志收集器
- 系统资源有限
- 需要更简单的扩展和维护
两种方案都可以很好地处理日志管理需求,具体选择应根据实际场景和技术栈决定。