一种基于ELK的日志存储方法技术

技术编号:38808435 阅读:8 留言:0更新日期:2023-09-15 19:47
本发明专利技术公开了一种基于ELK的日志存储方法,属于计算机技术领域,包括:S1:建立调用链日志记录器、异常日志记录器和重要日志记录器;S2:通过调用链日志记录器获取链路日志,通过异常日志记录器获取异常日志,通过重要日志记录器获取重要日志;S3:使所述调用链日志记录器、异常日志记录器和重要日志记录器共享requestId、sessionId、用户ID、用户名和入口方法名。所述基于ELK的日志存储方法解决了现有的日志存储方式保存的日志量有限,并且异常日志会抛出从而丢失了异常日志的问题。志会抛出从而丢失了异常日志的问题。志会抛出从而丢失了异常日志的问题。

【技术实现步骤摘要】
一种基于ELK的日志存储方法


[0001]本专利技术涉及计算机
,特别涉及一种基于ELK的日志存储方法。

技术介绍

[0002]ELK是三个开源软件的缩写,分别表示:Elasticsearch、Logstash和Kibana,它们都是开源软件。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能,它的特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源和自动搜索负载等。Logstash主要是用来日志的搜集、分析和过滤日志的工具,支持大量的数据获取方式,一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往Elasticsearch上去。Kibana也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的web界面,可以帮助汇总、分析和搜索重要数据日志。行业内很多公司用ELK作为日志系统。
[0003]目前行业内的大多数使用的方案,是将调用链路中的所有日志统一输出到Elasticsearch的一个日志索引中(Elasticsearch中的索引等同于数据库中表的概念),如图1所示。
[0004]当用户对某个web进行一次访问时,将会产生如图2的调用链:web

>服务A

>服务C

>数据库,或者web

>服务A

>服务B

>数据库。现有的这种方案一般会在调用的入口处产生一个requestId(请求标识),调用经过方法或服务(图2中的是经过服务)都会有日志探针将当前方法名、入参、出参、调用所用时间等连同requestId记录到ELK系统中。
[0005]但是这种方式会有以下问题:
[0006]记录调用链将会产生大量的日志(尤其是在大系统中),这就导致可保存的日志量有限,需要定期清理。一般的系统中,只会保留三到六个月的日志。但有一些重要的日志企业是希望永久保存下去的。
[0007]这种记录方式,在调用链中出现异常时,这时异常日志和链路日志都会保存在同一索引下,因此不利于异常日志的搜索。从图1中可以看出,当有异常日志时不能从当前视图马上知道异常发在哪个位置。此外,因为链路日志是海量的,因此在链路日志里搜索异常日志会比较慢。另外,在java程序中,有时一些异常并不想抛出而是try catch(捕获异常),如图3,此处虽然有异常,但业务并不希望抛出,这时就会丢失了异常日志。

技术实现思路

[0008]为了克服现有技术存在的缺陷,本专利技术提供一种基于ELK的日志存储方法,以解决上述的问题。
[0009]本专利技术解决其技术问题所采用的技术方案是:一种基于ELK的日志存储方法,包括:
[0010]S1:建立调用链日志记录器、异常日志记录器和重要日志记录器;
[0011]S2:通过调用链日志记录器获取链路日志,通过异常日志记录器获取异常日志,通过重要日志记录器获取重要日志;
[0012]S3:使所述调用链日志记录器、异常日志记录器和重要日志记录器共享requestId、sessionId、用户ID、用户名和入口方法名。
[0013]值得说明的是,在所述步骤S1中,于所述调用链日志记录器设置方法info(Stringmethod,Date statTime,Object result,Object args),其中参数String method为字符串方法,参数Date statTime为方法开始时间,参数Object result为对象结果,参数Object args为返回结果;
[0014]通过方法info(Stringmethod,Date statTime,Object result,Object args),在链路日志上下文中获取requestId、sessionId、用户ID和用户名,并将requestId、sessionId、用户ID和用户名连同参数String method、参数Date statTime、参数Object result和参数Object args一起记录到链路日志中;
[0015]在建立调用链日志记录器后,将调用链日志记录器设置在web入口日志层、web异常拦截层、dubbo调用拦截层、mybatis拦截层和dubbo服务前置拦截层,并设置成对程序员不可见状态。
[0016]可选的,在所述步骤S1中,于所述异常日志记录器设置方法error(Throwable e)或者方法error(String message,Throwable e),其中参数Throwable e为可抛出的异常对象e,参数String message为异常说明;
[0017]通过方法error(Throwable e)或者方法error(String message,Throwable e),在异常日志上下文中获取requestId、sessionId、用户ID、用户名和入口方法,并将requestId、sessionId、用户ID、用户名和入口方法连同参数Throwable e和/或参数String message一起记录到异常日志中;
[0018]在建立异常日志记录器后,将异常日志记录器设置在web异常拦截层、dubbo调用拦截层、mybatis拦截层和dubbo服务前置拦截层,并设置成程序员可调用状态。
[0019]具体地,在所述步骤S1中,于所述重要日志记录器设置方法log(String funName,String message),其中参数String funName为功能名称,参数String message为功能信息;
[0020]通过方法log(StringfunName,String message),在重要日志上下文中获取requestId、sessionId、用户ID、用户名和入口方法,并将requestId、sessionId、用户ID、用户名和入口方法连同参数StringfunName和参数String message一起记录到重要日志中;
[0021]在建立重要日志记录器后,设置成程序员可调用状态。
[0022]优选的,在所述步骤S1中,当有请求进入web入口日志层时,先记录入口方法的方法、方法开始时间和参数,在请求返回时,返回结果记录,然后用调用链日志记录器输出链路日志。
[0023]可选的,在所述步骤S1中,当请求进入入口方法后,并且入口方法内部抛异常时,将被web异常拦截层拦截,然后从web入口日志层中获取方法、方法开始时间和参数,将异常的信息作为结果,用调用链日志记录器输出异常日志,然后再用异常日志记录器的error(Throwable e)方法输出异常的详细信本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于ELK的日志存储方法,其特征在于,包括:S1:建立调用链日志记录器、异常日志记录器和重要日志记录器;S2:通过调用链日志记录器获取链路日志,通过异常日志记录器获取异常日志,通过重要日志记录器获取重要日志;S3:使所述调用链日志记录器、异常日志记录器和重要日志记录器共享requestId、sessionId、用户ID、用户名和入口方法名。2.根据权利要求1所述的一种基于ELK的日志存储方法,其特征在于:在所述步骤S1中,于所述调用链日志记录器设置方法info(String method,Date statTime,Object result,Object args),其中参数String method为字符串方法,参数Date statTime为方法开始时间,参数Object result为对象结果,参数Object args为返回结果;通过方法info(String method,Date statTime,Object result,Object args),在链路日志上下文中获取requestId、sessionId、用户ID和用户名,并将requestId、sessionId、用户ID和用户名连同参数String method、参数Date statTime、参数Object result和参数Object args一起记录到链路日志中;在建立调用链日志记录器后,将调用链日志记录器设置在web入口日志层、web异常拦截层、dubbo调用拦截层、mybatis拦截层和dubbo服务前置拦截层,并设置成对程序员不可见状态。3.根据权利要求2所述的一种基于ELK的日志存储方法,其特征在于:在所述步骤S1中,于所述异常日志记录器设置方法error(Throwable e)或者方法error(Stringmessage,Throwable e),其中参数Throwable e为可抛出的异常对象e,参数String message为异常说明;通过方法error(Throwable e)或者方法error(String message,Throwable e),在异常日志上下文中获取requestId、sessionId、用户ID、用户名和入口方法,并将requestId、sessionId、用户ID、用户名和入口方法连同参数Throwable e和/或参数String message一起记录到异常日志中;在建立异常日志记录器后,将异常日志记录器设置在web异常拦截层、dubbo调用拦截层、mybatis拦截层和dubbo服务前置拦截层,并设置成程序员可调用状态。4.根据权利要求3所述的一种基于ELK的日志存储方法,其特征在于:在所述步骤S1中,于所述重要日志记录器设置方法log(String funName,String message),其中参数String funName为功能名称,参数String message为功能信息;通过方法log(String funName,String message),在重要日志上下文中获取requestId、sessionId、用户ID、用户名和入口方法,并将requestId、sessionId、用户ID、用户名和入口方法连同参数String funName和参数String message一起记录到重要日志中;在建立重要日志记录器后,设置成程序员可调用状态。5.根据权利要求4所述的一种基于ELK的日志存储方法,其特征在于:在所述步骤S1中,当有请求进入web入口日志层时,先记录入口方法的方法、方法开始时间和参数,在请求返回时,返回结果记录,然后用调用链日志记录器输出链路日志。6.根据权利要求5所述的一种基于ELK的日志存储方法,其特征在于:在所述步骤S1中,当请求进入入口方法后,并且入口方法内部抛异常时,将被web异常拦截层拦截,然后从web
...

【专利技术属性】
技术研发人员:李宝君何玉华
申请(专利权)人:全通金信控股广东有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1