基于SpringBoot+MongoDB的微服务日志系统的实现

来源 :计算机时代 | 被引量 : 0次 | 上传用户:liongliong522
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:微服务的出现大大降低了Web系统的耦合度,但随着微服务的规模不断增大,其运行日志的数量不断增多、内容也更加杂乱,给用户查看日志数据带来困难,因此对微服务的运行日志进行处理具有重要意义。文章介绍的微服务日志系统,采用SpringBoot开发,利用非关系性数据库MongoDB作为日志系统的存储库,提供日志管理的相关接口,从而极大地提高了对日志数据管理和应用的效率。
  关键词:微服务;日志数据;查询;SpringBoot;处理;MongoDB
  中图分类号:TP311 文献标识码:A 文章编号:1006-8228(2020)08-69-04
  0 引言
  当前微眼务的治理框架大多采用SpringCloud,如果把基于微服务架构的系统比作是一栋大楼,钢筋混凝土结构可以说是SpringCloud,那么最基础的砖头瓦块就是SpringBoot。所谓的独立的微服务是用SpringBoot开发的,作为一套全新的框架,继承了Spring所有的功能并青出于蓝;SpringBoot的约定大于配置的核心思想,默认帮用户做了许多基础设置,很多SpringBoot应用只需要很少的Spring配置就可以正常运行。同时,SpringBoot也提供了很多应用集成包,支持绝大多数开源软件,让用户可以以很低的成本去集成其他主流开源软件[2]。
  MongoDB是一个基于文档模型的,支持索引、复制、事务的数据库,是目前比较流行的非关系型数据库[1]。微服务在运行过程中,由于用户访问、计划任务等操作会产生大量日志,而MongoDB数据库系统就非常适合管理这些日志。首先,它易扩展,灵活的文档数据模型可以快捷直观地处理数据;第二,它和关系型数据库有共同点,具有丰富的数据查询语言,其主要的聚合函数操作如表l所示;第三,它以文件形式把数据加载在内存中,假如服务器的内存资源足够丰富,其插入和查询效率要高于关系型数据库[1]。
  由于SpringBoot本身就封装了MongoDB的套件,因此使用SpringBoot整合MongoDB做日志系统的开发,是相得益彰的。
  1 实现原理
  本系统共分为两个模块。一个是日志记录模块,是一个单独的依赖组件,需要被微服务所引用,使用Spring的AOP及SpringBoot等技术开发,用于在微服务运行过程中,对Http请求的内容以及产生的异常等信息进行捕获处理,并按照微服务名称以及日期进行分类记录到MongoDB数据库。另一个模块是日志管理模块,是用SpringBoot开发的独立的微服务,利用了MongoDB的相关特性,可提供日志数据的灵活查询、统计分析、批量删除、批量导出等功能接口供其他微服务调用[4]。
  2 具体实现
  2.1 功能模块
  2.1.1 日志记录
  日志记录模块在微服务内运行,主要负责在微服务运行过程中,将其产生的运行日志异步地记录到MongoDB数据库,其功能设计如图l所示。
  2.1.2 日志管理
  日志管理模块主要负责日志数据的管理,可对数据进行查询、统计分析、批量删除和导出,其功能设计如图2所示。
  2.2 软件接口
  2.2.1 写日志接口
  异步接口,其功能是将微服务产生的运行日志按照微服务名称、产生日期进行分类,并记录到MongoDB数据库。
  /**
  * @param info日志信息
  * @param level日志级别1 inf0 2 warn 3 error
  */|
  public void saveLog(String info, int level);
  2.2.2 查询日志接口
  提供日志数据的查询功能,根据微服务名称、日志产生日期筛选到指定的日志数据,并可根据具体的时间以及类型做进一步筛选,同时也可以根据日志内容做模糊查询[3,5,6]。
  /** @param appName微服务名称* @param date检索日期* @param time检索時间* @param timeType检索时间类型* @param searchStr检索字符串*/ public ListgetAppLogs(String appName,
  LocaIDate date, LocaITime time, int timeType,
  String searchStr);
  2.2.3 统计分析接口
  可根据微服务名称、分析类型、检索字符串等条件,同时利用MongoDB的聚合函数等,对日志数据进行统计分析,例如按小时、天、月统计某个微服务的日志数量。
  /**
  * @param appName微服务名称
  * @param type分析类型
  * @param searchStr检索字符串
  */
  public Object analyseAppLogs(String appName,
  int type, String searchStr);
  2.2.4批量删除日志接口
  根据微服务名称及指定的日期范围对日志进行批量删除。
  /**
  * @param appName微服务名称
  * @param startDate删除范围的起始日期
  * @param endDate删除范围的截止日期
  */
  public void deleteAppLogs(String appName,   LocaIDate startDate, LocaIDate endDate);
  2.2.5 批量导出日志接口
  根据微服务名称及指定的时间范围对日志进行批量导出。
  /**
  * @param appName微服务名称
  * @param startDate导出范围的起始时间
  * @param endDate导出范围的截止时间
  */
  public void exportAppLogs(String appName, LocaIDate
  startDate, LocaIDate endDate, int type);
  2.3 日志表设计
  为了方便日志系统将来拓展,特增加几个备用属性,表定义见表2。
  3 项目代码
  3.1 日志记录接口
  在业务系统的实际开发中,需要对日志进行不同级别的记录,这里提供四个级别的接口,来分别记录不同级别的日志。
  public interfaceLogger(
  /★调试级别,不记录/*,
  void debug(String info);
  /* info级别*/,
  void info(String info);
  /* warn级别 */,
  void warn(String info);
  /* error级别*/
  void error(String info);
  )
  3.2 请求跟踪
  对于微服务接收的Http请求,可以利用AOP切面技术来处理。首先可以利用Pointcut注解来对所有的web接口进行匹配,这样就可以在每一个请求的流转过程中进行内容的处理并记录日志[4]。
  /*切点,匹配包路径最后为controller的所有包下面类的所有方法+,
  @Pointcut(”execution(++..controIIer*.*(..))”)
  public void printPointCutController()O
  /*切点,匹配所有带有RequestMapping注解的方法*/,
  @Pointcut(”@annotation(org.springframework.web.bind
  .annotation.RequestMapping)“)
  public void printPointCutRequestMapping()O
  /* AOP切点交集,针对所有的web接口 */,
  @Pointcut(”printPointCutController0&&
  printPointCutRequestMapping0”)
  public void printPointCut()0
  /*调用web接口之前调用此方法,可以对请求的路径、地址、
  内容等进行记录*/,
  @Before(”printPointCut()”)
  public void doBefore(JoinPoint joinPoint){…)
  /*调用web接口之后调用此方法,可以对请求的返回结果等进行记录*,
  @AfterReturning(returning=”ret”, pointcut=”printPointCut0”)
  public void doAfterReturning(Object ret){…}
  /*调用web接口的过程中调用此方法,可以对请求的响应时
  间等进行记录+,
  @Around(”printPointCut()”)
  public Object doAround(ProceedingjoinPoint pjp){…}
  3.3 异常捕获
  在工具类上使用RestControllerAdvice注解可捕获运行过程中产生的异常,而在方法上使用ExceptionHandler注解会匹配异常。一旦捕获异常,此工具类会按照方法定义的前后顺序去匹配异常执行。
  @RestControllerAdvice
  public class ExceptionHandler{
  r匹配空指针异常*,
  @ Exception Handler(N uIIPointerException.class)
  public Object handleRException(RException e){…}
  /*匹配所有异常*/
  @ExceptionHandler(Exception.class)
  public Object handleRException(RException e){…}}
  4 結束语
  本文针对微服务日志规模庞大、难管理的问题,利用Spring的AOP切面技术、SpringBoot的配置管理及MongoDB数据库实现了对分散的微服务运行日志的统一收集处理。利用Spring的切面及SpringBoot的配置[6],可以获取到微服务的运行日志及异常信息。使用MongoDB数据库做存储,主要是MongoDB的易拓展、高性能等特性以及具备一定的统计分析查询功能,可以快速地对日志进行记录并可以灵活地查询、统计分析等。
  目前,根据上面的设计开发的日志系统已成功应用到多个微服务平台,运行状况良好,用户可直观便捷地对日志进行查询统计,大大提高了后台日志的利用率。
  参考文献(References):
  [1]宋瑜辉.基于MongoDB存储和分析辅助决裳系统中的海量日志[J].科技创新与应用,2019:2095-2945
  [2]张骁,应时,张韬.应用软件运行日志的收集与服务处理框架[J].计算机工程与应用,2018.10:1002-8331
  [3]杨旭东,陈婷,梁潇聆.基于web的本科毕业师生双选系统开发设计[J].软件,2018.39(5):182-188
  [4]李天赐,余海情.基于SSH框架试题系统的设计与实现[J].软件,2018.39(6):74-77
  [5]周芷仪,陈婷,袁莹静,陈龙.基于JavaScript的电子时钟效果实现[J].软件,2019.40(3):60-64
  [6]陈申平.敏捷软件开发中的配置管理探讨[J].软件,2018.39(5):134-138
  *基金项目:中国船舶集团有限公司科技创新项目(201823K)
  作者简介:闫四洋(1993-),男,江苏连云港人,本科,工程师,主要研究方向:企业应用开发。
