1. ELK是什么,ELFK是什么,主要使用场景是什么

一、什么是 ELK?

ELK 是三个开源工具的缩写,主要用于日志的收集、分析与可视化:

工具

全称

核心功能

Elasticsearch

Elasticsearch

分布式搜索引擎,用于存储和检索日志数据

Logstash

Logstash

数据处理管道,支持过滤、解析、转换日志格式

Kibana

Kibana

可视化平台,提供 Web UI 展示日志分析结果


二、什么是 ELFK?

ELFK 是在 ELK 基础上加入了一个新的组件 FluentdFilebeat,用于替代 Logstash 的轻量级日志采集器。

工具

全称

核心功能

Elasticsearch

Elasticsearch

存储和检索日志数据

Logstash(或 Filebeat/Fluentd)

Logstash / Filebeat / Fluentd

日志采集、转发

Kibana

Kibana

提供 Web 界面进行日志查询和展示

F(可选)Fluentd / Filebeat

Fluentd / Filebeat

轻量级日志采集工具,常用于资源受限环境

ELK vs ELFK 对比

  • ELK 更适合传统服务器部署,Logstash 功能强大但资源消耗高;

  • ELFK 更适合云原生、Kubernetes、容器化等场景,使用 Filebeat 或 Fluentd 替代 Logstash 实现轻量采集。

ELK / ELFK 的主要使用场景

场景

说明

应用日志集中管理

收集来自多个服务、Pod、容器的日志统一分析

错误追踪与故障排查

快速查找异常日志、堆栈信息、错误频率统计

安全审计与合规性分析

分析登录失败、权限变更、API 访问记录等

性能监控与趋势分析

结合 Prometheus 进行日志 + 指标双维度分析

Kubernetes 日志采集

在 K8s 中使用 Filebeat/Fluentd 收集容器日志

业务数据分析

如用户行为日志、订单状态、支付流水等日志分析


2. ELFK分别是使用什么语言开发的

组件

开发语言

说明

Elasticsearch

Java

基于 JVM 的分布式搜索引擎,用于日志存储与检索

Logstash(可替换)

JRuby + Java

数据处理管道,常用于日志解析、转换

Kibana

Node.js(后端)、TypeScript/JavaScript(前端)

提供可视化界面,支持 Dashboard 和查询分析

Filebeat / Fluentd(ELFK 中的核心采集器)

Go(Filebeat)

Ruby(Fluentd)

Filebeat 是 Elastic 官方轻量采集器;Fluentd 是 CNCF 项目,广泛用于 Kubernetes


3. 为什么要使用Filebeat 来替换Logstash

为什么要使用 Filebeat 来替换 Logstash?

在 ELFK(Elasticsearch、Logstash、Kibana、Filebeat)架构中,Filebeat 是 Logstash 的轻量级替代方案,主要用于日志采集和转发。以下是从多个维度分析为何选择 Filebeat 替代 Logstash 的原因:


1. 资源占用低

工具

内存占用

CPU 使用率

Logstash

高(依赖 JVM)

较高(插件多,处理复杂)

Filebeat

极低(Go 编写,无 JVM)

极低(仅转发日志)

  • Logstash 是基于 JRuby 和 Java 的应用,需要运行在 JVM 上,内存和 CPU 消耗较高;

  • Filebeat 是用 Go 语言编写的原生程序,资源消耗极低,适合部署在容器、边缘节点等资源受限环境。


2. 启动速度快

工具

启动时间

Logstash

数十秒甚至更久(需加载插件、初始化 JVM)

Filebeat

几秒内即可启动

  • Filebeat 无需 JVM 初始化,几乎立即可用;

  • Logstash 启动慢,尤其在插件较多或配置复杂时更为明显。


3. 适用于云原生与 Kubernetes 环境

场景

Logstash

Filebeat

容器化部署

不推荐(资源占用高)

推荐

Kubernetes DaemonSet

不适用

最佳实践

微服务日志采集

复杂且重

轻量高效

  • Filebeat 支持自动发现机制(如 Kubernetes Autodiscover),可动态识别新 Pod 并采集日志;

  • Logstash 更适合集中式日志处理中心,不适合每个节点都部署。


4. 功能定位不同:轻量 vs 全能

