一、整体架构服务器产生日志 → 日志采集 → 消息队列缓冲 → 日志清洗 → 存储检索 → 可视化展示plaintext业务/系统日志 → Filebeat采集 → Kafka削峰解耦 → Logstash清洗格式化 → Elasticsearch存储索引 → Kibana展示查询二、ELK 核心组件作用1. Elasticsearch分布式搜索引擎 / 索引数据库作用存储、索引、检索海量日志提供高并发、低延迟查询特点分布式、高可用、基于 Lucene、RESTful API核心机制分片 副本默认 5 主分片 1 个副本管理方式curl命令发送 HTTP 请求操作索引2. Logstash数据采集 / 清洗 / 格式化Java 开发功能强但比较耗资源三部分Input 采集 → Filter 过滤 → Output 输出作用统一日志格式为 JSON、过滤无用日志、路由输出3. Kibana可视化平台页面化展示 ES 中日志做图表、监控、检索、导出日志运维常用故障排查、日志提取、业务数据观测4. Filebeat轻量日志采集器Go 语言开发占用 CPU / 内存极低专门用于采集服务器本地日志文件直接部署在业务机替代重量级 Logstash 客户端三、日志采集工具对比表格工具开发语言特点使用场景FilebeatGo超轻量、低消耗服务器文件日志采集最常用LogstashJava功能强、耗资源集中式日志清洗、过滤、转换FlumeJava大数据场景Hadoop 生态、海量日志采集FluentdC/Ruby云原生、轻量容器日志、K8s 日志采集四、Elasticsearch 核心知识点1. 分片与副本机制分片Shard把一个索引切成多段分布式存储在不同节点提高并发与容量副本Replica分片的备份提高可用性与读性能默认配置5 个主分片 1 个副本2. 倒排索引ES 快的核心正向索引文档 → 关键词倒排索引关键词 → 文档ES 建立关键词与文档 ID 的映射实现秒级检索3. ES 常用 curl 命令bash运行# 查看集群健康 curl -XGET 192.168.72.141:9200/_cluster/health?pretty # 查看所有索引 curl -XGET 192.168.72.141:9200/_cat/indices?v # 创建索引 curl -XPUT 192.168.72.141:9200/test-index # 修改副本数 curl -XPUT 192.168.72.141:9200/test-index/_settings -d {number_of_replicas:2} # 删除索引 curl -XDELETE 192.168.72.141:9200/test-index五、消息队列 Kafka 核心1. 为什么要使用 Kafka三大作用削峰日志突增时先存入队列消费者慢慢消费生产者产生的数据会暂存在消息队列中消费者根据自身能力消费数据即可可以保障数据处理的稳定性异步采集完不等待处理直接返回消息队列保存完数据之后就会通知生产者继续输出不会等待消费者消费完再通知解耦Filebeat 与 Logstash 互不依赖一方挂了不影响另一方将原本的生产者与消费者关系隔离开来例如filebeat 和logstash2. Kafka 核心概念Broker一台 Kafka 服务器Topic主题相当于队列 / 分类Partition分区Topic 分为多个目录存储提高并发Segment分区内的数据段文件.logOffset偏移量标记消费位置Leader Follower主分区与副本分区Consumer Group消费者组负载均衡消费3. Kafka 工作流程生产者Filebeat发送日志到指定 TopicTopic 分为多个 Partition由 Leader 提供读写数据以.log格式分段Segment存储消费者组从 Leader 拉取Pull数据按 Offset 消费数据默认保存7 天4. Kafka 依赖 ZooKeeper 做什么集群节点注册与发现控制器Controller选举分区 Leader 选举元数据管理Topic、Partition、Offset注意Kafka 2.8 以后可脱离 ZK 独立运行Kafka 2.8 推出的 KRaft 模式仅替代了 ZK 的「元数据管理」核心功能ZK 额外提供的通用分布式锁、统一配置中心、主动 Watcher 通知、跨组件节点发现、事务性元数据修改这些功能是 2.8 后 Kafka 原生不具备的。不过脱离 ZK 能减少依赖、提升性能这也是 Kafka 主推 KRaft 模式的原因。5. Kafka 常用命令bash运行# 创建主题 kafka-topics.sh --create --zookeeper 192.168.72.140:2181 --replication-factor 2 --partitions 3 --topic httpd # 查看主题列表 kafka-topics.sh --list --zookeeper 192.168.72.140:2181 # 查看主题详情 kafka-topics.sh --describe --zookeeper 192.168.72.140:2181 --topic httpd # 修改分区数 kafka-topics.sh --alter --zookeeper 192.168.72.140:2181 --topic httpd --partitions 6 # 删除主题 kafka-topics.sh --delete --zookeeper 192.168.72.140:2181 --topic httpd # 生产消息 kafka-console-producer.sh --broker-list 192.168.72.140:9092 --topic httpd # 消费消息 kafka-console-consumer.sh --bootstrap-server 192.168.72.140:9092 --topic httpd --from-beginning六、ELK Kafka 完整对接配置1. Filebeat 输出到 Kafkayamlfilebeat.inputs: - type: log enabled: true paths: - /var/log/httpd/access_log tags: [access] - type: log enabled: true paths: - /var/log/httpd/error_log tags: [error] output.kafka: enabled: true hosts: [192.168.72.140:9092,192.168.72.141:9092,192.168.72.142:9092] topic: httpd codec.json: pretty: false2. Logstash 从 Kafka 读取rubyinput { kafka { bootstrap_servers 192.168.72.140:9092,192.168.72.141:9092,192.168.72.142:9092 topics httpd codec json auto_offset_reset latest } } output { elasticsearch { hosts [192.168.72.141:9200] index filebeat_test-%{yyyy.MM.dd} } }七、面试题答案整理1. 你们用 ELK 采集哪些日志业务日志log4j2系统日志messages服务访问日志access_log错误日志error_log慢查询日志、MySQL binlog、Redis 日志等2. 你们怎么采集日志业务机部署Filebeat采集日志输出到Kafka削峰解耦Logstash从 Kafka 读取并格式化存入ElasticsearchKibana展示与查询3. ES 索引、分片、副本怎么做索引默认5 主分片 1 副本分片分布式存储提升性能与容量副本保证高可用可通过curl -XPUT修改副本数4. 什么是倒排索引将关键词对应到文档的索引结构ES 用它实现快速全文检索是 Elasticsearch 高性能的核心5. ES 为什么快倒排索引分片并发读写内存文件系统缓存分段存储Segment6. 消息队列作用削峰异步解耦7. Kafka 工作流程生产者发数据到 Topic分区存储Leader 提供服务消费者组主动 Pull 拉取数据按 Offset 消费默认保存 7 天8.消费者组Consumer Group的作用消费者组 多个消费者组成的「团队」核心规则同一个 Topic 的一个分区只能被同一个消费者组里的一个消费者拉取避免重复消费八、运维日常工作ELK 用途故障排查通过 Kibana 快速检索错误日志日志提取给开发 / 测试导出业务日志数据核对提供业务数据观测报表集群维护ES 索引清理、Kafka 分区均衡、监控告警九、整套实验总结你搭建的是企业最标准的 ELFK 架构plaintext日志 → Filebeat → Kafka → Logstash → Elasticsearch → Kibana包含轻量采集Filebeat流量削峰Kafka协调服务ZK清洗格式化Logstash分布式存储ES可视化展示Kibana