1、ELK概述
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
ELK 是 Elasticsearch 、Logstash 、Kibana 的缩写,这三个工具组合在一起,用于数据收集、存储、搜索和可视化分析。它们的角色如下:
- Elasticsearch:核心搜索和分析引擎,负责存储数据并提供快速的全文搜索和分析功能。
- Logstash:数据收集和处理管道,能够从各种来源(如日志文件、数据库)收集数据,并进行过滤和转换,然后将其发送到Elasticsearch。
- Kibana:数据可视化工具,提供图形界面来展示和分析存储在Elasticsearch中的数据,支持创建各种图表和仪表板。
2、Elasticsearch介绍
ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与Elasticsearch 通信。
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。
2.1 核心功能
- 全文搜索:Elasticsearch最广为人知的功能是全文搜索。它能够对文本数据进行快速的全文索引和搜索,是实现复杂搜索功能的理想工具。
- 实时数据分析:支持实时的数据更新和查询,适合用于日志分析、监控数据的实时处理等场景。
- 分布式架构:Elasticsearch基于分布式架构设计,支持跨集群的数据存储和检索,使其在扩展性和性能上具有很大优势。
- RESTful API:Elasticsearch使用简单的HTTP接口(RESTful API),支持通过各种语言和平台进行集成。
2.2 架构与组件
- 集群(Cluster):一个或多个Elasticsearch节点(实例)组成一个集群,集群中的所有节点协同工作,共享数据和负载。
- 节点(Node):运行Elasticsearch的单个实例,节点可以有不同的角色(如主节点、数据节点等),负责存储数据和处理查询。
- 索引(Index):一个索引类似于传统数据库中的一个表,包含了一个数据集。每个索引都有唯一的名称,用于引用其中的文档。
- 文档(Document):Elasticsearch中的最小数据单元,每个文档是一个JSON格式的对象,存储在索引中。
- 分片(Shard):每个索引可以被分割为多个分片(shards),每个分片是一个Lucene索引。分片提供了数据的分布和并行处理能力,确保系统的高可用性和可扩展性。
- 副本(Replica):每个分片都可以有一个或多个副本,用于数据冗余和提高系统的容错能力。
2.3 使用场景
- 日志和事件数据分析:适合处理大规模的日志、事件流数据,提供实时的查询和分析能力。常与Logstash和Kibana(组成ELK Stack)一起使用。
- 全文搜索应用:如电子商务网站中的产品搜索,社交媒体平台的用户内容搜索。
- 监控和报警系统:通过与Kibana等工具结合,提供数据的可视化和实时监控功能。
- 商业智能(BI):支持复杂数据查询和分析,帮助企业从数据中获取洞察。
2.4 Elasticsearch特点与缺点
优点:
- 高性能:得益于Lucene的底层支持,Elasticsearch在处理全文搜索和分析操作时性能非常优越。
- 易扩展:其分布式架构设计使得集群可以随着数据量的增长而轻松扩展。灵活性强:支持多种数据类型和复杂查询语法,可以适应各种不同的应用需求。
- 开放源代码:免费且活跃的社区支持,用户可以自由定制和扩展。
缺点:
- 资源消耗:作为一个内存密集型应用,Elasticsearch对硬件资源的要求较高,尤其在处理大量数据时。
- 学习曲线:虽然Elasticsearch易于集成,但对于新手来说,理解其复杂的查询DSL(Domain Specific Language)和架构可能需要一些时间。
- 管理复杂性:在大型分布式集群环境中,管理和调优Elasticsearch需要相当的专业知识
3、Logstash介绍
Logstash 作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后将处理后的数据发送到存储或分析系统(例如Elasticsearch)。
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
3.1 主要特点
1. 数据收集:
- Logstash能够从多种数据源(如日志文件、数据库、消息队列等)收集数据。
- 它支持各种输入插件,这些插件帮助你从不同的系统或服务中提取数据。
2. 数据处理:
- Logstash使用过滤器插件来处理数据,可以对数据进行清洗、格式转换、字段解析等操作。
- 支持丰富的数据处理操作,比如正则表达式解析、日期转换、字段拆分和合并等。
3. 数据输出:
- 处理后的数据可以被发送到多种输出目标,如Elasticsearch、关系型数据库、消息队列、文件系统等。
- 输出插件的灵活性使得Logstash能够与各种系统集成。
4. 可扩展性:
- Logstash的架构允许通过插件轻松扩展和自定义,插件包括输入插件、过滤器插件、输出插件和编码插件等。
5. 实时处理:
- Logstash支持实时数据处理,适用于需要快速数据流的场景,比如实时日志监控、数据流分析等。
3.2 使用场景
- **日志收集和分析:**从各种日志文件中提取数据(如系统日志、应用日志),然后将数据发送到Elasticsearch进行集中化分析和监控。
- **数据转换:**在数据进入目标存储之前,对其进行清理、格式化和标准化处理。
- **数据流整合:**从多种来源获取数据,将其汇聚到一个统一的平台进行进一步的分析和决策支持。
相对 input(数据采集) filter(数据过滤) output(数据输出)
3.3 其他 数据收集组件
① Filebeat
轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中进行解析
filebeat 结合 logstash 带来好处:
1)通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻
Elasticsearch 持续写入数据的压力
2)从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
3)将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
4)使用条件数据流逻辑组成更复杂的处理管道
**缓存/消息队列(redis、kafka、RabbitMQ等):**可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。
② Fluentd
是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
4.1 Kibana 的主要功能
1. 数据可视化(Visualizations):
Kibana 提供丰富的可视化工具,可以通过折线图、饼图、柱状图、地图等方式展示数据。
用户可以根据需求自定义图表样式,以便更好地分析和解读数据。支持创建动态可视化,根据过滤器和时间范围即时更新显示内容。
2. 仪表板(Dashboards):
Kibana 的仪表板是一种用来展示多个可视化图表的集合,可以通过仪表板同时监控多个数据
来源或系统状态。仪表板支持交互式过滤器,用户可以在不同时间范围、不同条件下实时查看数据。
3. 日志管理和搜索(Log Management & Discovery):
Kibana 的 "Discovery" 功能提供了对 Elasticsearch 中存储的原始数据的实时搜索与过滤功
能。用户可以根据条件快速查询和检索日志、数据记录等内容,并使用强大的过滤器和查询语言
(KQL 或 Lucene)来精准获取所需信息。
4. 时间序列分析(Time Series Analytics):
使用 Kibana 的 "TSVB"(Time Series Visual Builder),用户可以进行复杂的时间序列分
析。它支持创建基于时间的数据图表,常用于监控系统性能、用户活动趋势等。
5. 报警与监控(Alerts & Monitoring):
Kibana 可以通过与 Elasticsearch 和 Logstash 的集成提供数据监控、报警通知功能。
用户可以设置阈值,当数据达到某个条件时,Kibana 可以自动触发报警并发送通知。
Kibana 可以通过与 Elasticsearch 和 Logstash 的集成提供数据监控、报警通知功能。
用户可以设置阈值,当数据达到某个条件时,Kibana 可以自动触发报警并发送通知。
6. 安全和访问控制(Security & Access Control):
Kibana 提供基于角色的访问控制,管理员可以根据用户角色来设置权限,例如是否允许访问
某些数据或仪表板。Kibana 支持与外部认证系统(如 LDAP、OAuth)集成。
7. 机器学习(Machine Learning):
Kibana 提供了与 Elastic Stack 的机器学习功能集成,用户可以对数据进行异常检测、趋势预
测和自动模式识别。可以通过无监督的机器学习算法自动检测数据中的异常行为。
8. 地图和地理可视化(Maps & Geospatial Visualization):
Kibana 提供了强大的地理数据可视化功能,通过 Elastic Maps 可以显示地理数据、绘制地
图并叠加数据层。支持动态过滤和聚合地理数据,适用于位置数据分析、物流、地理信息系统等领域。
9. Canvas 和报告(Canvas & Reporting):
Canvas: Kibana 的 Canvas 功能允许用户创建高度自定义的、视觉吸引力强的报告和展示。
Reporting: Kibana 支持自动生成报告,可以通过预定义模板或自定义的方式导出 PDF、CSV报告。
10. 监控(Monitoring):
Kibana 提供 Elastic Stack 组件的监控功能,帮助用户监控 Elasticsearch 集群、Logstash 管
道等系统的健康状况、性能和资源使用情况。
4.2 Kibana 的使用场景
1. 日志管理与分析:
通过 Kibana 可以对大量的日志数据进行集中管理与分析,帮助开发者、运维工程师及时发现
系统故障、监控应用程序状态。
2. 实时监控:
运用 Kibana 的仪表板和报警功能,用户可以对系统的性能和服务进行实时监控,并在异常时
及时采取行动。
3. 业务数据分析:
Kibana 可以用于对商业数据(如销售数据、用户行为数据)进行深度分析,帮助企业决策。
4. 安全分析与威胁检测:
通过集成 Elastic Security,Kibana 可以用来检测网络中的安全威胁,分析安全日志,进行入
侵检测。
5. 机器学习与数据预测:
Kibana 提供的机器学习功能可用于自动化的数据预测、趋势识别和异常检测,适用于金融预
测、系统监控等场景。
4.3 Kibana 的工作原理
1. 数据存储在 Elasticsearch 中:
- Kibana 本身不存储数据,而是通过 Elasticsearch 查询和检索存储的数据。Elasticsearch 是 Kibana 的数据源,数据可以从不同来源(如 Logstash、Beats、API 等)存储到Elasticsearch 中。
2. 查询和分析:
- 用户在 Kibana 中执行查询时,Kibana 会向 Elasticsearch 发送查询请求。查询可以使用 Kibana Query Language (KQL) 或 Lucene 查询语法。
3. 数据可视化和展示:
- 查询结果返回后,Kibana 会通过各种可视化工具(如图表、地图、仪表盘等)展示数据,帮助用户快速理解和分析数据。
5、完整日志系统基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持 UI 分析
- 警告:能够提供错误报告,监控机制
6、ELK 的工作原理
(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
7、部署环境ELK
|----------------|----------------------|--------------------------|
| 配置与名称 | IP | 服务 |
| Node1节点(2C/4G) | node1/192.168.10.14 | Elasticsearch(集群) Kibana |
| Node2节点(2C/4G) | node2/192.168.10.15 | Elasticsearch(集群) |
| Apache节点 | apache/192.168.10.50 | Logstash Apache |
7.1环境准备

7.2Elasticsearch 集群部署
(在Node1、Node2节点上操作)



7.3 Logstash 部署
(在 Apache 节点上操作)




7.4 Kiabana 部署
(在 Node1 节点上操作)



8、Filebeat+ELK 部署
|----------------|------------------------|--------------------------|
| 配置与名称 | IP | 服务 |
| Node1节点(2C/4G) | node1/192.168.10.14 | Elasticsearch(集群) Kibana |
| Node2节点(2C/4G) | node2/192.168.10.15 | Elasticsearch(集群) |
| Apache节点 | apache/192.168.10.50 | Logstash Apache |
| Filebeat节点 | filebeat/192.168.10.13 | Filebeat |
官方网站(中文下载):https://www.elastic.co/cn/downloads/beats/filebeat
8.1环境部署