功能

Logstash

Filebeat

日志采集

日志解析(Grok、JSON)

是 强大

是 基本支持

过滤器插件

是 丰富(正则、字段提取等)

有限

数据转换

是 可做复杂处理

仅支持基础操作

性能开销

极低

  • Logstash 是一个完整的日志处理管道,适合做复杂的日志清洗和转换;

  • Filebeat 主要用于采集和转发日志,处理逻辑简单,性能开销小。


5. 部署维护更简单

工具

安装方式

插件管理

维护难度

Logstash

复杂(需安装 JVM + 插件)

插件需单独安装更新

Filebeat

简单(二进制或包管理器安装)

无插件依赖

  • Filebeat 配置简单,只需指定日志路径和输出地址即可;

  • Logstash 需要编写 Pipeline 配置文件,涉及输入、过滤、输出三部分,维护成本高。


6. 更适合现代架构的扩展性

场景

Logstash

Filebeat

大规模日志采集

否 资源瓶颈明显

是 可大规模部署

与 Elasticsearch 集成

与 Kafka 集成

与 Prometheus 集成

否 不推荐

是 支持 Metricbeat 扩展

  • Filebeat 可配合 Metricbeat 实现指标+日志双采集;

  • Logstash 更适合作为日志处理中枢,而非分布式采集节点。


7. ELK 生态官方推荐

  • Elastic 官方推荐在大多数场景下使用 Filebeat 替代 Logstash 作为日志采集器

  • Logstash 保留用于集中式日志处理层,用于执行高级转换、聚合等任务;

  • Filebeat 用于边缘采集,负责将日志从各个节点转发到 Logstash 或 Elasticsearch。


4. 搭建es和Kibana服务,再到要收集日志的机器上搭建Filebeat 来收集日志

一、环境准备

组件

版本建议

操作系统

Ubuntu 20.04/22.04 或 CentOS 7+/Rocky Linux

Elasticsearch

最新稳定版(如 v8.11.x)

Kibana

最新稳定版(与 ES 对应版本)

Filebeat

最新稳定版(如 v8.11.x)

网络要求

ES 与 Kibana 可互通;Filebeat 能访问 Elasticsearch


二、安装 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.deb

CentOS/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

