vlambda博客
学习文章列表

微服务运行时基础架构概述——微服务日志监控

1.现状和问题

微服务应用系统每天产生的海量日志信息都达到了指数级,而传统的关系化日志管理系统对日志存储、查询、分析的能力有限,已无法满足呈爆炸性增长的海量数据日志需求。为解决信息存储容量、数据安全、日志搜索分析等问题,必须采用新的方法和模式来实现日志的管理。于是,分布式、多任务的日志监控系统应运而生。使用多任务分布式日志监控系统能够提前对潜在的风险进行发掘、分析、判断并形成定性或定量的描述,从而采取应对措施来降低风险。这对提高信息通信系统的安全性、稳定性及其服务能力具有重要的理论价值和实际意义。同时,采用多任务分布式技术对海量日志进行分析挖掘,可使对日志的分析深度与事件的识别准确度得到进一步的提升。

日志数据在以下几方面具有非常重要的作用:第一个方面是数据查找,通过检索日志信息,定位相应的应用错误,找出解决方案;第二个方面是服务诊断和分析,通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态;第三个方面是数据分析,通过分析挖掘,应用规则关联、统计关联等分析方法,可以建立科学的分析模型。

2.微服务日志架构及功能

微服务日志解决方案的原理是对分散的、大量的微服务日志进行集中管理。实现方式是在每个微服务容器运行日志监控,通过异步消息等多种方式把所有日志采集回来进行集中管理和存储,再通过简易操作的统一日志管理界面进行查询、索引和分析。

微服务日志系统在日志收集、缓冲、处理、存储等各个阶段均采用了分布式、微服务化的部署方式,使日志处理的全流程均可根据实际使用情况进行动态弹缩,有效地利用了物理资源,并能够应对大规模的日志情况。微服务日志解决方案采用倒排索引方式的日志存储,提高了查询和统计效率,在实际项目中使用效果良好。微服务日志系统整体架构如图1所示。 

微服务运行时基础架构概述——微服务日志监控

微服务日志系统整体架构图

微服务日志系统包括日志收集组件、日志缓冲组件、日志处理组件、日志存储和日志展示组件等组成。微服务日志系统的构成模块及其内容说明如表1所示。

1  微服务日志系统的构成模块及其功能描述

微服务运行时基础架构概述——微服务日志监控

3.常用微服务日志的解决方案

常用微服务日志管理采用的是ELK解决方案。ELK ElasticsearchLogstashKibana 三个开源软件框架的组合。ELK日志管理解决方案如图2所示。

2 ELK日志管理解决方案

微服务日志系统的实现过程:

日志收集。在分布式场景中,各个微服务应用上都增加了一个日志采集模块,这个日志采集模块负责收集本微服务应用上各种类型的日志,根据配置将日志发送到Logstash 集群。Logstash框架是一个开源的数据收集引擎,支持动态的从各种数据源搜集数据。作为Kafka 的消息生产者,把这些日志发送到不同的Kafka 消息主题,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。Logstash框架具备实时数据传输能力,它可以统一过滤来自不同源的数据,并按照开发者制定的规范输出到目的地。Logstash 框架收集数据对象就是日志文件。由于日志文件来源多(如系统日志、服务器日志等),且内容杂乱,不便于观察。因此,可以使用 Logstash 框架对日志文件进行收集和统一过滤。

日志缓冲。Kafka框架对不同类型的日志需要有不同的目录空间。在Kafka框架中,这个目录空间叫TopicKafka有自动的主题创建模式,即当Kafka接收到一条消息,发现消息中的Topic没有,就自动创建。因此,只需要约定每种日志的Topic,在Logstash框架中进行相关的配置,Kafka 上并不需要做预定义的主题创建。

日志处理。Logstash indexer负责从Kafka 拉取日志信息,处理从原始数据到ElasticSearch所要求的数据格式的转换,例如日期格式转换为预定义的格式,某些字段的去除、字段的合并转换等;从日志信息中抓取关键字,判断出应该写入ElasticSearch的哪个index 中,并将信息存入ElasticSearch对应的index

日志存储。日志存储在ElasticSearch 框架中,ElasticSearch 框架是一个基于 Lucene开发的分布式搜索引擎,具有高可伸缩、高可靠、易管理等特点。ElasticSearch 框架可以用于全文检索、结构化检索和分析,提供了REST API的操作接口,开箱即用。ElasticSearch 也是使用集群方式进行部署,其集群节点分为3种类型:Master node Client nodeData node。其中Master Mode是集群的管理节点,主要功能是维护元数据,管理集群各个节点的状态;Client node用于分发的节点,负责将收到的请求分发到各个Data nodeData node负责数据的存储、查询和导入。日志系统的管理服务预先在ElasticSearch 框架上进行初始化动作,创建存储结构,指定字段的类型和相关属性。

日志展示。日志系统的界面使用了Web 页面方式,拆分了一个专门做展示的微服务,该微服务在Web界面中集成了Kibana 的图表进行日志的统计、查询结果的展示,另外提供了日志信息导出的功能。主要展示信息包括:日志数量变化趋势图、日志TOPN 的实例图、失败时间日志分析图、日志查询结果。Kibana框架是一个开源的分析与可视化平台,可以与ElasticSearch框架协同使用的可视化平台。Kibana框架能够搜索、查看、交互、展示存储在 ElasticSearch 框架中的索引数据。使用它可以很方便地用图表、表格、地图来展示和分析数据,提供高级数据分析与可视化功能。

ELK集成日志平台具有如下几个优点:(1)配置简易上手,ElasticSearch 框架全部采用JSON 接口,Logstash 框架是 Ruby DSL 设计,都是目前业界最通用的配置语法设计;(2)检索性能高效,ElasticSearch 是实时全文索引;(3)集群线性扩展,ElasticSearch 集群和Logstash 集群都是可以线性扩展的;(4)前端展现可视化,在Kibana 界面的仪表板上,非常容易实现搜索、聚合等可视化功能。同时,还可以在ELK集成平台上进行拓展性开发。

 

本文摘抄自书籍《微服务体系建设和实践》,略有改动。如需要更全面和体系化地了解更多细节内容,请阅读书籍《微服务体系建设和实践》。