ELK是什么?
最近几次在和互联网客户交流日志服务的过程中,经常会听到他们提到ELK。带着好奇心,我去调研了一番,并通过本文记录下学习所得。
ELK是什么
ELK取名来自于三个开源项目Elasticsearch、Logstash、Kibana的首字母缩写。
Elasticsearch 是一个基于Lucene(apache下的一个开源的全文检索引擎工具包)的分布式搜索和分析引擎,通过Restful方式进行交互;为所有类型的数据提供近乎实时的搜索和分析,并支持对数据进行存储和索引。
Logstash 是服务器端数据处理管道,支持从多个来源动态地采集、转换数据,然后将数据传输到Elasticsearch“存储库”内。可以利用Grok(一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具)从非结构化数据中派生出结构,从IP地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。
Kibana 是针对存储在Elasticsearch索引中数据的开源分析及可视化平台,使用图形、图表对数据进行可视化操作。基于此,它可以提供一个日志分析友好的web界面,支持用户快速创建仪表板来实时显示数据,可以汇总、分析和搜索重要数据日志,让海量数据更容易被理解。
因此,这三者的相互作用关系可以总结为:Logstash在最底层去采集、转换、传输数据;Elasticsearch在中间一层,用来搜索、分析、存储数据;Kibana在最上层将数据可视化展示给用户。
ELK发展历程
从最开始只有Elasticsearch,这个基于Json开发而来的分布式搜索引擎,因为使用简单,支持缩放规模,受到用户的热烈好评。
因为Elasticsearch 的核心是搜索引擎,所以用户开始将其用于日志用例管理,并希望能够对日志信息进行采集和可视化。因而接着引入了采集工具Logstash 和 可视化工具Kibana,让产品功能更为强大。
然后,随着社区越来越壮大,用例越来越丰富,开始有用户希望可以对某个特定的文件进行tail操作(用于查看文件的内容)。因此,在 2015 年,引入了一系列轻量型的单一功能数据采集器并把它们叫做 Beats。从上一节的图片里,其实我们也看到了在最底层Beats和Logstash处于同一层。
随着Beats的加入,ELK眼看又要改名了。ELKB?ELBK?当时的确有过继续沿用首字母缩写扩展名称的想法。然而,对于扩展速度如此之快的堆栈而言,一直采用首字母缩写的确不是长久之计。因此,Elastic Stack 这个名字应运而生了(当然,我们也可以继续叫ELK,或则托管型ELK)。
为什么要使用ELK
在一个服务中,日志可以用来记录其所有行为的数据,包括系统、应用程序和安全方面;而ELK则支持对服务行为数据进行分析,帮助运维、开发人员去了解服务器软硬件信息,服务器的性能和安全性,检查配置与应用的错误及发生的原因,从而可以及时采取措施纠正错误。
可以用到ELK的场景包括:
- 管理大量服务器的时候。不像管理单台机器的日志,针对几十几百几千台服务器,如果还要依次登录每台机器去查阅日志,肯定是又繁琐又效率低下。这时候有一整套集中式的日志系统,就可以提高定位问题的效率。
- 当应用出现故障的时候。我们需要通过日志去排查故障信息,ELK可以帮助我们对多个环境的日志进行收集、过滤、传输、存储、可视化。
- 当应用在生产环境上有异样表现的时候。这时候就需要我们的数据支撑,比如应用里API的调用量,出错率,使用人数等。ELK可以帮助我们无侵入式的进行信息的收集。
而作为用户,我们在使用ELK的时候,则应该要考虑几个问题:当前日志的输出是否合理?输出的内容是否是我们想要的?
日志服务需要具备的基本特征
- 收集:支持采集多种来源的日志数据
- 分析:支持在UI界面分析得到有效信息
- 传输:支持稳定地将日志数据传输给存储库
- 存储:支持存储日志数据
- 告警:提供监控机制,支持提供错误报告
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)