注: 部分概念介绍来源于网络

一、基本介绍
1.1、什么是分布式日志
在分布式应用中,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。所以我们使用集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。

1.2、为什么要使用分布式日志
一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

1.3、一个完整的集中式日志系统,是离不开以下几个主要特点的
1) 收集 - 能够收集多种来源的日志数据
2) 传输 - 能够稳定的把日志数据传输到中央系统
3) 存储 - 如何存储日志数据
4) 分析 - 可以支持UI分析
5) 警告 - 能够提供错误报告

二、ELK 分布式日志
实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成。
2.1、Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2.2、Kibana 基于nodejs,也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的Web 界面,可以汇总、分析和搜索重要数据日志。
2.3、Logstash 基于java,是一个开源的用于收集,分析和存储日志的工具。
2.4、Beats在这里是一个轻量级日志采集器,其实Beats家族有5个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较多。相对 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
2.5、x-pack对Elastic Stack提供了安全、警报、监控、报表、图表于一体的扩展包,是收费的。

三、 ELK 的工作原理
服务器A、服务器B、服务器C --收集日志--> logstash --转发日志--> ElasticSearch --图像化搜索--> Kibana

四、ElasticSearch
4.1、简介:
ElasticSearch是一个基于Lucene的开源分布式搜索服务器。是一个实时的分布式搜索和分析引擎,他可以用于全文搜索,结构化搜索以及分析,他是一个建立在全文搜索引擎Apache lucene基础上的搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,所有节点的数据是均等的。

4.2、主要特点
1) 实时分析
2) 分布式实时文件存储,并将每一个字段都编入索引
3) 文档导向,所有的对象全部是文档
4) 高可用性,易扩展,支持集群(cluster),分片和复制(hards和Replicas)
5) 接口友好,支持JSON

五、Logstash
5.1、简介:
Logstash是一个开源的服务器端实时数据处理管道及数据收集引擎,可以水平伸缩,使用JRuby语言编写,是一个完全开源工具,能够同时从多个来源采集数据,过滤,转换数据,然后将数据发送到存储库中。

5.2、logstash收集日志基本流程: 
input–>codec–>filter–>codec–>output 
1) input:从哪里收集日志;
2) filter:发出去前进行过滤;
3) output:输出到Elasticsearch或Redis消息队列;
4) codec:输出到前台,方便边实践边测试;

5.3、主要特点:
1) 几乎可以访问任何数据
2) 可以和多种外部应用结合
3) 支持弹性扩展

5.4、主要由三部分组成:
1) Shipper - 发送日志数据
2) Broker -  收集数据,缺省内置Redis
3) Indexer - 数据写入

六、Kibana
6.1、简介:
Kibana 是一款基于Apache开源协议的数据分析和可视化的Web平台,使用JavaScript语言编写,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

七、Filebeat
ELK协议栈的新成员,一个轻量级开源日志数据搜集器,基于Logstash-Forwarder源代码开发,是对他的替代。是需要在采集日志数据server上安装filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到Elasticsearch进行集中式存储和分析。

八、Beats作为日志搜集器
这种架构引入Beats作为日志搜集器。目前Beats包括四种:
1) Packetbeat (搜集网络流量数据)
2) Topbeat (搜集系统,进程和文件系统级别的CPU和内存使用情况等数据)
3) Filebeat (搜集文件数据)
4) Winlogbeat (搜集Windows事件日志数据)
Beats将搜集到的数据发送到Logstash,经Logstash解析,过滤后,将其发送到Elasticsearch存储,并由Kibana呈现给用户。
这种架构解决了Logstash在各服务器节点上占用系统资源高的问题,相比Logstash,Beats所占系统的CPU和内存几乎可以省略不计,另外,Beats和Logstash之间保持SSL/TLS加密传输,客户端和服务器双向认证,保证了通信安全,因此这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景。

九、应用场景
场景一:使用 ES 作为业务系统的后端。
此时,ES 的作用类似传统业务系统中的 MySQL、PostgreSQL、Oracle 或者 Mongo 等的基础关系型数据库或非关系型数据库的作用。
我们举例说明。使用 ES 对基础文档进行检索操作,如将传统的 word 文档、PDF 文档、PPT 文档等通过 Openoffice 或者 pdf2htmlEX 工具转换为 HTML,再将 HTML 以JSON 串的形式录入到 ES,以对外提供检索服务。

场景二:在原有系统中增加 ES、Logstash、Kibana等。
原有的业务系统中存在 MySQL、Oracle、Mongo 等基础数据,但想实现全文检索服务,就在原有业务系统基础的加上一层 ELK。
举例一,将原有系统中 MySQL 中的数据通过 logstashinputjdbc 插件导入到 ES 中,并通过 Kibana 进行图形化展示。
举例二,将原有存储在 Hadoop HDFS 中的数据导入到 ES 中,对外提供检索服务。

场景三:使用 ELK Stack 结合现有工具对外提供服务。
举例一,日志检索系统。将各种类型的日志通过 Logstash 导入 ES 中,通过 Kibana 或者 Grafana 对外提供可视化展示。
举例二,通过 Flume 等将数据导入 ES 中,通过 ES 对外提供全文检索服务。

场景四:其他综合业务场景
主要借助 ES 强大的全文检索功能实现,如分页查询、各类数据结果的聚合分析、图形化展示(饼图、线框图、曲线图等)。
举例说明,像那些结合实际业务的场景,如安防领域、金融领域、监控领域等的综合应用。
 

Logo

更多推荐