六、验证日志是否成功上传

  1. 登录 Kibana;

  2. 进入 Stack Management > Data Streams

  3. 查看是否有新的数据流生成(如 logs-system.auth-default);

  4. 进入 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”页面

  1. 登录 Kibana Web UI;

  2. 在左侧菜单点击 "Discover"

  3. 选择你要查询的日志索引(如 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 >= 400

    • source = "/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)

  1. 点击左侧菜单 "Visualize Library"

  2. 创建柱状图、折线图、饼图等图表;

  3. 使用与 Discover 相同的筛选条件;

  4. 将多个图表加入 Dashboard 实现综合分析。


8. 除了elk之外还有哪些流行的日志管理解决方案

方案

核心组件

特点

适用场景

Loki + Promtail + Grafana

Loki(存储)、Promtail(采集)、Grafana(展示)

轻量级、低成本、与 Prometheus 生态集成好

Kubernetes、微服务、云原生

Graylog

Graylog Server、MongoDB、Elasticsearch

集成式日志平台,内置告警和分析功能

中小型企业、系统日志集中管理

Splunk

Splunk Enterprise / Cloud

强大的搜索、可视化和机器学习能力,商业化强

企业级日志分析、安全审计

Fluentd + Elasticsearch + Kibana(FEK)

Fluentd(采集)、Elasticsearch(存储)、Kibana(展示)

CNCF 项目,插件丰富,适合多语言环境

Kubernetes、边缘计算节点

OpenSearch + OpenSearch Dashboards

OpenSearch(存储+搜索)、OpenSearch Dashboards(展示)

Elasticsearch 的开源分支,兼容性高

企业替代 ELK、需长期维护

Sumo Logic

SaaS 服务

提供完整的日志收集、分析、监控、告警

无需自建平台的企业、SaaS 化部署

Datadog Logs

Datadog Agent、SaaS 平台

提供 APM、日志、指标一体化监控

云原生、混合云环境下的统一观测

AWS CloudWatch Logs

AWS CloudWatch + Agent

与 AWS 生态深度集成

AWS 用户的日志采集与分析

Aliyun SLS(日志服务)

LogHub、LogStore、Consumer Library

国内企业常用,支持实时消费、查询、告警

阿里云用户、国内业务系统


9. es高可用集群至少需要几个节点

一、基本概念

1. 主分片(Primary Shard)

  • 每个索引必须至少有一个主分片;

  • 主分片不能与副本部署在同一个节点上(默认规则);

2. 副本分片(Replica Shard)

  • 提供数据冗余,提升可用性;

  • 可动态调整数量;

3. 主节点(Master Node)

  • 负责集群元数据管理(如分片分配、节点加入/离开等);

  • 在高可用集群中建议使用专用主节点;

4. 数据节点(Data Node)

  • 存储实际数据(分片);

  • 执行搜索、聚合等操作;


二、不同高可用级别的最小节点数

高可用级别

最小节点数

说明

无高可用(单节点)

1

不具备故障恢复能力,不推荐用于生产环境

基础高可用(支持一个节点宕机)

2

每个主分片至少有一个副本,分布在不同节点

生产级高可用(支持两个节点宕机)

3

建议为奇数节点,可避免脑裂问题


10. 什么是主节点、数据节点、协调节点

一、主节点(Master Node)

定义:

  • 主节点是集群的“大脑”,负责管理集群的元数据(metadata),如索引创建、分片分配、节点加入/离开等;

  • 不负责存储数据或执行搜索任务。

核心职责:

职责

描述

管理集群状态(Cluster State)

包括索引信息、分片分布、节点列表等

控制分片分配

决定主分片和副本如何分布在不同节点上

处理集群变更请求

如添加/删除节点、修改副本数、索引设置等

参与选举机制

在集群启动或主节点宕机时进行 Leader 选举

特点:

  • 轻量级,不处理数据;

  • 建议使用专用主节点(避免与其他角色混合);

  • 生产环境中建议至少部署 3 个主节点以实现高可用;

配置方式(elasticsearch.yml):

node.roles: [ master ]


二、数据节点(Data Node)

定义:

  • 数据节点是集群中真正存储数据的节点;

  • 负责数据的读写操作,包括索引写入、搜索、聚合等。

核心职责:

职责

描述

存储主分片和副本分片

实际保存 Elasticsearch 的文档数据

执行索引和搜索操作

对接客户端请求,执行 CRUD 操作

分片重平衡

当节点加入或离开时自动调整分片分布

执行聚合查询

支持复杂的数据分析和统计功能

特点:

  • 资源消耗较高(CPU、内存、磁盘 I/O);

  • 可根据负载扩展多个数据节点;

  • 建议与主节点分离部署;

配置方式(elasticsearch.yml):

node.roles: [ data ]


三、协调节点(Coordinating Node)

定义:

  • 协调节点也被称为“负载均衡节点”或“Client Node”,它本身不存储数据,也不参与集群管理;

  • 仅用于接收客户端请求,并将请求转发到合适的数据节点上。

核心职责:

职责

描述

接收客户端请求

如 REST API、Kibana 查询、Logstash 输入

请求路由

将请求分发到正确的主分片或副本分片

合并结果

收集多个数据节点返回的结果并统一返回给客户端

负载均衡

分散请求压力,防止数据节点过载

特点:

  • 不存储数据,不参与分片分配;

  • 可作为反向代理或负载均衡器使用;

  • 适合高并发场景下提升性能;

配置方式(elasticsearch.yml):

node.roles: [ coordinating ]


11. 等保三级要求日志保存多长时间

一、等保三级对日志保存时间的要求

根据 GB/T 22239-2019 中的“安全审计”部分:

日志记录应至少保留 6 个月以上,并保证审计数据的完整性与可用性。

具体要求如下:

要求项

内容

日志留存时间

不少于 6个月

日志内容范围

应包括用户行为、系统操作、登录登出、访问控制、安全事件等关键信息

日志完整性

日志不得被非法篡改或删除

日志可追溯性

支持按时间、用户、事件类型等条件进行查询和审计

日志存储安全性

需采取措施防止日志被非法访问或篡改


以他人的幸福为幸福,以他人的享乐为享乐。