基于微服务架构的日志系统

2017-03-15 12:02黄媛媛王彬龙卉刘学生
电子技术与软件工程 2017年2期
关键词:微服务大容量日志

黄媛媛++王彬++龙卉++刘学生

摘 要 由于软件系统的规模日趋扩大和由此带来的复杂性,会产生大量的日志信息,这些日志需要存储以备查询和分析,而传统的关系数据库对日志存储、查询、分析的能力有限,因此,需要考虑一种大容量复杂场景的日志解决方案。本文介绍了一种基于微服务化架构的日志系统,在日志的收集、处理、存储、展示各个流程都使用微服务方式部署,支持动态扩容缩容、支持大规模日志的处理和存储,满足了复杂使用场景的日志需求。

【关键词】日志 大容量 微服务

1 引言

传统的单体应用,日志一般来说有两种管理方式:记录在本地文件中,当需要分析、处理时,从文件中抽取对应的信息,来进行人工分析;另一种处理方式是把日志信息存储在数据库中,通过数据库语句来进行查询和分析。

随着软件系统的容量、复杂度日趋提高,原有的日志管理模式存在的问题:支持的存储量不高、处理能力有限、大数据量下查询速度缓慢等问题也一一暴露。为了解决这一系列的问题,本文提出了一种微服务化的日志处理方案,以提升日志管理规模和管理效率。

2 背景

通常一个复杂的系统,都是由若干个独立的应用集成起来的,这些应用互相之间有调用关系,出现问题时,需要对问题进行跟踪定位,这时候需要依靠完善的日志记录和日志集中查询;日常工作中,也需要对系统运行的情况进行统计分析,为决策提供有效的分析数据。

因此,需要一个处理能力强、查询速度快的日志系统,由它对日志进行采集和存储,提供搜索、分析、可视化等功能,帮助系统进行线上业务实时监控、业务异常原因定位、业务日志数据统计分析、及安全与合规审计。

3 ELK Stack

ELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。

和传统的日志处理方案相比,ELK Stack 具有如下几个优点:

处理方式灵活。Elasticsearch 是实时全文索引,不需要像 storm 那样预先编程才能使用;

配置简易上手。Elasticsearch 全部采用 JSON 接口,Logstash 是 Ruby DSL 设计,都是目前业界最通用的配置语法设计;

检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应;

集群线性扩展。不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的;

3.1 kafka

Linkin公司开源的kafka,是一种pull模式的消息队列,具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高,很适合日志这种数据量大的应用场景。

4 设计与实现

在本日志系统中,将ELK开源套件作为日志系统的一部分,在此基础上进行了一系列的封装开发,使之可以适用于本系统的架构模式。

4.1 日志收集

在分布式場景下,各个应用微服务上都增加了一个日志采集模块,这个日志采集模块负责收集本微服务上的各种类型的日志,根据配置将日志发送到logstash的集群负责日志收集的logstash shipper采用集群方式部署,开放端口接收数据,接收到数据后,根据日志信息中的关键字段值,作为kafka的消息生产者,把这些日志发送到不同的kafka消息主题。

4.2 日志缓冲

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

4.3 日志处理

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

4.4 日志存储

日志存储在ElasticSearch中,同样ElasticSearch也是使用集群方式来进行部署,ElasticSearch集群节点分为三种类型:master node 、client node、data node。

Master mode:集群的管理节点,主要功能是维护元数据,管理集群各个节点的状态。

client node:用作分发的节点,负责将收到的请求分发到各个data node。

Data node: 负责数据的存储、查询和导入。

ElasticSearch存储结构定义:本日志系统的管理微服务预先在ElasticSearch上进行初始化动作,创建存储结构,指定字段的类型和相关属性。

4.5 日志展示

本日志系统的界面使用了web页面方式,拆分了一个专门做展示的微服务,该微服务在web界面中集成了kibana的图表进行日志的统计、查询结果的展示,另外提供了日志信息导出的功能。

主要展示信息包括:日志数量变化趋势图、日志TOPN的实例图、失败时间日志分析图、日志查询结果。

5 结论

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

作者单位

中兴通讯 四川省成都市 610041

猜你喜欢
微服务大容量日志
一名老党员的工作日志
扶贫日志
12-20升大容量PET瓶装式吹瓶机
游学日志
微信公众平台在医院图书馆的应用现状调查
从单一模式系统架构往微服务架构迁移转化技术研究
能变出雨衣的18升大容量背包
基于大容量指纹识别的实时身份认证系统
大容量Flash在井下记录仪中的应用
一种基于粗集和SVM的Web日志挖掘模型