【日志管理】ELK日志系统详解
·
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) | 轻量采集器 | 低开销、可靠传输 |
更多推荐


所有评论(0)