58技术:基于Elastic Stack的海量日志分析平台实践

偷懒的程序员 2020-11-13 13:19:57 ⋅ 880 阅读

背景

随着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方便的对日志查询,并根据数据生成报表。

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

 

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

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

 

第三种架构,引入了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加密传输,这样便有了一定的限制性。

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

 

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

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

 

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

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

系统架构图如下:

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

 

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

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

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

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

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

 

 

总结

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

作者简介

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


欢迎大家关注“58技术”微信公众号,“58技术”是58官方技术号,58技术创新、分享与交流平台。


全部评论: 0

    我有话说:

    「开源资讯」Atom 1.52.0 和1.53.0-beta0发布,跨平台文本编辑器

    Atom 同时发布了 1.52.0 和 1.53.0-beta0 版本。Atom 是 GitHub 专门为程序员推出一个跨平台文本编辑器。具有简洁和直观图形用户界面,并有很多有趣特点:支持

    GoAccess 1.4.4 发布,日志分析工具

    GoAccess 1.4.4 发布了。GoAccess 是一个基于终端快速日志分析器。其核心思想是实时快速分析和查看 Web 服务器统计信息,而无需使用浏览器,适合希望通过 SSH 快速分析访问日

    为什么说作为程序员分库分表必要性一定要掌握?

      互联网大厂程序员必须掌握海量数据和高并发问题处理技能,期望进入大厂程序员一定要仔细看这篇! MySQL 分库分表是做什么? 相信很多程序员对 MySQL 都比较熟悉了,目前国内

    「转载」微服务分布式架构中,如何实现日志链路跟踪?

    背景 开发排查系统问题用得最多手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面图     上图

    【开源推荐】基于 Go 语言轻量级高性能日志库 logit使用及测评

    logit 是一个简单易用并且是基于级别控制日志库,可以应用于所有 GoLang 应用程序中。

    open-monitor 1.7.0 版本发布,基于 Prometheus 分布式监控平台

    open-monitor是一套基于Prometheus分布式监控平台,适用于wecube,WeCube通过监控插件来对资源以及应用监控及告警。此插件底层引用Prometheus,上层封装了对

    关于MySQL 通用查询日志和慢查询日志分析

    MySQL中日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用两个功能:通用查询日志和慢查询日志。

    京东技术:面对海量流量七步走保证用户体验(部分操作能够快速实战

    当促销活动正式开始时,不少用户开启了价格保护,在此高并发情况下,如何保证用户体验,如何保证系统稳定性、高可用、快速计算结果,是本文重点。

    字节跳动 Go RPC 框架 KiteX 性能优化实践

    本文选自“字节跳动基础架构实践”系列文章。“字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造技术干货内容,和大家分享团队在基础架构发展和演进过程中实践经验与教训,与

    「转载」蘑菇街消息系统上云实践

    小编又来啦~本周要推荐给大家是一篇跟中间件上云相关技术文章,这里面详细记录了,蘑菇街自研消息系统上云全过程,也是市面上开放出来为数不多企业自研组件上云实践。有相关需求同学可以好好学习下

    架构实战篇:一个可供中小团队参考微服务架构技术

    作者近年一直在一线互联网公司(携程,拍拍贷等)开展微服务架构实践,根据我个人一线实践经验和我平时对Spring Cloud调研,我认为Spring Cloud技术栈中有些组件离生产级开发尚有

    京东技术:用最小图片格式,打造最优用户体验

    DPG图片压缩技术能够有效减少图片大小50%,并且减少50%CDN带宽流量!

    传统保险企业基于 Dubbo 微服务实践

    Dubbo 社区开发者日深圳站现场分享

    精品推荐:JDFlutter | 京东技术中台新一代跨平台开发框架

    DFlutter 是商城共享技术部-多端融合技术部推出新一代跨平台开发框架,可快速集成至现有 Android/iOS 工程,开发者可借助 JDFlutter 平台快速完成 Flutter 业务开发。

    MateCloud 3.2.8 版本发布,基于 Spring Cloud Alibaba 微服务平台

    软件简介 MateCloud 是一款基于Spring Cloud Alibaba微服务架构。目前已经整合 Spring Cloud Gateway、Spring Security

    使用分支进行开发和部署

    原文:Developing and Deploying with Branches 分支能够使开发工作更有条理,可以将正在开发代码跟那些已完成代码、已测试代码和稳定下来代码隔离开。不但使

    实战解析】基于HBase大数据存储在京东应用场景

    作者就职于京东商城京麦平台组,从事京东商家开放平台相关开发工作。热爱技术,熟悉各种常用开源框架,有丰富大型分布式系统、高并发系统开发经验。热衷于对大数据研究,对Hadoop、HBase以及

    「轻阅读」阿里云-开放平台高级技术家教你搭建微服务架构四大金刚利器

    孔凡勇,花名云狄,阿里云-开放平台高级技术家,对高并发、高性能、高可用、可伸缩分布式系统架构设计有丰富经验,Cloud Native坚定拥护者,坚守开发一线打磨匠艺架构师。

    iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+

    iOS OOM 崩溃在生产环境中归因一直是困扰业界已久疑难问题,字节跳动旗下头条、抖音等产品也面临同样问题。在字节跳动性能与稳定性保障团队研发实践中,我们自研了一款基于内存快照技术并且可