ELK简介
ELK简介
1 ELKStack是什么
对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展示),我们将这三个组合起来的技术称之为ELKStack,所以说ELKStack指的是Elasticsearch、Logstash、Kibana技术栈的结合,由这三个软件及其相关的组件可以打造大规模日志实时处理系统。
ELK的官方网站为:https://www.elastic.co/cn/,大家可以从其中文官方网站了解到更详细的内容。现在主要简单介绍一下,Elasticsearch、Logstash、Kibana的相关功能。
1.1 Logstash+Beats简介
在ELK刚出来时,日志的抓取工作主要是由Logstash组件负责,Logstash 是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。LogStash使用Java编写,插件是使用jruby编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。
但是由于LogStash是jvm跑的,资源消耗比较大,客户端部署在服务器上会占用较大的CPU、内存等资源。因此ELK团队使用golang写了一个功能较少但是资源消耗也小的轻量级的Beats,逐渐取代LogStash进行日志的收集工作,而LogStash则主要对Beats收集的日志进行加工过滤。
Beats是全品类采集器,搞定所有数据类型的抓取。包括Filebeat(日志文件采集)、Metricbeat(指标采集)、Packetbeat(网络数据采集)、Winlogbeat(Windows事件日志采集)、Auditbeat(审计数据采集)、Heartbeat(运行时间监控采集)。
1.2 Elasticsearch简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
ElasticSearch一些优势特点,可以直接从官网获取,以下为官网上的部分截图说明:
1.3 Kibana简介
Kibana 是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展现给业务方,比如各类饼图、直方图、区域图等。
所谓“大规模”指的是 ELK 组成的系统以一种水平扩展的方式每天支持收集、过滤、索引和存储 TB 规模以上的各类日志(注:1TB = 1024GB )。所谓“大规模”指的是 ELK 组成的系统以一种水平扩展的方式每天支持收集、过滤、索引和存储 TB 规模以上的各类日志(注:1TB = 1024GB )。
通常,各类文本形式的日志都在处理范围,包括但不限于 Web 访问日志,如 Nginx/Apache Access Log;应用运行时日志,如 Swift/PHP/Python/Ruby/Java/C# 等构建的应用程序在执行业务过程中记录下来的日志。 通常,各类文本形式的日志都在处理范围,包括但不限于 Web 访问日志,如 Nginx/Apache Access Log;应用运行时日志,如 Swift/PHP/Python/Ruby/Java/C# 等构建的应用程序在执行业务过程中记录下来的日志。
2 ELKStack工作原理
从以下图中可以看到其基本的工作原理:
上图是 ELK 实际应用中典型的一种架构,其中 beat或者Logstash 部署在具体的业务机器上,通过定时监控的方式获取增量的日志,并转发 push 到 Elasticsearch 中存储。Elasticsearch 存储并索引从 beat、Logstash 转发过来的数据,并通过 Kibana 查询和可视化展示,达到实时分析日志的目的。
3 其他开源日志分析软件
- Scribe
Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。当采用HDFS作为中央系统时,可以进一步利用Hadoop进行处理数据,于是scribe+HDFS+MapReduce方案便诞生了。 - Chukwa
Apache 的开源项目 hadoop, 作为一个分布式存储和计算系统,已经被业界广泛应用。很多大型企业都有了各自基于 hadoop 的应用和相关扩展。当 1000+ 以上个节点的 hadoop 集群变得常见时,集群自身的相关信息如何收集和分析呢?针对这个问题, Apache 同样提出了相应的解决方案,那就是 chukwa。
chukwa 的官方网站是这样描述自己的: chukwa 是一个开源的用于监控大型分布式系统的数据收集系统。这是构建在 hadoop 的 hdfs 和 map/reduce 框架之上的,继承了 hadoop 的可伸缩性和健壮性。Chukwa 还包含了一个强大和灵活的工具集,可用于展示、监控和分析已收集的数据。 在一些网站上,甚至声称 chukwa 是一个“日志处理/分析的full stack solution”。 说了这么多,你心动了吗? - Flume
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。 - Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。