EFK架构日志采集系统
以下是基于 Filebeat + Elasticsearch + Kibana(EFK) 构建日志采集系统的核心要点及部署指南,综合多来源最佳实践整理:
一、架构核心要点
组件角色
Filebeat:轻量级日志采集器,实时监控文件/目录变化,高效转发日志数据(资源占用仅为 Logstash 的 1/10)。
Elasticsearch:分布式搜索引擎,存储日志并提供实时检索与分析能力。
Kibana:可视化平台,通过仪表盘展示日志分析结果。
EFK vs ELK:Filebeat 替代 Logstash 作为采集层,简化架构并降低资源消耗。
适用场景
Nginx/Apache 访问日志分析、Kubernetes 容器日志采集、安全审计日志存储。
中小规模日志处理(大规模场景需引入 Kafka 缓冲)。
二、部署步骤指南
环境准备
版本兼容性:确保 Elasticsearch、Kibana、Filebeat 大版本一致(如 7.x)。
系统配置
# 调整内核参数
sysctl -w vm.max_map_count=262144
核心配置
Filebeat 采集配置 (filebeat.yml):
filebeat.inputs:- type: logpaths: ["/var/log/nginx/*.log"] # 监控日志路径fields: { log_type: "nginx" } # 自定义日志标签output.elasticsearch:hosts: ["es-host:9200"] # ES 地址indices:- index: "nginx-%{+yyyy.MM.dd}" # 按日期生成索引
多行日志处理:添加 multiline.pattern 合并 Java 堆栈等跨行日志。
Elasticsearch 配置 (elasticsearch.yml):
cluster.name: efk-prodnode.name: es-node-1network.host: 0.0.0.0discovery.type: single-node # 生产集群需配置多节点
Kibana 对接 ES (kibana.yml):
server.port: 5601server.host: "0.0.0.0"elasticsearch.hosts: ["http://es-host:9200"]
Kubernetes 部署方案
DaemonSet 部署 Filebeat:每个节点部署一个 Filebeat Pod,采集节点所有容器日志。
ES/Kibana 部署:
使用 Helm Chart 或 StatefulSet 部署 Elasticsearch 集群。
Kibana 通过 Deployment 暴露 Service。
启动顺序:Elasticsearch → Kibana → Filebeat。
三、典型应用示例
Nginx 日志分析流程:
Filebeat 采集并标注 fields.log_type: nginx。
ES 索引按日期分片存储(nginx-2025.06.13)。
Kibana 创建仪表盘统计:
状态码分布饼图
请求量时序曲线
高频 IP 地址地图。
生产建议:日志量 > 10GB/天时,采用 Filebeat → Kafka → Logstash(过滤)→ ES 架构提升可靠性。