1. ELK是什么,ELFK是什么,主要使用场景是什么
一、什么是 ELK?
ELK 是三个开源工具的缩写,主要用于日志的收集、分析与可视化:
二、什么是 ELFK?
ELFK 是在 ELK 基础上加入了一个新的组件 Fluentd 或 Filebeat,用于替代 Logstash 的轻量级日志采集器。
ELK vs ELFK 对比
ELK 更适合传统服务器部署,Logstash 功能强大但资源消耗高;
ELFK 更适合云原生、Kubernetes、容器化等场景,使用 Filebeat 或 Fluentd 替代 Logstash 实现轻量采集。
ELK / ELFK 的主要使用场景
2. ELFK分别是使用什么语言开发的
3. 为什么要使用Filebeat 来替换Logstash
为什么要使用 Filebeat 来替换 Logstash?
在 ELFK(Elasticsearch、Logstash、Kibana、Filebeat)架构中,Filebeat 是 Logstash 的轻量级替代方案,主要用于日志采集和转发。以下是从多个维度分析为何选择 Filebeat 替代 Logstash 的原因:
1. 资源占用低
Logstash 是基于 JRuby 和 Java 的应用,需要运行在 JVM 上,内存和 CPU 消耗较高;
Filebeat 是用 Go 语言编写的原生程序,资源消耗极低,适合部署在容器、边缘节点等资源受限环境。
2. 启动速度快
Filebeat 无需 JVM 初始化,几乎立即可用;
Logstash 启动慢,尤其在插件较多或配置复杂时更为明显。
3. 适用于云原生与 Kubernetes 环境
Filebeat 支持自动发现机制(如 Kubernetes Autodiscover),可动态识别新 Pod 并采集日志;
Logstash 更适合集中式日志处理中心,不适合每个节点都部署。
4. 功能定位不同:轻量 vs 全能
Logstash 是一个完整的日志处理管道,适合做复杂的日志清洗和转换;
Filebeat 主要用于采集和转发日志,处理逻辑简单,性能开销小。
5. 部署维护更简单
Filebeat 配置简单,只需指定日志路径和输出地址即可;
Logstash 需要编写 Pipeline 配置文件,涉及输入、过滤、输出三部分,维护成本高。
6. 更适合现代架构的扩展性
Filebeat 可配合 Metricbeat 实现指标+日志双采集;
Logstash 更适合作为日志处理中枢,而非分布式采集节点。
7. ELK 生态官方推荐
Elastic 官方推荐在大多数场景下使用 Filebeat 替代 Logstash 作为日志采集器;
Logstash 保留用于集中式日志处理层,用于执行高级转换、聚合等任务;
Filebeat 用于边缘采集,负责将日志从各个节点转发到 Logstash 或 Elasticsearch。
4. 搭建es和Kibana服务,再到要收集日志的机器上搭建Filebeat 来收集日志
一、环境准备
二、安装 Elasticsearch 和 Kibana
方法 :使用 APT 安装(Ubuntu)
# 添加 Elastic APT 仓库
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
# 更新包列表并安装
sudo apt-get update
sudo apt-get install elasticsearch kibana三、配置 Elasticsearch
默认情况下,Elasticsearch 已经启用安全功能(用户名/密码认证),你可以通过浏览器访问:
http://<your-es-ip>:9200使用 elastic 用户登录后,可创建角色和用户用于 Filebeat 接入。
四、启动 Kibana 并配置
访问 Kibana Web UI:
http://<your-kibana-ip>:5601首次登录需设置用户名和密码。进入后可执行以下操作:
查看索引管理(Index Management)
创建仪表盘(Dashboard)
配置可视化图表(Visualize)
使用 Dev Tools 执行 DSL 查询语句
五、在目标机器上安装 Filebeat 收集日志
步骤 1:安装 Filebeat
Ubuntu/Debian:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.3-amd64.deb
sudo dpkg -i filebeat-8.11.3-amd64.debCentOS/Rocky Linux:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.3-x86_64.rpm
sudo rpm -vi filebeat-8.11.3-x86_64.rpm步骤 2:配置 Filebeat 输出到 Elasticsearch
编辑配置文件 /etc/filebeat/filebeat.yml:
output.elasticsearch:
hosts: ["http://<elasticsearch-ip>:9200"]
username: "elastic"
password: "<your-elastic-password>"步骤 3:启用系统日志模块(可选)
sudo filebeat modules enable system你也可以自定义日志路径,例如收集 Nginx 日志:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log步骤 4:启动 Filebeat
sudo systemctl start filebeat
sudo systemctl enable filebeat六、验证日志是否成功上传
登录 Kibana;
进入 Stack Management > Data Streams;
查看是否有新的数据流生成(如
logs-system.auth-default);进入 Discover 页面,选择对应索引模式,查看日志内容。
5. 什么是分片?什么是副本
一、什么是分片(Sharding)?
定义:
分片是指将一个大的数据集按照某种规则(如哈希、范围、列表等)拆分成多个小的数据集,并将这些小数据集分布到不同的节点上进行存储和处理。
目的:
提高系统的横向扩展能力
减少单个节点的数据量,提升查询效率
实现负载均衡
应用场景:
数据库:MySQL 分库分表、MongoDB Sharding
搜索引擎:Elasticsearch 的索引分片
消息队列:Kafka 的 Topic 分区(Partition)
示例:
以 Kafka 为例:
一个 Topic 可以分为多个 Partition(即分片);
每个 Partition 是一个有序的日志文件;
Producer 写入时可以根据 Key 哈希决定写入哪个 Partition;
Consumer 也可以并行消费多个 Partition。
二、什么是副本(Replication)?
定义:
副本是指将同一份数据复制多份,分别存储在不同的节点上,以实现容错、高可用、读写分离等功能。
目的:
数据冗余,防止单点故障
提升系统的可用性和可靠性
支持读写分离,提高并发能力
应用场景:
数据库:主从复制(Master-Slave Replication)
分布式存储:HDFS 多副本机制
消息队列:Kafka 的副本机制(ISR - In-Sync Replica)
搜索引擎:Elasticsearch 的副本机制
示例:
以 Elasticsearch 为例:
每个索引可以配置多个副本(Replica);
主分片(Primary Shard)负责写操作;
副本分片(Replica Shard)同步主分片的数据,提供读操作支持;
如果主分片宕机,副本可被选举为新的主分片,保障服务不中断。
6. es集群中分片和副本是自动分配的,还是需要手动指定
在 Elasticsearch(ES) 集群中,分片和副本的分配方式取决于索引创建时的配置。它们可以是自动分配的,也可以是手动指定的。
一、分片(Shard)的分配方式
1. 主分片(Primary Shard)
必须在索引创建时手动指定;
一旦设定,不能更改数量(除非使用 reindex);
2. 副本分片(Replica Shard)
可以动态调整,即索引创建后仍可修改;
默认为
1,表示每个主分片有一个副本;
二、分片与副本的分配策略
Elasticsearch 默认会根据以下机制自动分配分片和副本:
Elasticsearch 如何自动分配副本?
根据节点负载、磁盘空间、拓扑结构等自动选择合适节点;
如果某个主分片所在节点宕机,集群会从其副本中选举一个新的主分片;
7. 在kibana中如何筛选查看日志
一、进入“Discover”页面
登录 Kibana Web UI;
在左侧菜单点击 "Discover";
选择你要查询的日志索引(如
logs-*,filebeat-*);
如果你没有看到数据,请检查:
Elasticsearch 是否接收到日志;
Filebeat 是否正常运行;
索引模式是否匹配(如
filebeat-*);
二、基本筛选方式
1. 时间范围筛选
右上角有时间选择器,默认显示最近15分钟的数据;
可自定义时间范围,例如:过去1小时、今天、昨天、指定时间段等;
支持快捷选项(如 Last 1 hour, Today, Absolute range);
2. 关键词搜索
在搜索框中输入关键词或短语进行过滤;
支持 Lucene 查询语法,例如:
status:200 AND method:"GET"可使用字段名 + 冒号进行精准过滤:
host.name:"server01" AND log.level:"ERROR"三、高级筛选方式
1. 字段过滤面板
左侧为字段列表(如
@timestamp,message,log.level,host,source等);点击任意字段值(如某个 IP 地址、错误等级)即可快速筛选;
可多选多个值进行组合过滤;
2. 添加筛选条件
点击 “Add filter” 添加自定义筛选规则;
支持字段名、运算符(=, !=, >, <, exists 等)、值;
示例:
log.level = "ERROR"http.status >= 400source = "/var/log/app.log"
四、使用 KQL(Kibana Query Language)
KQL 是 Kibana 的新查询语言,更简洁直观。
示例:
status : 200
method : "POST"
log.level : "ERROR"五、保存筛选条件
点击右上角 “Save” 按钮,可以将当前筛选条件保存为视图;
下次可直接加载该视图继续分析;
也可将筛选条件保存到 Dashboard 中用于可视化展示。
六、导出日志数据
点击 “Share” → “CSV reports”;
可导出当前查询结果为 CSV 文件;
支持设置最大行数(默认 10,000 条);
七、结合可视化组件(Visualize)
点击左侧菜单 "Visualize Library";
创建柱状图、折线图、饼图等图表;
使用与 Discover 相同的筛选条件;
将多个图表加入 Dashboard 实现综合分析。
8. 除了elk之外还有哪些流行的日志管理解决方案
9. es高可用集群至少需要几个节点
一、基本概念
1. 主分片(Primary Shard)
每个索引必须至少有一个主分片;
主分片不能与副本部署在同一个节点上(默认规则);
2. 副本分片(Replica Shard)
提供数据冗余,提升可用性;
可动态调整数量;
3. 主节点(Master Node)
负责集群元数据管理(如分片分配、节点加入/离开等);
在高可用集群中建议使用专用主节点;
4. 数据节点(Data Node)
存储实际数据(分片);
执行搜索、聚合等操作;
二、不同高可用级别的最小节点数
10. 什么是主节点、数据节点、协调节点
一、主节点(Master Node)
定义:
主节点是集群的“大脑”,负责管理集群的元数据(metadata),如索引创建、分片分配、节点加入/离开等;
不负责存储数据或执行搜索任务。
核心职责:
特点:
轻量级,不处理数据;
建议使用专用主节点(避免与其他角色混合);
生产环境中建议至少部署 3 个主节点以实现高可用;
配置方式(elasticsearch.yml):
node.roles: [ master ]
二、数据节点(Data Node)
定义:
数据节点是集群中真正存储数据的节点;
负责数据的读写操作,包括索引写入、搜索、聚合等。
核心职责:
特点:
资源消耗较高(CPU、内存、磁盘 I/O);
可根据负载扩展多个数据节点;
建议与主节点分离部署;
配置方式(elasticsearch.yml):
node.roles: [ data ]
三、协调节点(Coordinating Node)
定义:
协调节点也被称为“负载均衡节点”或“Client Node”,它本身不存储数据,也不参与集群管理;
仅用于接收客户端请求,并将请求转发到合适的数据节点上。
核心职责:
特点:
不存储数据,不参与分片分配;
可作为反向代理或负载均衡器使用;
适合高并发场景下提升性能;
配置方式(elasticsearch.yml):
node.roles: [ coordinating ]
11. 等保三级要求日志保存多长时间
一、等保三级对日志保存时间的要求
根据 GB/T 22239-2019 中的“安全审计”部分:
日志记录应至少保留 6 个月以上,并保证审计数据的完整性与可用性。