其他文献
一、引言
期刊
2009年9月15日至18日在北京举行的十七届四中全会提出了要建设马克思主义学习型政党的目标。第十七次全国高校党建工作会议提出在新的历史起点上努力开创高校党建工作新局面的要求。如何建设马克思主义学习型政党?如何在新的形势下开创高校党建工作的新局面?笔者认为在新的历史时期,网络化时代,推进电子党务建设,无疑是创新民族地区高校党建,建设马克思主义学习型政党的有效途径。电子党务是一种运用现代化手段进行党
期刊
大学生物实验课程具有许多其它课程不具备的特点,例如操作性与观察性较强,理论与应用相结合比较密切等。针对这些特点的分析以及从教育技术的理论与应用上得到的启示,现代教育技术与大学生物实验课程的科学融合将会对大学生物实验课程的提高与改善提供许多支持,同时也会产生许多其它的收获。以下主要从技术和理论两方面对教育技术与大学生物实验课程的融合进行分析和思考。
期刊
一、教学方法的改革    掌握和熟悉知识点的最好方法.就是不断的结合实际的案例(案例教学法)或课题(项目教学法)的操作实际去掌握,促进学生学习的积极性和独立性,使整个教学更具实践性和实用性.项目教学法是在这种要求下应运而生的。
期刊
摘 要: 以浙江“科技大脑”业务管理系统为例,文章对“科技大脑”建设过程中的重难点、技术先进性及总体框架设计进行研究分析,在浙江省政府数字化转型统一架构体系下,通过主动运用互联网+,实现业务管理一站式集成,使科技业务全覆盖、科技服务新突破、决策分析更智能,使“科技大脑”成为政府数字化转型的重要基础平台。  关键词: 科技大脑; 数字化转型; 互联网+; 一站式集成  中图分类号:TP315
期刊
摘 要: 隨着AI技术的快速发展和产业结构的转型升级,职业院校迫切需要开发新的职业教育课程与之相适应。文章分析了AI时代职业院校课程开发所面临的现实挑战,从行业分析、工作分析、典型工作任务确定、学习领域描述、学习情境设计、课业文本设计和课程实施与评价等方面提出职业教育课程开发工学结合的开发范式,并根据该范式,开发云计算课程,以期实现职业院校课程开发的转型发展。  关键词: 工学结合; 职业院校;
期刊
摘要:为了实现Web环境下露头资料信息的共建共享机制,一套完备的用户权限控制模块必不可少。在经典RBAC(Role-based Access Control)模型基础上扩展一种考虑内容保密级别的权限控制模型,文章详细描述了该模块的功能设计和数据库设计,并在ASP.NET MVC框架下完成开发。开放式露头资料信息系统的用户权限控制模块的实现,可为同类互联网信息系统中的权限控制提供通用的解决方案。  
期刊
摘要:传统的协同过滤算法存在着冷启动、数据稀疏性和可扩展性等关键问题,这都使得用户的历史播放列表数据信息难以获得,从而导致推荐电影时精度较低。文章将聚类算法与SVD++模型相结合,通过K-means聚类算法将相似用户根据评分聚类的同时,并利用SVD++模型对聚类后的每个集群中的评分矩阵进行分解,从而解决相似用户查找效率低和评分矩阵数据稀疏性的问题,使得电影推荐系统具有较高的精度。  关键词:推荐系
期刊
摘要:为了进一步提高“安全服务中间件技术”课程的学习体验和学习效果,满足应用型人才培养目标要求,针对课程教学过程中存在的课程内容多、实践能力弱以及师生互动少等问题,尝试基于雨课堂的混合式教学模式改革.结果表明,该教学模式从某种程度上实现了课堂的翻转,能够赋予学生新的学习体验,有效培养学生自主学习能力,切实提高授课质量。  关键词:雨课堂;混合式教学;互联网+;中间件  中图分类号:G642.0 文
期刊
摘要:模糊C均值(FCM)聚类算法可以用来建立样本对类别的不确定性描述。文章提出一种基于拉普拉斯系数优化目标函数的FCM聚类算法。在目标函数中引入拉普拉斯系数,给对象之间的结构信息赋予权重,从而提高算法的质量和效率。通过紧凑性来优化聚类的有效性,并利用最大有效性的方法来提高改进算法的抗噪性能。仿真实验表明,改进的FCM算法与标准算法相比具有更准确的聚类效果,且受噪声影响小,鲁棒性强。  关键词:模
期刊