前言
- ELK Stack 是一套开源的数据搜索 / 分析解决方案,核心组件包括:Elasticsearch、Logstach、Kibana 和后来的 Beants。对于客户端同学来说,一般只会接触到其中的 Kibana 组件。
- 在这篇文章里,我将简单总结 ELK Stack 背后运行的架构逻辑,以及总结 Kibana 的使用。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。
目录
1. 背景
传统的日志分析是直接从日志文件中grep / awk
日志信息,这种方式文本搜索慢,难以多维度查询。在大型系统中,往往采用的是分布式部署的架构(不同服务模块部署在不同的服务器节点上)。在出现问题时,需要一套集中化的日志管理工具来收集 / 分析所有节点上的日志,提高定位问题的效率。
提示:
- Linux grep 命令:用于查找文件里符合条件的字符串;
- awk 是一个文本分析工具。
2. ELK Stack 架构
ELK Stack 组件包含 Elasticsearch、Logstash、Beats 和 Kibana。早期版本的 ELK 组件只包含 Elasticsearch、Logstash 和 Kibana 三个组件,这就是 “ELK” 三个字母的来源。在 2015 年,ELK 组件增加了 Beats,为了命名方便,以后 ELK 组件的更新迭代版本都统称为 ELK Stash。依据
下面简单介绍几个组件的负责的职能,因为我们是客户端同学,只要理解大概的用途即可。
- Elasticsearch: 开源的分布式搜索和分析引擎(RESTful 风格);
- Logstash: 开源的数据采集工具,允许在将数据索引到 Elasticsearch 之前,收集多个来源的数据,进行过滤和转换。在实现上,Logstash 采取的是 C/S 架构,Logstash Agent 安装在需要收集数据的主机上,Logstash Server 收集各个主机上的数据。
- Kibana: 开源的 Elasticsearch 数据可视化和管理工具,可以提供多种实时图表(例如:直方图、线形图、饼状图、地图等)。
- Beats: 轻量级的数据采集工具,集合了多种单一用途数据采集器。早期 ELK 组件采用 Logstash 进行日志收集,但是 Logstach 对资源消耗高,使用 Beats 性能占用更加轻量。Beats 和 Logstash 虽然有重叠的功能,但是依然可以将数据转发至 Logstash 获得更强大的数据转换能力。
另外,ELK Stack 组件往往还需要配合 Kafka 或 Redis 消息队列,这是为了降低数据丢失隐患。在没有消息队列的情况下,如果服务侧组件出现故障,那么会出现数据丢失。而引入消息队列的情况下,在出现故障时数据会被存储下来,降低了数据丢失隐患。
3. Kibana 的使用
对于客户端同学,更关心的应该在面向分析侧的 Kibana,这一节我们就着重来总结 Kibana 的使用。
3.1 数据搜索
数据搜索是 Kibana 最基础也是最主要的功能,在数据探索(Discover)页面可以交互式地探索你的数据。
简单熟悉下页面中的几块区域:
- 搜索条件:可以使用简单的文本查询,或者使用 Lucene 语法,也可以使用基于 JSON 的 Elasticsearch 查询 DSL;
- 时间筛选:选择搜索数据的时间跨度,需要注意选择是跨度越长,对应的数据搜索耗时越大;
- 项目筛选:选择搜索数据的项目,一般每个项目的日志是独立收集并通过 Logstash 采集到 Elasticsearch;
- 字段筛选:对搜索结果进行过滤,只显示包含特定字段值的数据。
在数据展示区,你可以看到所有筛选后的数据。展开具体一条数据,其中的 msg 字段值就是你的项目中上报的数据(payload)。
3.2 可视化
在可视化(Visualize)页面可以创建可视化控件,在仪表盘(Dashboards)页面可以把你创建的多个可视化控件整合在一起展示。