ElasticSearch构建千亿级日志分析系统-实时分析

 

1、背景介绍

随着业务系统的复杂度上升,单应用无法适用业务场景,分布式系统已经成为目前服务器的常用解决方案。

随之而来的是分析问题变得困难,需要跨多个模块进行分析定位,涉及的应用节点几十上百个,需要一套日志收集与分析架构来满足我们的日常问题定位。

下图是一个实时日志采集系统架构:

ElasticSearch构建千亿级日志分析系统-实时分析

 

分为采集器、消息队列、处理器、存储分析四个模块。

2、采集器

采集各个源头日志上报到消息队列,这里用到了四个采集器:

Elastic Beats:Elastic系列的套件,采集文件日志,可以配置过滤器进行日志预处理;

Apache Flume:采集文件日志,Java开发的采集器,可以自动以处理器进行日志处理,需要自己写Java代码,使用Java语言开发的同学比较容易上手;

Java封装Log4j:采集实时日志,Java封装Log4j,实现实时日志上报,动态上传,可做到消息的冬天路由,Kafka集群的动态切换(故障转移),日志级别的动态调整等,后面会有专门的章节来介绍日志管理系统;

Logstash:Elastic 系列比较早的采集器,可以采集文件日志,可接收日志写入ElasticSearch,可接收日志写入Kafka

这里不重点介绍这些采集器的差异,如有需要了解采集器的优劣可以参考如下文章:

https://developer.51cto.com/art/201904/595529.htm

3、消息队列

使用Kafka作为消息队列,缓冲日志带来的冲击,当ElasticSearch繁忙时数据堆积在Kafka,起到削峰填谷作用,给日志调控留下操作的时间。官方地址:http://kafka.apache.org/

4、处理器

消费Kafka日志写入到ElasticSearch,这里使用Java开发处理写入ElasticSearch可以做到灵活的调整写入的频率,优化写入速度,结合ElasticSearch的部署

情况优化写入的效率,日志进入Kafka之后在处理器模块可以做适当的处理和分流,根据业务场景可以分模块分割ElasticSearch集群,结合日志结构将日志分

模块写入到不同的集群不同的索引,如遇单集群压力过大,性能处理不过来可以通过处理器动态分流,将数据写入到新的集群来解决查询问题。

5、存储分析

存储使用全文搜索引擎ElasticSearch,ElasticSearch是一款高效率的全文索引软件,恰好满足日志存储与分析的业务场景,根据语言的区别我们可以设置不同的分词器来优化查询,分析工具使用Kibana,功能比较强大的UI分析工具,满足日常查询。

处理日志的关键在于ElasticSearch的索引和查询能力,后面的章节会重点讲到如何搭建和优化ElasticSearch集群。

ElasticSearch官方地址:https://www.elastic.co/cn/elasticsearch

Kibana官方地址:https://www.elastic.co/cn/kibana

ElasticSearch构建千亿级日志分析系统-实时分析