文章目录
- 一、ELK日志分析系统简介
-
- [1.1 ELK概述](#1.1 ELK概述)
-
- [1.1.1 核心组件角色](#1.1.1 核心组件角色)
- [1.1.2 应用场景](#1.1.2 应用场景)
- 二、Elasticsearch介绍
-
- [2.1 核心功能](#2.1 核心功能)
- [2.2 架构与组件](#2.2 架构与组件)
- [2.3 使用场景](#2.3 使用场景)
- [2.4 特点与缺点](#2.4 特点与缺点)
-
- [2.4.1 优点](#2.4.1 优点)
- [2.4.2 缺点](#2.4.2 缺点)
- 三、Logstash介绍
-
- [3.1 主要特点](#3.1 主要特点)
-
- [3.1.1 数据收集](#3.1.1 数据收集)
- [3.1.2 数据处理](#3.1.2 数据处理)
- [3.1.3 数据输出](#3.1.3 数据输出)
- [3.1.4 可扩展性](#3.1.4 可扩展性)
- [3.1.5 实时处理](#3.1.5 实时处理)
- [3.2 使用场景](#3.2 使用场景)
- [3.3 其他数据收集组件](#3.3 其他数据收集组件)
-
- [3.3.1 Filebeat](#3.3.1 Filebeat)
-
- [3.3.1.1 Filebeat结合Logstash的优势](#3.3.1.1 Filebeat结合Logstash的优势)
- [3.3.2 Fluentd](#3.3.2 Fluentd)
- [3.3.3 缓存/消息队列](#3.3.3 缓存/消息队列)
- 四、Kibana介绍
-
- [4.1 主要功能](#4.1 主要功能)
- [4.2 使用场景](#4.2 使用场景)
- [4.3 工作原理](#4.3 工作原理)
- 五、使用ELK的原因
-
- [5.1 日志的作用](#5.1 日志的作用)
- [5.2 传统日志管理的弊端](#5.2 传统日志管理的弊端)
- [5.3 ELK的优势](#5.3 ELK的优势)
- 六、完整日志系统基本特征
- 七、ELK的工作原理
- 八、部署ELK日志分析系统
-
- [8.1 部署环境](#8.1 部署环境)
- [8.2 环境准备](#8.2 环境准备)
-
- [8.2.1 关闭防火墙与增强功能](#8.2.1 关闭防火墙与增强功能)
- [8.2.2 更改主机名](#8.2.2 更改主机名)
- [8.2.4 安装Java环境](#8.2.4 安装Java环境)
- [8.3 Elasticsearch集群部署(Node1、Node2节点操作)](#8.3 Elasticsearch集群部署(Node1、Node2节点操作))
-
- [8.3.1 部署Elasticsearch软件](#8.3.1 部署Elasticsearch软件)
- [8.3.2 安装Elasticsearch-head插件](#8.3.2 安装Elasticsearch-head插件)
- [8.4 Logstash部署(Apache节点操作)](#8.4 Logstash部署(Apache节点操作))
-
- [8.4.1 环境准备](#8.4.1 环境准备)
- [8.4.2 安装Logstash](#8.4.2 安装Logstash)
- [8.4.3 测试Logstash](#8.4.3 测试Logstash)
- [8.4.4 配置Logstash收集系统日志](#8.4.4 配置Logstash收集系统日志)
- [8.4.5 配置Logstash收集Apache日志](#8.4.5 配置Logstash收集Apache日志)
- [8.5 Kibana部署(Node1节点操作)](#8.5 Kibana部署(Node1节点操作))
-
- [8.5.1 安装Kibana](#8.5.1 安装Kibana)
- [8.5.2 配置Kibana](#8.5.2 配置Kibana)
- [8.5.3 启动Kibana](#8.5.3 启动Kibana)
- [8.5.4 验证Kibana](#8.5.4 验证Kibana)
- 九、Filebeat+ELK部署
-
- [9.1 部署环境](#9.1 部署环境)
- [9.2 Filebeat部署(Filebeat节点操作)](#9.2 Filebeat部署(Filebeat节点操作))
- [9.3 Logstash配置(Apache节点操作)](#9.3 Logstash配置(Apache节点操作))
- [9.4 Kibana配置(Node1节点操作)](#9.4 Kibana配置(Node1节点操作))
一、ELK日志分析系统简介
1.1 ELK概述
ELK平台是一套完整的日志集中处理解决方案,由Elasticsearch、Logstash、Kibana三个开源工具组成,用于数据收集、存储、搜索和可视化分析,满足用户对日志的查询、排序、统计需求。
1.1.1 核心组件角色
- Elasticsearch:核心搜索和分析引擎,负责存储数据并提供快速全文搜索、分析功能。
- Logstash:数据收集和处理管道,收集多源数据并过滤、转换,再发送至Elasticsearch。
- Kibana:数据可视化工具,提供图形界面展示、分析Elasticsearch中的数据,支持创建图表和仪表板。
1.1.2 应用场景
适用于日志分析、监控、数据可视化等场景,可帮助用户从多数据源收集数据,实现快速搜索、分析和可视化。
二、Elasticsearch介绍
Elasticsearch是基于Lucene开发的分布式存储检索引擎,用Java开发,支持RESTful Web接口,是实时、分布式、可扩展的搜索引擎,适用于索引和搜索大容量日志数据及各类文档。
2.1 核心功能
- 全文搜索:快速全文索引和搜索,适用于复杂搜索场景。
- 实时数据分析:支持数据实时更新和查询,适配日志分析、监控数据实时处理。
- 分布式架构:跨集群数据存储和检索,扩展性、性能优势显著。
- RESTful API:通过HTTP接口支持多语言、多平台集成。
2.2 架构与组件
- 集群(Cluster):由一个或多个节点组成,节点协同工作、共享数据和负载。
- 节点(Node):Elasticsearch单个实例,有主节点、数据节点等角色,负责存储数据和处理查询。
- 索引(Index):类似传统数据库的表,包含数据集,有唯一名称。
- 文档(Document):最小数据单元,JSON格式对象,存储在索引中。
- 分片(Shard):索引的分割单元,每个分片是Lucene索引,提供数据分布和并行处理能力。
- 副本(Replica):分片的冗余备份,提升系统容错能力。
2.3 使用场景
- 日志和事件数据分析:处理大规模日志、事件流数据,常与Logstash、Kibana组成ELK Stack。
- 全文搜索应用:电商产品搜索、社交媒体内容搜索等。
- 监控和报警系统:与Kibana结合实现数据可视化和实时监控。
- 商业智能(BI):支持复杂数据查询和分析,助力企业获取数据洞察。
2.4 特点与缺点
2.4.1 优点
- 高性能:基于Lucene,全文搜索和分析操作性能优越。
- 易扩展:分布式架构支持集群随数据量增长轻松扩展。
- 灵活性强:支持多种数据类型和复杂查询语法,适配不同应用需求。
- 开放源代码:免费且有活跃社区支持,可自由定制和扩展。
2.4.2 缺点
- 资源消耗:内存密集型应用,处理大量数据时对硬件资源要求高。
- 学习曲线:集成简单,但理解复杂查询DSL和架构需一定时间。
- 管理复杂性:大型分布式集群环境中,管理和调优需专业知识。
三、Logstash介绍
Logstash是数据收集引擎,由Ruby语言编写、运行在JVM上,支持从多数据源收集数据,经过滤、分析、格式化等处理后,发送至存储或分析系统(如Elasticsearch),插件功能强大,常用于日志处理。
3.1 主要特点
3.1.1 数据收集
- 支持日志文件、数据库、消息队列等多种数据源。
- 提供多种输入插件,可从不同系统或服务提取数据。
3.1.2 数据处理
- 通过过滤器插件实现数据清洗、格式转换、字段解析等操作。
- 支持正则表达式解析、日期转换、字段拆分和合并等丰富处理功能。
3.1.3 数据输出
- 处理后的数据可发送至Elasticsearch、关系型数据库、消息队列、文件系统等多种目标。
- 输出插件灵活,可与各类系统集成。
3.1.4 可扩展性
- 架构支持通过输入、过滤、输出、编码等插件轻松扩展和自定义。
3.1.5 实时处理
- 支持实时数据处理,适用于实时日志监控、数据流分析等场景。
3.2 使用场景
- 日志收集和分析:提取系统日志、应用日志等数据,发送至Elasticsearch集中分析监控。
- 数据转换:数据进入目标存储前,进行清理、格式化和标准化处理。
- 数据流整合:汇聚多源数据至统一平台,支撑后续分析和决策。
3.3 其他数据收集组件
3.3.1 Filebeat
- 轻量级开源日志文件数据搜集器,在客户端安装,指定目录与日志格式即可快速收集数据,可发送至Logstash或直接发送至Elasticsearch,性能优于Logstash,适用于EFLK架构。
3.3.1.1 Filebeat结合Logstash的优势
- Logstash的磁盘自适应缓冲系统可吸收传入吞吐量,减轻Elasticsearch写入压力。
- 支持从数据库、S3对象存储、消息传递队列等其他数据源提取数据。
- 可将数据发送至S3、HDFS、文件等多个目的地。
- 支持条件数据流逻辑,组成复杂处理管道。
3.3.2 Fluentd
- 开源数据收集器,因Logstash重量级、性能低、资源消耗多而出现,更易用、资源消耗少、性能高,数据处理高效可靠,是Logstash的替代方案,适用于EFK架构,在Kubernetes集群中常通过DaemonSet运行,收集容器日志并传递至Elasticsearch。
3.3.3 缓存/消息队列
- 如Redis、Kafka、RabbitMQ等,可对高并发日志数据进行流量削峰和缓冲,保护数据不丢失,实现架构解耦。
四、Kibana介绍
Kibana通常与Elasticsearch一同部署,是Elasticsearch的强大数据可视化仪表盘,提供图形化Web界面,用于浏览、汇总、分析和搜索Elasticsearch中的日志数据,具备交互式仪表盘、图表和报告功能。
4.1 主要功能
以下是Kibana核心功能的表格概览:
| 功能模块 | 核心能力 |
|---|---|
| 数据可视化 | 折线图、饼图、柱状图、地图,支持自定义样式和动态交互 |
| 仪表板 | 多图表聚合,支持交互式过滤器和实时数据更新 |
| 日志管理与搜索 | 支持KQL/Lucene查询语言,实时搜索与过滤原始日志数据 |
| 时间序列分析 | TSVB工具创建时间序列图表,监控性能与趋势 |
| 报警与监控 | 阈值触发报警,集成Elasticsearch/Logstash,支持多通知渠道 |
| 安全和访问控制 | 角色权限管理,支持LDAP/OAuth等外部认证 |
| 机器学习 | 异常检测、趋势预测、自动模式识别,与Elastic Stack集成 |
| 地图和地理可视化 | Elastic Maps展示地理数据,支持动态过滤与聚合 |
| Canvas和报告 | 自定义可视化报告设计,自动生成PDF/CSV格式 |
| 监控 | 集群/管道健康状态、性能及资源使用监控 |
4.2 使用场景
以下是Elasticsearch主要应用场景的表格总结:
| 应用场景 | 核心功能 | 适用角色 |
|---|---|---|
| 日志管理与分析 | 集中管理日志、故障诊断、应用状态监控 | 开发者、运维工程师 |
| 实时监控 | 仪表板展示、性能指标报警、异常响应 | 运维团队、SRE工程师 |
| 业务数据分析 | 销售/用户行为分析、商业决策支持 | 数据分析师、企业管理者 |
| 安全分析与威胁检测 | 安全日志分析、入侵检测、集成Elastic Security | 安全工程师、SOC团队 |
| 机器学习与数据预测 | 趋势预测、异常检测、金融/系统监控场景应用 | 数据科学家、运维分析师 |
4.3 工作原理
- 数据存储:Kibana不存储数据,数据源为Elasticsearch,数据可通过Logstash、Beats、API等方式存储至Elasticsearch。
- 查询和分析:用户在Kibana中通过KQL或Lucene查询语法执行查询,Kibana向Elasticsearch发送查询请求。
- 数据可视化和展示:Elasticsearch返回查询结果后,Kibana通过图表、地图、仪表盘等工具展示数据。
五、使用ELK的原因
5.1 日志的作用
日志包括系统日志、应用程序日志和安全日志,运维和开发人员可通过日志了解服务器软硬件信息、排查配置错误及原因,分析服务器负荷、性能和安全性,及时纠正错误。
5.2 传统日志管理的弊端
- 单台机器日志可通过grep、awk等工具简单分析,但多设备分散存储时,依次登录查阅效率低下。
- 集中化管理日志后,传统Linux命令(grep、awk、wc等)难以满足复杂查询、排序、统计需求,尤其面对大量服务器时力不从心。
- 分布式部署架构中,问题定位需关键信息匹配服务器和服务模块,传统方式效率低。
5.3 ELK的优势
构建集中式日志系统,实现日志集中收集、存储、分析和可视化,大幅提高问题定位效率,满足复杂查询和统计需求。
六、完整日志系统基本特征
- 收集:采集多种来源的日志数据。
- 传输:稳定解析、过滤日志数据并传输至存储系统。
- 存储:安全存储日志数据。
- 分析:支持UI分析功能。
- 警告:提供错误报告和监控机制。
七、ELK的工作原理
- 在需收集日志的服务器或日志服务器上部署Logstash。
- Logstash收集日志,格式化后输出至Elasticsearch集群。
- Elasticsearch对格式化数据进行索引和存储。
- Kibana从Elasticsearch集群查询数据,生成图表并前端展示。
八、部署ELK日志分析系统
8.1 部署环境
| 配置与名称 | IP | 服务 |
|---|---|---|
| Node1 节点(2C/4G) | node1/192.168.10.13 | Elasticsearch(集群)、Kibana |
| Node2 节点(2C/4G) | node2/192.168.10.14 | Elasticsearch(集群) |
| Apache 节点 | apache/192.168.10.15 | Logstash、Apache |
官方网站(中文):https://www.elastic.co/cn/downloads/
8.2 环境准备
8.2.1 关闭防火墙与增强功能
bash
systemctl stop firewalld # 关闭防火墙
setenforce 0 # 关闭增强功能
8.2.2 更改主机名
bash
- Node1节点:
bash
hostnamectl set-hostname node1
- Node2节点:
bash
hostnamectl set-hostname node2
### 8.2.3 配置主机名与IP解析
```bash
vim /etc/hosts
添加以下内容:
192.168.10.13 node1
192.168.10.14 node2

8.2.4 安装Java环境
bash
yum -y install java
java -version # 验证安装,需为openjdk 1.8.0_131及以上版本

8.3 Elasticsearch集群部署(Node1、Node2节点操作)
8.3.1 部署Elasticsearch软件
- 上传elasticsearch-6.6.1.rpm至/opt目录,执行安装:
bash
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm

- 加载系统服务并设置开机自启:
bash
systemctl daemon-reload
systemctl enable elasticsearch.service
- 修改主配置文件:
bash
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
修改以下配置(取消对应注释并修改):
yaml
cluster.name: my-elk-cluster # 集群名字
node.name: node1 # Node1节点为node1,Node2节点为node2
path.data: /data/elk_data # 数据存放路径
path.logs: /var/log/elasticsearch/ # 日志存放路径
bootstrap.memory_lock: false # 启动时不锁定内存
network.host: 0.0.0.0 # 监听所有地址
http.port: 9200 # 默认监听端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] # 集群发现节点

- 创建数据存放路径并授权:
bash
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
- 启动服务并验证:
bash
systemctl start elasticsearch.service
netstat -antp | grep 9200 # 查看9200端口是否监听

- 浏览器验证:
-
访问http://192.168.10.13:9200(Node1)、http://192.168.10.14:9200(Node2)查看节点信息。
-

-
访问http://192.168.10.13:9200/_cluster/health?pretty 查看集群健康状态(status为green表示健康)。

8.3.2 安装Elasticsearch-head插件
- 编译安装Node.js:
bash
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
- 安装phantomjs:
bash
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

- 安装Elasticsearch-head:
bash
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

- 修改Elasticsearch主配置文件(开启跨域):
bash
vim /etc/elasticsearch/elasticsearch.yml
末尾添加:
yaml
http.cors.enabled: true # 开启跨域访问支持
http.cors.allow-origin: "*" # 允许所有域名访问

重启Elasticsearch:
bash
systemctl restart elasticsearch
- 启动elasticsearch-head服务:
bash
cd /usr/local/src/elasticsearch-head/
npm run start & # 后台启动
netstat -natp | grep 9100 # 查看9100端口监听
- 浏览器验证:
访问http://192.168.10.13:9100/,连接集群,集群健康值为green表示正常。 - 插入测试索引:
bash
curl -X PUT 'localhost:9200/index-demo1/test/1?pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
浏览器访问http://192.168.10.13:9100/查看索引信息。

8.4 Logstash部署(Apache节点操作)
8.4.1 环境准备
- 更改主机名:
bash
hostnamectl set-hostname apache
- 安装Apache服务:
bash
yum -y install httpd
systemctl start httpd
- 安装Java环境:
bash
yum -y install java
java -version

8.4.2 安装Logstash
- 上传logstash-6.6.1.rpm至/opt目录,执行安装:
bash
cd /opt
rpm -ivh logstash-6.6.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ # 创建软链接
8.4.3 测试Logstash
- 标准输入输出测试:
bash
logstash -e 'input { stdin{} } output { stdout{} }'
输入内容(如www.baidu.com),查看输出结果。

- 详细格式输出测试:
bash
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

输入内容,查看结构化输出。
- 输出至Elasticsearch测试:
bash
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'
输入内容后,访问http://192.168.10.13:9100/查看索引数据。

8.4.4 配置Logstash收集系统日志
- 创建配置文件:
bash
chmod +r /var/log/messages # 授予Logstash读取权限
vim /etc/logstash/conf.d/system.conf
添加以下内容:
yaml
input {
file {
path => "/var/log/messages" # 收集系统日志
type => "system"
start_position => "beginning" # 从日志开始处收集
}
}
output {
elasticsearch {
hosts => ["192.168.10.13:9200"] # Elasticsearch地址
index => "system-%{+YYYY.MM.dd}" # 索引格式
}
}

- 重启Logstash:
bash
systemctl restart logstash

8.4.5 配置Logstash收集Apache日志
- 创建配置文件:
bash
vim /etc/logstash/conf.d/apache_log.conf
添加以下内容:
yaml
input {
file {
path => "/etc/httpd/logs/access_log" # Apache访问日志
type => "access"
start_position => "beginning"
}
file {
path => "/etc/httpd/logs/error_log" # Apache错误日志
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}

- 启动配置:
bash
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf
8.5 Kibana部署(Node1节点操作)
8.5.1 安装Kibana
- 上传kibana-6.6.1-x86_64.rpm至/opt目录,执行安装:
bash
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm

8.5.2 配置Kibana
- 修改主配置文件:
bash
vim /etc/kibana/kibana.yml
修改以下配置(取消对应注释并修改):
yaml
server.port: 5601 # 默认监听端口
server.host: "0.0.0.0" # 监听所有地址
elasticsearch.hosts: ["http://192.168.10.13:9200"] # 连接Elasticsearch地址
kibana.index: ".kibana" # Elasticsearch中的.kibana索引
8.5.3 启动Kibana
bash
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601 # 查看5601端口监听

8.5.4 验证Kibana
- 浏览器访问http://192.168.10.13:5601,首次登录需添加索引:
- 进入Index Patterns→Create index Patterns,输入system-*,点击Next step。
- 选择Time Filter field name为@timestamp,点击Create index Patterns。
- 点击Discover查看日志数据。
- 添加Apache日志索引:
- 进入Management→Index Patterns→Create index Patterns,分别输入apache_access-和apache_error-,重复上述步骤创建索引。
- 在Discover中选择对应索引查看Apache日志数据。

九、Filebeat+ELK部署
9.1 部署环境
| 配置与名称 | IP | 服务 |
|---|---|---|
| Node1 节点(2C/4G) | node1/192.168.10.13 | Elasticsearch(集群)、Kibana |
| Node2 节点(2C/4G) | node2/192.168.10.14 | Elasticsearch(集群) |
| Apache 节点 | apache/192.168.10.15 | Logstash、Apache |
| Filebeat 节点 | filebeat/192.168.10.16 | Filebeat |
官方网站(中文下载):https://www.elastic.co/cn/downloads/beats/filebeat
9.2 Filebeat部署(Filebeat节点操作)
9.2.1 安装Filebeat(两种方式任选)
bash
Filebeat 国内镜像源加速下载:
https://mirrors.huaweicloud.com/filebeat/
方式一:二进制安装
- 上传filebeat-6.2.4-linux-x86_64.tar.gz至/opt目录,执行解压和移动:
bash
cd /opt
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
方式二:RPM安装
- 上传filebeat-6.6.1-x86_64.rpm至/opt目录,执行安装:
bash
rpm -ivh filebeat-6.6.1-x86_64.rpm
9.2.2 配置Filebeat
- 二进制安装配置:
bash
cd /usr/local/filebeat
vim filebeat.yml
修改以下配置:
yaml
filebeat.input:
- type: log
enabled: true
paths:
- /var/log/messages # 监控的日志文件
- /var/log/*.log
======================= General =======================
fields: # 自定义字段
service_name: filebeat
log_type: log
service_id: 192.168.10.16
# 注释掉Elasticsearch输出配置
#--------------Elasticsearch output-------------------
#(全部注释)
# 配置Logstash输出
----------------Logstash output---------------------
output.logstash:
hosts: ["192.168.10.15:5044"] # Logstash节点IP和端口
启动Filebeat:
bash
./filebeat -e -c filebeat.yml
- RPM安装配置:
bash
vim /etc/filebeat/filebeat.yml
配置内容与二进制安装一致,保存后启动:
bash
systemctl start filebeat
9.3 Logstash配置(Apache节点操作)
- 创建Logstash配置文件:
bash
cd /etc/logstash/conf.d
vim logstash.conf
添加以下内容:
yaml
input {
beats {
port => "5044" # 监听5044端口,接收Filebeat数据
}
}
output {
elasticsearch {
hosts => ["192.168.10.13:9200"] # Elasticsearch地址
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" # 索引格式(使用Filebeat自定义字段)
}
stdout {
codec => rubydebug # 标准输出详细格式
}
}

- 启动Logstash:
bash
logstash -f logstash.conf
9.4 Kibana配置(Node1节点操作)
- 浏览器访问http://192.168.10.13:5601,进入Management→Index Pattern→Create Index Pattern。
- 输入索引模式filebeat-*,点击Next step,选择Time Filter field name为@timestamp,点击Create Index Pattern。
- 点击Discover查看Filebeat收集的日志数据。

