大家好,首先感谢大家参加本次课程,我是腾讯基础架构部的陈曦。
本次课程主要分享下怎样使用Elastic Stack搭建日志分析平台。
(本次课程是通过小程序对外推广的,所以PPT是竖版的。电脑端浏览体验可能不太好,望大家见谅)
随着互联网、物联网的飞速发展,软硬件系统架构变得越来越复杂,分析各种系统产生的日志也变得越来越困难。在日志分析过程中,相信大部分同学会碰到以下问题:
以上问题,Elastic Stack都可以解决!
本次课程就主要分享下怎样通过Elastic Stack解决日志分析碰到的各种问题。
Elastic Stack由四个组件组成,分别是Beats、Logstash、Elasticsearch、Kibana。它们提供了日志采集、清洗、存储、可视化的能力,是一个比较完备的架构。
从Elastic Stack的架构出发,可以看出它具备以下能力:
前面主要介绍了Elastic Stack的架构和基本能力,后面着重分享怎样使用Elastic Stack做日志分析。主要使用三个组件:
Elastic Stack的架构中,有四个组件,本次课程去掉了Logstash。原因是虽然它功能强大,但是资源消耗也比较高,很容易成为整个系统的性能瓶颈。它数据日志格式化的能力,通过Elasticsearch的数据预处理模块替代。这样有助于精简架构、提整体的高性能。
中间的这张图是本次课程的架构方案,也代表了日志数据流动的过程,从左到右分别经过Beats(也就是Filebeat)、Elasticsearch和Kibana。但是为了便于大家理解,后面的课程会先介绍Elasticsearch,因为他是整个架构的核心,然后再介绍日志采集器Filebeat,最后介绍可视化工具Kibana。
经过本次课程,大家能了解到怎样把纯文本的日志文件变为格式化的数据,以及怎样通过kibana快速搜索到有效信息,或者把日志数据转变为可视化的图表。
第一部分来介绍Elasticsearch,后续称之为ES。在Elastic Stack的中它处于中心位置,是数据存储的核心,所以也是最重要的部分。
这里会带大家了解下ES的总体架构和负责日志清洗功能的Ingest Pipeline。
ES的数据模型分为几个层级,Index、Type、Document。这张图把这几个层级和传统关系型数据库中的相关概念做了类比,便于大家理解。
Index:类似于关系型数据库的Database或Table,用于对数据做最上层的分类。我们可以把不同模块产生的日志,存放在不同的Index中。
Type:类似于关系型数据库中Table的概念,这里和上面Index的概念有些重复。因此6.0以后的ES版本中,一个Index只能存在一个Type了,7.0以后的版本会取消对Type的支持。在使用ES时,不要再指定多个Type,数据分类完全通过Index划分即可。
Document:类似于关系型数据库中Row的概念,也就是一行数据。ES里的每个Document是一个Json格式的结构体,可以有多个字段,存放不同的信息。
还有一个单独的概念是Mapping,类比于关系型数据库中的schema,用于指定每个字段的数据类型。通常情况下,ES是Schema free的。只有碰到特殊类型的字段,比如ES默认无法识别的Date(时间)类型的字段、不需要分词的String类型字段时,才需要指定Mapping。本次课程中,将不涉及这个概念,我们使用ES默认生成的Mapping即可。
上面讲的Index是一个逻辑上的概念,它从命名空间的维度把ES里存储的数据做了分类(也就是分表),同一类的数据放在同一个Index中。
而实际存储时,一个Index的数据会分布在多个分片上(称之为shard),每个shard承载一个Index的一部分数据。而每个分片又可以有多个副本,其中一个是主副本,称之为primary,其他是从副本,称之为replica。
图中有两个Index,Index1和Index2. 其中Index1 有两个Primary Shard,P1和P2. 每个Primary Shard又有两个副本,比如P1的两个R1副本。
至此大家理解了Index和Shard的关系,以及Primary、Replica的概念。
ES本身又是一个多节点的分布式集群,shard被打散后分布在各个node上。不同的node可以分布在不同的机器上。
而且ES默认同一个shard的primary和replica不会同时存在于同一个Node上,这样即使某个Node故障脱离集群,也可以保证不丢数据,因为集群中还有另一个副本在。
图中的P1和两个R1,分别分布在三个Node(Node1,Node2,Node3)上,它们所承载的数据是一模一样的。当Node1、Node2同时故障宕机时,ES集群里仍然有一个R1存在,不会影响数据的读写服务,更不会丢数据。
由ES的分布式架构,可以总结ES的一些优点:
默认情况下,下载ES的安装包后,进入ES目录,直接执行下面的命令,ES就会在后台启动,并监听机器的9200端口。我们通过这个端口就能读写数据了,不需要对ES做额外的配置。
ES这个章节的第二部分,来介绍ES的一个特殊模块,Ingest Pipeline,这个模块用来对写入数据做预处理。
在数据真正写入到ES的Index之前,可以通过Ingest Pipeline对数据做一定的修改。它里面可以定义一些processor,不同的processor可以对写入数据做不同的处理。比如可以通过Grok Processor做日志的格式化,来替代Logstash。
最下面的图是Grok Processor的工作原理。对于写入ES的文本(Simple Data),可以定义一个表达式(Grok Pattern),来规定如何对输入的文本做解析。也就是按照一定的规则,把输入文本分割为几个部分,每个部分是一个单独的字段。经过解析后,最终形成最下面的结构化数据。
所谓的Grok Pattern其实是正则表达式,只不过ES对常用的正则表达式做了别名,方便我们使用。所谓的文本解析也就是正则匹配,然后把匹配到的各个部分分别放入不同的字段,形成结构化数据。
图中的数据是一段样例日志,被分为三个部分,分别通过正则匹配解析为三个字段。
那么该如何定义一个Pipeline呢?
图中显示的是本次课程使用的pipeline,根据ES的API,我们通过REST PUT命令即可定义一个Pipeline。
URL中的_ingest/pipeline是ES定义pipeline的固定API,最后的apache_log是我们定义的这个pipeline的名字(pipeline_name),后面写入数据时会用到这个pipeline_name。后面会使用Filebeat采集apache的一段日志,因此这里的pipelien取名为apache_log。
Http的Body是json格式的,定义了processors,里面有三个processor:grok、date、date_index_name.
至此,ES的部分就介绍完了。
第二部分介绍Filebeat,它处于整个Elastic Stack最上游,负责日志采集。主要介绍下Filebeat的基本原理以及怎样配置启动。
filebeat的基本原理
Filebeat是Beats家族中的一员,Beats包括很多工具,感兴趣的同学可以去官网了解下。
filebeat的基本配置
filebeat的配置文件就在filebeat根目录下,yaml格式。
默认状态下,我们只需要修改input(采集哪些文件)和output(数据输出到哪里)即可。
这样filebeat就配置好了,启动的话直接执行filebeat二进制即可。
如果要后台执行的话,可以用nohup命令启动
如果担心filebeat占用过多的机器资源,可以通过taskset绑核启动,限制filebeat的资源使用
当采集的日志量比较大时,默认的配置可能无法满足需求,这里给出一些通常使用的调优参数,大家可以做个参考。当然不同场景下,最佳的参数配置也是不同的,需要根据自己的实际使用场景,做适当的取舍和调整。对于这些参数,此处不做过多的阐述,可以参考filebeat的官方文档。有问题可以留言交流,后面有时间也会整理下调整这些参数的原因及效果。
最后一部分介绍Kibana,它处于Elastic Stack的最下游,主要提供数据分析、可视化的能力。主要介绍Kibana的基本功能以及怎样通过它来查询数据、生成可视化的图表。
Kibana提供了数据查询、可视化及统计分析的能力。
kibana的启动也很简单,默认情况下直接执行kibana/bin目录下的kibana二进制文件即可,它会默认连接本机的9200端口,这是ES的默认监听端口。
要通过Kibana查询数据的话:
查询的具体语法可以参考Kibana的官方文档。
kibana数据可视化相关的界面主要是Visualize、Timelion和Dashboard。
因为数据可视化图表是基于ES的聚合查询来做的,需要对ES的聚合查询有一定的理解。所以这里以介绍功能为主,具体的创建方法需要理解ES的聚合查询后,参考Kibana的官方文档来配置。
至此本次课程的内容就介绍完了,最后分享下我们基础架构部 ES团队做的一些工作。我们主要基于Elasticsearch开发了两款产品,一个是源生的Elasticsearch服务,一个是时序数据库CTSDB。
本次课程时间短,内容由比较多,ES的使用讲的比较简单。关于ES的使用和调优,之前写了一篇文章,有兴趣的同学可以扫描二维码看下原文,欢迎大家批评指正。
关于时序数据及腾讯云CTSDB的介绍,之前写了一篇文章,有兴趣的同学可以扫描二维码看下原文。
对以上两款产品有需求的同学,可以去腾讯云官网搜索CES和CTSDB,上面有更为详尽的介绍。
非常感谢大家参加今天的课程,我们在腾讯云+社区设置了Elasticsearch实验室的专栏,定期对外发布相关文章的同时,也会交流相关问题,欢迎各位来访,再次感谢大家!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。