1. ELK 日志分析系统简介

ELK 是由 Elasticsearch、Logstash、Kibana 三个开源工具组成的日志收集、存储、分析与可视化平台,广泛应用于分布式系统的日志集中管理、故障排查、安全审计和业务监控。

  • 核心价值:

    • 集中化管理分散在各服务器上的日志
  • 实时搜索与分析海量日志数据

    • 通过可视化图表快速定位问题
    • 支持告警、报表、机器学习等高级功能

适用场景:微服务架构、容器化环境(如 Kubernetes)、Web 应用、安全日志分析等。


2. Elasticsearch 介绍

Elasticsearch(简称 ES)是一个基于 Lucene 的分布式、RESTful 风格的 搜索引擎和文档数据库,专为全文检索、结构化搜索和分析而设计。

核心特性:

  • 分布式架构:支持水平扩展,自动分片(Shard)与副本(Replica)
  • 近实时搜索:数据写入后约 1 秒可被搜索到
  • JSON 文档存储:无 Schema 约束,灵活适应日志格式变化
  • 高可用:节点故障自动恢复,数据多副本保障
  • 聚合分析:支持统计、分组、时间序列等复杂分析

基本概念:

概念 类比关系型数据库 说明
Index(索引) Database 一类文档的集合,如 nginx-access-2025.11
Type(类型) Table(7.x 后废弃) 6.x 及以前用于区分文档类型
Document(文档) Row 一条 JSON 格式的日志记录
Field(字段) Column 文档中的一个属性

注意:从 Elasticsearch 7.0 起,Type 被移除,一个 Index 只对应一种文档结构。


3. Logstash 介绍

Logstash 是一个 数据采集、转换与传输管道(ETL 工具),负责从各种来源收集日志,进行过滤、解析、丰富后,输出到 Elasticsearch 或其他目的地。

核心组件(Pipeline):

input { ... }    # 输入源:文件、syslog、Kafka、Beats 等
filter { ... }   # 过滤器:解析日志、提取字段、转换格式
output { ... }   # 输出目标:Elasticsearch、文件、邮件等

常用插件示例:

# 输入:监听 Nginx 日志文件
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
  }
}

# 过滤:使用 grok 解析日志格式
filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}
# 输出:发送到 ES
output {
  elasticsearch {
    hosts => ["http://es-node:9200"]
    index => "nginx-access-%{+YYYY.MM.dd}"
  }
}

优点:

  • 插件生态丰富(300+ 官方插件)
  • 强大的日志解析能力(Grok、GeoIP、Mutate 等)
  • 支持缓冲与持久化,防止数据丢失

缺点:资源消耗较大(JVM 应用),轻量级场景可考虑 Filebeat 替代。


4. Kibana 介绍

Kibana 是 Elasticsearch 的 官方可视化前端,提供 Web 界面用于:

  • 搜索和浏览日志数据
  • 创建仪表盘(Dashboard)
  • 绘制图表(柱状图、折线图、地图等)
  • 设置告警(Alerting)
  • 管理 ES 集群(Dev Tools、Index Management)

核心功能模块:

  • Discover:交互式日志查询与筛选
  • Visualize:创建各类图表
  • Dashboard:组合多个图表形成监控面板
  • Lens:拖拽式快速分析(低代码)
  • Machine Learning:异常检测(需 X-Pack)

优势:开箱即用,与 ES 深度集成,学习成本低。


5. 部署 ELK 日志分析系统(单节点示例)

环境:CentOS 7 / Ubuntu 20.04,内存 ≥ 4GB

步骤 1:安装 Java(ES 和 Logstash 依赖)

yum install java-11-openjdk -y

步骤 2:安装 Elasticsearch

# 添加官方仓库
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch]
name=Elasticsearch repository
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# 安装并启动
yum install elasticsearch -y
systemctl enable --now elasticsearch

步骤 3:安装 Logstash

1yum install logstash -y
2# 编写配置文件 /etc/logstash/conf.d/nginx.conf(见上文示例)
3systemctl enable --now logstash

步骤 4:安装 Kibana

1yum install kibana -y
2# 修改 /etc/kibana/kibana.yml
3server.host: "0.0.0.0"
4elasticsearch.hosts: ["http://localhost:9200"]
5
6systemctl enable --now kibana

步骤 5:访问 Kibana

浏览器打开 http://<服务器IP>:5601,首次使用需设置密码(若启用安全功能)。


6. ELK 工作原理

[日志源] 
   ↓ (File, Syslog, TCP等)
[Logstash] 
   → input: 收集日志
   → filter: 解析、清洗、结构化(如提取 IP、状态码、URL)
   → output: 发送到 Elasticsearch
   ↓
[Elasticsearch] 
   → 存储为 JSON 文档
   → 建立倒排索引,支持全文检索
   → 分片与副本保障高可用
   ↓
[Kibana] 
   → 通过 REST API 查询 ES 数据
   → 渲染为图表/表格/地图
   → 用户交互式分析

关键点:Logstash 将非结构化日志(如文本)转化为结构化 JSON,使 ES 能高效索引和查询。


7. ELFK 部署

为什么需要 Filebeat?

  • Logstash 资源消耗大,不适合部署在每台应用服务器
  • Filebeat 是轻量级日志采集器(Go 编写,内存占用 < 50MB)
  • 支持背压敏感(backpressure-sensitive),避免压垮下游

ELFK 架构:

[应用服务器] 
   → Filebeat(采集日志,轻量级)
        ↓
[Logstash](集中处理:解析、过滤、丰富)
        ↓
[Elasticsearch] ←→ [Kibana]

部署步骤:

(1)在应用服务器安装 Filebeat
1yum install filebeat -y
(2)配置 Filebeat(/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: filestream
  paths:
    - /var/log/nginx/access.log

output.logstash:
  hosts: ["logstash-server:5044"]
(3)在 Logstash 配置接收 Filebeat 输入
# /etc/logstash/conf.d/beats.conf
input {
  beats {
   port => 5044
  }
}

filter {
  if [log][file][path] =~ "nginx/access" {
    grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
  }
}

output {
  elasticsearch {
    hosts => ["http://es:9200"]
    index => "nginx-access-%{+YYYY.MM.dd}"
  }
}
(4)启动 Filebeat
1systemctl enable --now filebeat

ELFK 优势

  • 采集端轻量,不影响业务
  • 处理逻辑集中在 Logstash,便于维护
  • 支持断点续传,网络中断不丢数据

总结

组件 角色 关键能力
Elasticsearch 存储与搜索引擎 分布式、近实时、全文检索
Logstash 数据处理管道 日志解析、转换、丰富
Kibana 可视化界面 图表、仪表盘、告警
Filebeat(ELFK) 轻量采集器 低开销、可靠传输
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