31

基于Elastic Stack的海量日志分析平台实践

 4 years ago
source link: https://www.tuicool.com/articles/BziMv2j
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

背景

随着58集团业务的飞速发展,日志数量也呈现指数级增长。 传统的日志处理方案,已不再适用,此时急需一套功能强大、稳定可靠的日志处理系统。

为解集团燃眉之急,DB部门自2018年初着手调研解决方案,经多方论证,最终确定使用Elastic Stack处理海量日志数据。

通过Elastic Stack搭建的集中式日志系统,具有以下几个主要特点:

  • 收集-能够采集多种来源的日志数据;

  • 传输-能够稳定的把日志数据传输到中央系统;

  • 存储-如何存储日志数据;

  • 分析-可以支持 UI 分析;

  • 警告-能够提供错误报告,监控机制;

Elastic Stack在提供了一整套解决方案的同时,可与其他开源软件之间互相配合使用,完美衔接,高效的满足了很多场合的应用。

Elastic Stack简介

Elastic Stack包括Beats、Elasticsearch、Logstash、Kibana、APM等,ELK是其核心套件。

Elasticsearch 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能; 是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。 它构建于Apache Lucene搜索引擎库之上。

Logstash 是一个用来搜集、分析、过滤日志的工具。 它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。 它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana 是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。 它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

Beats 是轻量级数据采集工具,包括:

1.Packetbeat(搜集网络流量数据);

2.Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);

3.Filebeat(搜集文件数据);

4.Winlogbeat(搜集 Windows 事件日志数据)

5.Metricbeat(收集系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据);

6.Auditbeat(采集linux审计日志);  

系统架构

第一种ELK架构,是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。建议小规模集群使用。此架构首先由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。

Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。 用户亦可以更直观的通过配置Kibana Web Portal方便的对日志查询,并根据数据生成报表。

uQBBNfU.jpg!web

第二种架构,引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。 最后由Kibana将日志和数据呈现给用户。 因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。 这种架构适合于较大集群的解决方案,但由于Logstash中心节点和Elasticsearch的负荷会比较重,可将他们配置为集群模式,以分担负荷,这种架构的优点在于引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性,但依然存在Logstash占用系统资源过多的问题。

nmqammj.jpg!web

第三种架构,引入了Logstash-forwarder。 首先,Logstash-forwarder将日志数据搜集并统一发送给主节点上的Logstash,Logstash分析、过滤日志数据后发送至Elasticsearch存储,并由Kibana最终将数据呈现给用户。 这种架构解决了Logstash在各计算机点上占用系统资源较高的问题。 经测试得出,相比Logstash,Logstash-forwarder所占用系统CPU和MEM几乎可以忽略不计。 另外,Logstash-forwarder和Logstash间的通信是通过SSL加密传输,起到了安全保障。 如果是较大集群,用户亦可以如结构三那样配置logstash集群和Elasticsearch集群,引入High Available机制,提高数据传输和存储安全。 更主要的配置多个Elasticsearch服务,有助于搜索和数据存储效率。 但在此种架构下发现Logstash-forwarder和Logstash间通信必须由SSL加密传输,这样便有了一定的限制性。

3QnAf2R.jpg!web

第四种架构,将Logstash-forwarder替换为Beats。 经测试,Beats满负荷状态所耗系统资源和Logstash-forwarder相当,但其扩展性和灵活性有很大提高。 Beats platform目前包含有Packagebeat、Topbeat和Filebeat三个产品,均为Apache 2.0 License。 同时用户可根据需要进行二次开发。 这种架构原理基于第三种架构,但是更灵活,扩展性更强。 同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

QnmYF3J.jpg!web

系统架构一个例子:MySQL日志审计系统

MySQL日志审计系统,采用percona audit插件审计MySQL的访问情况,结果记录到指定文件中。 通过Rsyslog将每个MySQL审计日志集中到Rsyslog Server的指定目录中,使用filebeat监控文件变化,上报到kafka。 使用Logstash消费数据,把数据过滤切割后,写入ES中,用户通过kibana查询相关数据。

系统架构图如下:

e6VnUfy.jpg!web 

由于使用Percona版本的MySQL Server,因此审计采用Percona的审计插件。 为了避免消耗过多性能,审计日志只记录连接情况,输出到文件中。

收集到的审计日志,通过Rsyslog的imfile模块,采集审计日志,发送到Rsyslog Server上统一存储。

Rsyslog上接收到的文件,通过filebeat上报kafka。 之后,Logstash负责消费kafka的数据,过滤切割后,写入到ES中。

用户可以在kibana中查询自己所需的数据,如下图:

ZJR3QvY.jpg!web

总结

目前,上报到公司kafka的日志,皆可接入数据库部门的ES,可通过kibana统一查询、分析,协助排查错误、分析性能。后续通过接入更多的beats组件,来丰富ES日志平台的使用场景。

作者简介

旋凯,58集团高级DBA,负责大规模MySQL数据库集群架构设计和性能优化,新型数据库如Elasticsearch、TiDB等前沿技术的调研及在58各种业务场景下的落地和实践。

Nb2iMvQ.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK