一种基于访问日志进行性能监控的系统及方法与流程

文档序号:15385092发布日期:2018-09-08 00:28阅读:292来源:国知局

本发明属于计算机数据处理中监控技术领域,涉及一种基于访问日志进行性能监控的系统及方法。



背景技术:

性能监控是系统运行过程中非常重要的一环,通过性能监控能够随时掌握系统运行情况,从而能够在发生异常时即使采取处理手段,并能够作为后期调试的重要参考依据。

nginx,apache,tocmat等的访问日志常常被用来做性能监控。

目前在进行性能监控时,通常会分析一天的平均响应时间,分接口的平均响应时间,分接口按时间段比如小时统计平均响应时间等指标。根据平均响应时间作为指标,简单的乘以一个系数来作为,告警基线。但这种方法存在以下缺陷:

1.由于各访问日志有差别,以及随时间不断变化的特点,导致指标算法的系数需要凭经验调整时,效率低下:这是由于不同的访问日志,需要使用不同的系数。如果访问日志量较大,则需要更多的时间来设置。此外当时间变化时(比如淡旺季的变化),系数会失效,产生很多的误报漏报情况。这时需要重新设置,费时费力。

2.当平均响应时间已经很小时,设置系数来形成告警基础数会面临困境:若设置小系数,当流量小时影响并不大,会误报;若设置大系数,当流量大的时候,且响应时间小于基线时,这时已经形成了大的影响,会漏报。所以设置系数需要权衡需求(误报漏报),鱼和熊掌不可兼得。

3.直观的监控页面一般一个系统的访问日志,只需要一个核心曲线来展示。但针对分接口不同系数的方案,很难整合起来,只能挑选一部分的核心接口来展示,无法全面展示其关联性。这就需要监控人员凭经验来判断,系统整体是否有问题,很难精确化。



技术实现要素:

为解决上述问题,本发明公开了一种基于访问日志进行性能监控的系统及方法,能够进行灵敏且直观的性能分析,且通用性强。

为了达到上述目的,本发明提供如下技术方案:

一种基于访问日志进行性能监控的系统,包括:访问数据收集模块、数据计算和推送模块、实时接收和展示模块;访问数据收集模块用于产生、转换并存储统一格式的日志并将日志传送给数据计算和推送模块,数据计算和推送模块用于对日志进行分析计算,并将结果推送给实时接收和展示模块,实时接收和展示模块用于实时获取数据计算和推送模块分析结果并进行相关展示。

进一步的,所述访问数据收集模块包括日志产生单元和日志存储单元,日志产生单元用于对日志进行格式化处理,日志存储单元用于存储日志,针对需要存储的日志计算w值,若w为1则不存,w的计算公式如下:

w=pre>baseline&&(pre-cpre-csqrt*p)

上式中,pre为接口当前时间点的平均响应时间,baseline为整体响应时间基线,baseline=apre+m*asqrt;apre为取一整天的数据计算出来的均值,asqrt为取一整天的数据计算出来的方差,m为概率因子;cpre为根据存储数据计算出来的均值,csqrt为根据存储数据计算出来的方差;

数据计算和推送模块包括数据计算单元、指标推送单元和产生告警单元,所述数据计算单元用于根据数据类型来识别日志格式以及分别属于哪些系统,为每个系统单独生成一个数据计算脚本用于进行日志数据收集,然后根据以下算法计算当前的y值:

y=w*(pre–cpre)/cpre/100*counts*((pre>outline)+1)topnumber

其中,counts为接口当前时间点的访问量,topnumber为排名取值范围,outline为用户体验性能边界;

指标推送单元用于将计算出来的y值推送给各个浏览器接收;

产生告警单元用于计算分接口的y值之和ally,当ally大于某个基线值时产生报警,ally计算公式如下:

ally=σyn*(1+coverage)

其中,yn为排名为n的y值,coverage为异常比例;

实时接收和展示模块包括实时接收单元和曲线展示单元,实时接收单元用于获取数据,接收到的数据,交给曲线展示来进行展示;曲线展示单元用于在页面上展示曲线,包括ally曲线和至少部分接口的y曲线。

进一步的,所述日志产生单元中格式化处理过程包括:

1.首先用正则的方法,判断url中是否有“统一入口”,若存在则将问号“?”去掉;

2.然后再用正则的方法,将类似于统一入口的“例外情况”识别出来,将它们替换成空;

3.随后,依次将数字“/[0-9]+/”换成$符号,锚记后的内容“/#.*/”换成空;

4.再统一将问号“?”改成“&”符号;

5.最后根据需求,取自己需要的参数数量,去掉其余参数。

进一步的,所述日志存储单元存储数据时将一天按时间段分割成一系列固定的点,并为每个点各分配一个存储队列。

进一步的,计算cpre时,选取当前时间段对应的点以及前面的若干几个点,再取这些时间点对应队列中的若干数据。

进一步的,所述指标推送单元将数据放置到websocket消息服务器中,由它实时的放送给各个浏览器websocket接收端接收。

基于访问日志进行性能监控的方法,具体包括如下步骤:

步骤1,访问数据收集

步骤1-1,收集访问数据日志,并对日志进行格式化处理;

步骤1-2,将经过步骤1-1处理后的格式化日志进行存储,针对需要存储的日志计算w值,若w为1则不存,w的计算公式如下:

w=pre>baseline&&(pre-cpre-csqrt*p)

上式中,pre为接口当前时间点的平均响应时间,baseline为整体响应时间基线,baseline=apre+m*asqrt;apre为取一整天的数据计算出来的均值,asqrt为取一整天的数据计算出来的方差,m为概率因子;cpre为根据存储数据计算出来的均值,csqrt为根据存储数据计算出来的方差;

步骤2,数据计算和推送

步骤2-1,自动分析出一共有多少日志,并识别日志格式以及分别属于哪些系统,为每个系统单独生成一个数据计算脚本,计算脚本用于进行日志数据收集,根据以下算法计算当前的y值:

y=w*(pre–cpre)/cpre/100*counts*((pre>outline)+1)

其中,counts为接口当前时间点的访问量,outline为用户体验性能边界;

步骤2-2,将计算出来的y值推送给各个浏览器接收;

步骤2-3,计算分接口的y值之和ally,当ally大于某个基线值时产生报警;ally计算公式如下:

ally=σyn*(1+coverage)

其中,yn为排名为n的y值,coverage为异常比例;n的取值范围是1-topnumber,topnumber为排名取值范围;

步骤3,实时接收和展示

步骤3-1,获取数据;

步骤3-2,接收到数据后,在页面上展示曲线,包括ally曲线和至少部分接口的y曲线。

与现有技术相比,本发明具有如下优点和有益效果:

本发明提供了一套通用的灵敏且直观的性能分析系统,各访问日志的告警算法要求相同,不需要分别设置;不受异常数据的影响,有助长期自动学习,保证指标长期准确;算法能够很好的权衡误报漏报;根据算法算出来的分接口指标能够合起来作为整体展示,展示页面能够自动刷新数据,且效率比较高,方便操作,且能够当成直播页面展示;能够实时分析日志,且支持分布式的日志。

附图说明

图1为本发明提供的基于访问日志进行性能监控的系统结构示意图。

图2为访问分析总性能指标曲线图。

图3为某一接口的指标曲线图。

具体实施方式

以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

如图1所示,本发明提供的基于访问日志进行性能监控的系统,包括:访问数据收集模块、数据计算和推送模块、实时接收和展示模块。访问数据收集模块用于产生、转换并存储统一格式的日志并将日志传送给数据计算和推送模块,数据计算和推送模块用于对日志进行分析计算,并将结果推送给实时接收和展示模块,实时接收和展示模块用于实时获取数据计算和推送模块分析结果并进行相关展示。

其中,访问数据收集模块包括日志产生单元和日志存储单元,日志产生单元用于对日志进行格式化处理。nginx,tomcat,apache等web容器都是分布式部署的,它们产生了分布式的日志。由于不少的接口中带有参数,必须进行格式化接口,将变量替换成标识来完成唯一标识。

需要在这些接口中替换以下部分:入口url、特殊规则的path、数字字符、#命名锚记、多余的变量(比如只取第一个变量,后面的都不取),?符号。

该格式化过程可以用logstash中的语言实现,对url进行如下处理:

1.首先用正则的方法,识别url中一部分“统一入口”,将url中的“?”去掉,防止不同的接口混成一个样子。

2.然后再用正则的方法,识别url中一部分也类似于统一入口的“例外情况”(应根据需要预先设定属于例外情况的规则),将统一入口的标识换成空,防止其实一样的接口被判断成一个接口。

3.随后,依次将数字“[0-9]”,锚记后的内容“#.*”换成空,防止它们进行干扰。

4.接下来,再统一将问号“?”改成“&”符号。

5.最后根据需求,取自己需要的参数数量,比如只需要取第一个的就可以,那么将满足“&.*”的内容正则去掉,即去掉后面其他的参数。

经过以上处理,能够将接口转化成格式化的标识。各分接口经过格式化转化后,能够将日志按照预先规定的格式发送出来。

日志存储单元用于存储日志,所用的技术可以用elasticsearch来存储。使用多个elasticsearch机器组成集群保证数据的大量存储。存储好的数据,对外提供api访问,这部分可以参考kibana。在进行数据计算时,就会用到这些api接口完成数据收集。接口需要分时间段,比如,每3分钟计算一次。这些数据被存储入range中,range用于针对性的存储相关的数据。

日志存储单元将一天按前述的时间段分割成一系列固定的点,并为每个点各分配一个队列。针对应存储入各个时间点的数据计算w值,将符合的相关数据都进队列,不同天的同一时间点的数据会进同一个队列。若w为1则不存。w表示是否属于异常,值为0或者1,w为1的数据是异常数据,不存的话可以保证本发明数据不受异常数据的影响,有助长期自动学习,保证指标长期准确。w的计算公式如下:

w=pre>baseline&&(pre-cpre-csqrt*p)

上式中,pre为接口当前时间点的平均响应时间,baseline为整体响应时间基线,baseline=apre+m*asqrt。

其中,apre为取一整天的数据计算出来的均值,asqrt为取一整天的数据计算出来的方差,baseline根据一整天的数据得出来的apre和asqrt来定,m的制定方案一般设置为2.或者自己根据自身情况,进行调整。m为概率因子,由于考虑了历史时间点的数据,可以假设当前的数据符合正太分布,所以参考正太分布的数据计算公式,不同概率对应不同的因子大小。本发明默认取概率1%作为基准。

cpre为range中的数据计算出来的均值。csqrt为range中的数据计算出来的方差。当计算cpre时,取的范围是当前时间段对应的点以及前面的几个点(一般是7个),再取这些时间点对应队列中的几个数据(一般也是7个),这样就保证每个时间段点有很多个正常的数据作为抽样数据。计算这些数据的cpre和csqrt能够得到当前时间段的平均性能以及方差。

数据计算和推送模块包括数据计算单元、指标推送单元和产生告警单元。

其中,数据计算单元能够通过elk接口自动分析出一共有多少日志,自动根据nginx,apache,tomcat的数据类型来识别日志格式以及分别属于哪些系统。为每个系统单独生成一个数据计算脚本。计算脚本每间隔时间段,进行日志数据收集,收集分接口的访问量以及响应总时长,将这些数据发送至访问数据收集模块进行处理和存储,然后根据算法计算当前的y值。

y=w*(pre–cpre)/cpre/100*counts*((pre>outline)+1)

其中,y为最终结果指标数值,counts为接口当前时间点的访问量。考虑到性能问题一般集中在少部分接口中,只计算这部分的接口基本就够用了,这样能够节约计算量,减少不必要的存储。将一个时间段中的,分接口各自响应时间计算总和,按总和的倒序排名,取前topnumber名。outline为用户体验性能边界,当性能超过一定值的时候,用户体验会非常差,基本上会导致流量流失很多,所以需要设置一个这个边界值,给y加权。一般网站用户的边界在1-10秒范围内。可以默认2秒。pre和cpre的差比例乘以counts可以兼顾监控性能差小但访问量大,和性能差大但访问量小的情况。

指标推送单元用于将计算出来的y值,放置到websocket消息服务器中,由它实时的放送给各个浏览器websocket接收端接收。这里的websocket的技术用java和php等都方便实现。

产生告警单元,用于计算分接口的y值之和ally,ally表示总性能指标,当ally大于某个基线值时就会产生一般的报警。基线值根据需要设置,比如100,大于100就触发告警。

ally=σyn*(1+coverage)

其中,yn为排名为n的y值,coverage为异常比例,是指在topnumber中w为异常的接口占比,占比越高说明,问题范围广。这时有必要给ally一个权重加成。n的范围是1-topnumber,topnumber为排名取值范围。

实时接收和展示模块包括实时接收单元和曲线展示单元。

实时接收单元用于获取websocket消息服务器的数据,由于浏览器需要实时的获取websocket消息服务器的数据,本单元使用js来实现websocket的接收端。消息本身按照系统来分组,指定分组就可以获取对应系统的y和ally详情。接收到的数据,交给曲线展示来进行展示。

曲线展示单元接收到实时接收单元传输的数据后,在页面上展示曲线。由于拥有ally和分接口的y的详细数据,所以直播页面可以以ally的曲线为主,辅助一部分的分接口的y曲线进行展示。图2曲线图中,底部的线就是核心指标曲线,圆圈圈起的突起部分就是告警时的展示。ally用spline曲线展示,各接口的指标数据累加在一起展示spline曲线,可以比较直观的看到整体系统的性能异常。图3曲线图为某一接口的y曲线图,底部的线为y值图,圆圈圈起的突起部分就是异常数据值。

基于上述系统,本发明还提供了基于访问日志进行性能监控的方法,具体包括如下步骤:

步骤1,访问数据收集

步骤1-1,收集访问数据日志,并对日志进行格式化处理,格式化过程参照日志产生单元中实现的功能。

步骤1-2,将经过步骤1-1处理后的格式化日志进行存储,按前述的时间段分割成一系列固定的点,并为它们各分配一个队列。将每次计算出来的相关数据都进队列,若w为1则不存。w计算方法参照前述日志存储单元中w的计算公式。

步骤2,数据计算和推送

步骤2-1,自动分析出一共有多少日志,并识别日志格式以及分别属于哪些系统,为每个系统单独生成一个数据计算脚本,计算脚本用于进行日志数据收集和推送,然后根据算法计算当前的y值。y值计算参照数据计算单元中y计算公式。

步骤2-2,将计算出来的y值,放置到websocket消息服务器中,由它实时的放送给各个浏览器websocket接收端接收。

步骤2-3,计算分接口的y值之和ally,当ally有值时或是大于某值就会产生一般的报警。这里可以定义大于一个基线值,比如100就触发告警。

步骤3,实时接收和展示

步骤3-1,获取websocket消息服务器的数据,使用js来实现websocket的接收端。消息本身按照系统来分组,指定分组就可以获取对应系统的y详情。接收到的数据,交给曲线展示来进行展示。

步骤3-2,接收到实时接收单元传输的数据后,在页面上展示曲线。以ally的曲线为主,辅助一部分的分接口的y曲线进行展示。如图2、图3所示。

本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1