一种日志分析系统、方法及装置与流程

    专利2022-07-08  86


    本说明书实施例涉及计算机技术领域,特别涉及一种日志分析系统、方法及装置。



    背景技术:

    nginx是一个以高性能、高并发著称的http和反向代理web服务器,它支持http(hypertexttransferprotocol,超文本传输协议)反向代理、tcp(transmissioncontrolprotocol,传输控制协议)代理、负载均衡、http缓存及web开发等。

    ngnix程序在运行的过程中,会根据配置记录运行日志,在运行日志中包含http请求、http响应信息,这些信息对调试web程序非常重要。例如通过日志可以得到用户的ip地址、浏览器的信息,请求的处理时间等信息。目前常见的nginx日志分析管理系统方案主要包括使用单机分析工具,例如ngxtop或者goaccess,适合用于小型单机网站或临时问题分析。

    采用单机分析工具的方案,一般来说安装和使用都比较简单,可以按需要采用不同分析工具提供的分析数据,对nginx版本没有依赖,只要日志格式符合要求即可。

    但随着网站规模的扩大,采用单机分析工具的方案缺点日益显现,例如无法使用自定义监控数据,不支持nginx集群采集,日志格式不灵活等,使得日志分析的效率不高。



    技术实现要素:

    本说明书实施例的目的是提供一种日志分析系统、方法及装置,以提高日志分析的效率。

    为解决上述问题,本说明书实施例提供一种日志分析系统,所述系统包括采集模块、存储模块和分析模块;所述采集模块,用于获取表征日志内容的日志变量,对所述日志变量进行格式化,得到格式化后的日志数据,将所述日志数据传输至所述存储模块;所述存储模块,用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;所述分析模块,用于基于所述时序数据库,查询得到预设时间段内的日志数据,将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    为解决上述问题,本说明书实施例还提供一种日志分析方法,所述方法包括:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    为解决上述问题,本说明书实施例还提供一种日志分析装置,所述装置包括:获取模块,用于获取表征日志内容的日志变量;格式化模块,用于对所述日志变量进行格式化,得到格式化后的日志数据;存储模块,用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;查询模块,用于基于所述时序数据库,查询得到预设时间段内的日志数据;分析模块,用于将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    为解决上述问题,本说明书实施例还提供一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序以实现:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    为解决上述问题,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    由以上本说明书实施例提供的技术方案可见,本说明书实施例中,可以获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。本说明书实施例提供的方法,通过引入ngx_lua模块实现日志的采集,并将采集到的日志集中存储至时序数据库中,通过时序数据库提供的连续查询功能实现对日志的分析,支持集群化nginx访问日志采集,数据统一管理,统一计算,高性能低消耗地满足了日志数据采集需求,简化数据分析业务代码开发测试工作,提高日志分析的效率。

    附图说明

    为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1为本说明书实施例一种日志分析系统的功能结构示意图;

    图2为本说明书实施例一种日志分析方法的流程图;

    图3为本说明书实施例一种电子设备的功能结构示意图;

    图4为本说明书实施例一种日志分析装置的功能结构示意图。

    具体实施方式

    下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。

    nginx日志对于统计、系统服务排错很有用。当访问nginx服务时,nginx会记录日志。nginx日志分两种,一种是访问日志,一种是错误日志,访问日志记录在“access.log”文件中,错误日志记录在“error.log”文件中。错误日志记录了访问出错的信息,例如记录nginx处理http请求的错误的状态、nginx本身服务的运行错误状态等,按照不同的级别进行记录,可以帮助定位错误的原因。访问日志主要记录客户端的请求。客户端向nginx服务器发起的每一次请求都记录在这里。客户端ip、浏览器信息、referer、请求处理时间、请求url等信息都可以在访问日志中得到。当然具体要记录哪些信息,可以通过log_format指令定义。log_format可以将nginx中的变量组织在一起,记录到access_log中。

    使用nginx企业常常需要对nginx的访问日志进行采集、管理以及分析。大多数企业会使用多台nginx服务器集群部署,支持对nginx服务器集群的日志采集,支持对访问日志数据的集中管理、集中分析。通过nginx的访问日志进行采集、管理以及分析可以对减少大部分监控业务需求的开发时间,例如uri响应的平均值,以及tp90、tp99等(tp99一般用于体现服务的响应能力,即99%的请求可以在这个时间点以内获得响应)。

    常见的nginx日志分析管理系统方案主要包括两种。

    第一种方案是使用单机分析工具,例如ngxtop或者goaccess,适合用于小型单机网站或临时问题分析。以ngxtop为例,可以对采用默认格式保存的访问日志进行进行分析,其安装与分析的过程如下。

    1.安装。ngxtop使用python的pip命令安装即可。

    #yuminstallpython-pip

    #pipinstallngxtop

    2.执行分析。使用ngxtop命令进行访问日志分析。

    #ngxtop--config/usr/local/nginx/confnginx.conf-n10

    ngxtop会找到配置文件中access_log的位置,-n的作用是指定显示所输出的uri行数。

    第二种方案是在服务器中部署日志采集agent,采用大数据方案完成日志数据的存储与分析。例如:

    1.使用flume收集访问日志,将数据格式化后写入kafka;

    2.kafka中的数据被storm实时分析,并在计算后写入elasticsearch;

    3.elasticsearch中的数据被用于实时和离线的各类数据统计。

    对于第一种采用单机分析工具的方案,一般来说安装和使用都比较简单,可以按需要采用不同分析工具提供的分析数据,对nginx版本没有依赖,只要日志格式符合要求即可。但随着网站规模的扩大,其缺点日益显现,例如无法使用自定义监控数据,不支持nginx集群采集,日志格式不灵活等。

    对于第二种部署日志采集agent的方案,可以自定义日志格式,支持nginx集群采集,集中分析管理访问日志,但亦有其缺点,例如高并发情况下flume的收集和格式化操作容易占用过多的服务器资源,维护大数据组件所需要占用一定企业开发运维资源,如果仅仅用来支持日志监控在效益上是不划算的。

    现有技术中对于nginx日志的分析效率不高。考虑到如果采用区别于传统agent方案的访问日志采集方案,通过引入ngx_lua模块实现日志的采集,并将采集到的日志集中存储至时序数据库中,通过时序数据库提供的连续查询功能实现对日志的分析,则有望解决现有技术中对于nginx日志的分析效率不高的问题,从而高性能低消耗地满足了日志数据采集需求,简化数据分析业务代码开发测试工作,提高日志分析的效率。基于此,本说明书实施例提供了一种日志分析系统、方法及装置。

    请参阅图1,本说明书实施例提供一种日志分析系统。所述日志分析系统可以包括采集模块110、存储模块120和分析模块130。

    在一些实施例中,所述采集模块110可以用于获取表征日志内容的日志变量,对所述日志变量进行格式化,得到格式化后的日志数据,将所述日志数据传输至所述存储模块。

    在一些实施例中,所述采集模块110可以部署在web服务器上,为了满足高性能、低消耗的需求,实现的方法是采集到的日志变量后直接在nginx上对数据进行格式化,然后通过网络传输到日志数据存储模块,省略其它中间环节(如读取日志文件,字符串运算等)。

    在一些实施例中,可以使用nginx三方模块lua-nginx-module实现日志变量的采集。具体的,nginx访问日志内容是由nginx的变量组成的,访问日志内容对应的变量即为本说明书实施例中的日志变量。lua-nginx-module可以通过luaapi直接在内存中获取所述日志变量,用于采集业务处理流程。其中,lua-nginx-module是一个nginxhttp模块,它把lua解析器内嵌到nginx,用来解析并执行lua语言编写的网页后台脚本。其原理为ngx_lua将lua嵌入nginx,可以让nginx执行lua脚本,并且高并发、非阻塞的处理各种请求。lua内建协程,这样就可以很好的将异步回调转换成顺序调用的形式。ngx_lua在lua中进行的i/o操作都会委托给nginx的事件模型,从而实现非阻塞调用。开发者可以采用串行的方式编写程序,ngx_lua会自动的在进行阻塞的i/o操作时中断,保存上下文;然后将i/o操作委托给nginx事件处理机制,在i/o操作完成后,ngx_lua会恢复上下文,程序继续执行,这些操作都是对用户程序透明的。每个nginxworker进程持有一个lua解释器或者luajit实例,被这个worker处理的所有请求共享这个实例。每个请求的context会被lua轻量级的协程分割,从而保证各个请求是独立的。ngx_lua采用“one-coroutine-per-request”的处理模型,对于每个用户请求,ngx_lua会唤醒一个协程用于执行用户代码处理请求,当请求处理完成这个协程会被销毁。每个协程都有一个独立的全局环境(变量空间),继承于全局共享的、只读的“commandata”。所以,被用户代码注入全局空间的任何变量都不会影响其他请求的处理,并且这些变量在请求处理完成后会被释放,这样就保证所有的用户代码都运行在一个“sandbox”(沙箱),这个沙箱与请求具有相同的生命周期。得益于lua协程的支持,ngx_lua在处理10000个并发请求时只需要很少的内存。根据测试,ngx_lua处理每个请求只需要2kb的内存,如果使用luajit则会更少。所以ngx_lua非常适合用于实现可扩展的、高并发的服务。

    在一些实施例中,所述采集模块110可以将获取的所述日志变量进行格式化,例如将所述日志变量格式化为可传输的字符串,得到格式化后的日志数据,再将所述日志数据传输至所述存储模块120。

    在一些实施例中,可以使用lua-resty-logger-socket模块将所述日志数据传输至所述存储模块。日志数据传输的执行阶段是在采集请求响应完成后,对服务的影响较小,即使数据推送失败,也不会影响对客户端的响应。其中,lua-resty-logger-socket模块是openresty中的一个模块。openresty是一个基于nginx与lua的高性能web平台,其内部集成了大量精良的lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态web应用、web服务和动态网关。openresty通过汇聚各种设计精良的nginx模块,从而将nginx有效地变成一个强大的通用web应用平台。这样,web开发人员和系统工程师可以使用lua脚本语言调动nginx支持的各种c以及lua模块,快速构造出足以胜任10k乃至1000k以上单机并发连接的高性能web应用系统。openresty可以使web服务直接跑在nginx服务内部,充分利用nginx的非阻塞i/o模型,不仅仅对http客户端请求,甚至于对远程后端诸如mysql、postgresql、memcached以及redis等都进行一致的高性能响应。

    在一些实施例中,在传输所述日志数据之前,所述采集模块110还可以根据业务需求,从所述日志变量中获取符合业务需求的目标日志变量;相应的,对所目标日志变量进行格式化,得到格式化后的日志数据。其中,访问日志分析中,所述业务需求可以包括:统计pv(当天访问nginx的次数,即access日志的行数);最活跃的前n个ip;访问最频繁的前n个url;各网页状态码数目;最活跃的前n个ip的每个ip访问的最频繁的前n个url;访问最频繁的前n个url的每个url最活跃的前n个ip;以上各参数统计结果占比等。

    在一些实施例中,所述存储模块120可以用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中。

    对访问日志的分析是基于时间的维度的,如请求量、请求的涨跌幅、平均响应时间的对比等都是基于时间进行的。因此,所述存储模块120可以采用时序数据库存储日志数据,以方便支撑数据分析。所述时序数据库(timeseriesdatabase,tsdb)主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

    在一些实施例中,所述时序数据库通过influxdb实现。influxdb是一款基于go语言开发的开源分布式时序、事件和指标数据库,适合用来处理监控数据,其提供的丰富查询函数可以很好地简化数据分析工作,举例如下:

    1.函数count,作用是返回一个field字段的数量,在访问日志分析中可用于计算某个uri在一段时间内的请求量;

    2.函数top,作用是返回一个field字段中最大的值,支持返回topn,在访问日志分析中可计算返回某个uri响应时间最大值;

    3.函数percentile,作用是返回一个field字段进行生序排序后的百分比数值,在访问日志分析中可计算某个uri响应时间的tp90、tp99的值;

    4.函数mean,作用是返回一个field字段的算术平均值,在访问日志分析中可计算某个uri的平均响应时间;

    5.函数derivative,作用是返回一个field字段的变化率,在访问日志分析中可计算服务的稳定性。

    在一些实施例中,所述分析模块130可以用于基于所述时序数据库,查询得到预设时间段内的日志数据,将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。具体的,对于大部分对日志分析来说,是以一段时间内的数据进行计算的,例如每分钟、每15分钟等,这可以使用influxdb提供的连续查询功能查询得到预设时间段内的日志数据,该功能可以执行定时查询,并将执行后的结果存放在分析数据库中;对于少部分复杂的业务需求,可以通过业务代码执行定时查询,查询结果存放至分析数据库来实现。

    在一些实施例中,所述分析模块130还可以将所述分析数据库中的日志数据进行可视化展示。具体的,可以采用数据可视化工具grafana对所述日志数据进行可视化展示。其中,grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。通过采用数据可视化工具grafana对所述日志数据进行可视化展示可以使用不同的方式可视化指标和日志,比如热图、折线图、图表等多种展示方式,还可以以可视方式定义最重要指标的警报规则,grafana将不断计算并发送通知,在数据达到阈值时通过slack、pagerduty等获得通知,从而为后续日志分析、业务系统异常问题追溯原因提供数据依据。

    本说明书实施例提供的日志分析系统,可以获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。本说明书实施例提供的系统,通过引入ngx_lua模块实现日志的采集,并将采集到的日志集中存储至时序数据库中,通过时序数据库提供的连续查询功能实现对日志的分析,支持集群化nginx访问日志采集,数据统一管理,统一计算,高性能低消耗地满足了日志数据采集需求,简化数据分析业务代码开发测试工作,提高日志分析的效率。

    请参阅图2。本说明实施例还提供一种日志分析方法。在本说明书实施例中,执行所述日志分析方法的主体可以是具有逻辑运算功能的电子设备,所述电子设备可以是服务器。所述服务器可以是具有一定运算处理能力的电子设备。其可以具有网络通信单元、处理器和存储器等。当然,所述服务器并不限于上述具有一定实体的电子设备,其还可以为运行于上述电子设备中的软体。所述服务器还可以为分布式服务器,可以是具有多个处理器、存储器、网络通信模块等协同运作的系统。或者,服务器还可以为若干服务器形成的服务器集群。所述方法可以包括以下步骤。

    s210:获取表征日志内容的日志变量。

    在一些实施例中,服务器可以使用nginx三方模块lua-nginx-module实现日志变量的采集,从而获取表征日志内容的日志变量。

    具体的,nginx访问日志内容是由nginx的变量组成的,访问日志内容对应的变量即为本说明书实施例中的日志变量。lua-nginx-module可以通过luaapi直接在内存中获取所述日志变量,用于采集业务处理流程。其中,lua-nginx-module是一个nginxhttp模块,它把lua解析器内嵌到nginx,用来解析并执行lua语言编写的网页后台脚本。其原理为ngx_lua将lua嵌入nginx,可以让nginx执行lua脚本,并且高并发、非阻塞的处理各种请求。lua内建协程,这样就可以很好的将异步回调转换成顺序调用的形式。ngx_lua在lua中进行的i/o操作都会委托给nginx的事件模型,从而实现非阻塞调用。开发者可以采用串行的方式编写程序,ngx_lua会自动的在进行阻塞的i/o操作时中断,保存上下文;然后将i/o操作委托给nginx事件处理机制,在i/o操作完成后,ngx_lua会恢复上下文,程序继续执行,这些操作都是对用户程序透明的。每个nginxworker进程持有一个lua解释器或者luajit实例,被这个worker处理的所有请求共享这个实例。每个请求的context会被lua轻量级的协程分割,从而保证各个请求是独立的。ngx_lua采用“one-coroutine-per-request”的处理模型,对于每个用户请求,ngx_lua会唤醒一个协程用于执行用户代码处理请求,当请求处理完成这个协程会被销毁。每个协程都有一个独立的全局环境(变量空间),继承于全局共享的、只读的“commandata”。所以,被用户代码注入全局空间的任何变量都不会影响其他请求的处理,并且这些变量在请求处理完成后会被释放,这样就保证所有的用户代码都运行在一个“sandbox”(沙箱),这个沙箱与请求具有相同的生命周期。得益于lua协程的支持,ngx_lua在处理10000个并发请求时只需要很少的内存。根据测试,ngx_lua处理每个请求只需要2kb的内存,如果使用luajit则会更少。所以ngx_lua非常适合用于实现可扩展的、高并发的服务。

    s220:对所述日志变量进行格式化,得到格式化后的日志数据。

    在一些实施例中,服务器可以将获取的所述日志变量进行格式化,例如将所述日志变量格式化为可传输的字符串,得到格式化后的日志数据。

    在一些实施例中,在对所述日志变量进行格式化之前,还可以根据业务需求,从所述日志变量中获取符合业务需求的目标日志变量;相应的,对所目标日志变量进行格式化,得到格式化后的日志数据。其中,访问日志分析中,所述业务需求可以包括:统计pv(当天访问nginx的次数,即access日志的行数);最活跃的前n个ip;访问最频繁的前n个url;各网页状态码数目;最活跃的前n个ip的每个ip访问的最频繁的前n个url;访问最频繁的前n个url的每个url最活跃的前n个ip;以上各参数统计结果占比等。

    s230:为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中。

    在一些实施例中,服务器可以为所述日志数据建立时间标签,使用lua-resty-logger-socket模块将所述日志数据传输至时序数据库进行存储。其中,lua-resty-logger-socket模块是openresty中的一个模块。openresty是一个基于nginx与lua的高性能web平台,其内部集成了大量精良的lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态web应用、web服务和动态网关。openresty通过汇聚各种设计精良的nginx模块,从而将nginx有效地变成一个强大的通用web应用平台。这样,web开发人员和系统工程师可以使用lua脚本语言调动nginx支持的各种c以及lua模块,快速构造出足以胜任10k乃至1000k以上单机并发连接的高性能web应用系统。openresty可以使web服务直接跑在nginx服务内部,充分利用nginx的非阻塞i/o模型,不仅仅对http客户端请求,甚至于对远程后端诸如mysql、postgresql、memcached以及redis等都进行一致的高性能响应。

    对访问日志的分析是基于时间的维度的,如请求量、请求的涨跌幅、平均响应时间的对比等都是基于时间进行的。因此,可以采用时序数据库存储日志数据,以方便支撑数据分析。所述时序数据库(timeseriesdatabase,tsdb)主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

    在一些实施例中,所述时序数据库可以通过influxdb实现。influxdb是一款基于go语言开发的开源分布式时序、事件和指标数据库,适合用来处理监控数据,其提供的丰富查询函数可以很好地简化数据分析工作,举例如下:

    1.函数count,作用是返回一个field字段的数量,在访问日志分析中可用于计算某个uri在一段时间内的请求量;

    2.函数top,作用是返回一个field字段中最大的值,支持返回topn,在访问日志分析中可计算返回某个uri响应时间最大值;

    3.函数percentile,作用是返回一个field字段进行生序排序后的百分比数值,在访问日志分析中可计算某个uri响应时间的tp90、tp99的值;

    4.函数mean,作用是返回一个field字段的算术平均值,在访问日志分析中可计算某个uri的平均响应时间;

    5.函数derivative,作用是返回一个field字段的变化率,在访问日志分析中可计算服务的稳定性。

    s240:基于所述时序数据库,查询得到预设时间段内的日志数据。

    s250:将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    在一些实施例中,服务器可以用于基于所述时序数据库,查询得到预设时间段内的日志数据,将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。具体的,对于大部分对日志分析来说,是以一段时间内的数据进行计算的,例如每分钟、每15分钟等,这可以使用influxdb提供的连续查询功能查询得到预设时间段内的日志数据,该功能可以执行定时查询,并将执行后的结果存放在分析数据库中;对于少部分复杂的业务需求,可以通过业务代码执行定时查询,查询结果存放至分析数据库来实现。

    在一些实施例中,服务器还可以将所述分析数据库中的日志数据进行可视化展示。具体的,可以采用数据可视化工具grafana对所述日志数据进行可视化展示。其中,grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。通过采用数据可视化工具grafana对所述日志数据进行可视化展示可以使用不同的方式可视化指标和日志,比如热图、折线图、图表等多种展示方式,还可以以可视方式定义最重要指标的警报规则,grafana将不断计算并发送通知,在数据达到阈值时通过slack、pagerduty等获得通知,从而为后续日志分析、业务系统异常问题追溯原因提供数据依据。

    本说明书实施例提供的日志分析方法,可以获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。本说明书实施例提供的方法,通过引入ngx_lua模块实现日志的采集,并将采集到的日志集中存储至时序数据库中,通过时序数据库提供的连续查询功能实现对日志的分析,支持集群化nginx访问日志采集,数据统一管理,统一计算,高性能低消耗地满足了日志数据采集需求,简化数据分析业务代码开发测试工作,提高日志分析的效率。

    图3为本说明书实施例一种电子设备的功能结构示意图,所述电子设备可以包括存储器和处理器。

    在一些实施例中,所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现日志分析方法的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据用户终端的使用所创建的数据。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘、智能存储卡(smartmediacard,smc)、安全数字(securedigital,sd)卡、闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

    所述处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述处理器可以执行所述计算机指令实现以下步骤:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    在本说明书实施例中,该电子设备具体实现的功能和效果,可以与其它实施例对照解释,在此不再赘述。

    图4为本说明书实施例一种日志分析装置的功能结构示意图,该装置具体可以包括以下的结构模块。

    获取模块410,用于获取表征日志内容的日志变量;

    格式化模块420,用于对所述日志变量进行格式化,得到格式化后的日志数据;

    存储模块430,用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;

    查询模块440,用于基于所述时序数据库,查询得到预设时间段内的日志数据;

    分析模块450,用于将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    本说明书实施例还提供了一种日志分析方法的计算机可读存储介质,所述计算机可读存储介质存储有计算机程序指令,在所述计算机程序指令被执行时实现:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    在本说明书实施例中,上述存储介质包括但不限于随机存取存储器(randomaccessmemory,ram)、只读存储器(read-onlymemory,rom)、缓存(cache)、硬盘(harddiskdrive,hdd)或者存储卡(memorycard)。所述存储器可用于存储所述计算机程序和/或模块,所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据用户终端的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器。在本说明书实施例中,该计算机可读存储介质存储的程序指令具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。

    需要说明的是,本说明书实施例提供的数据清理方法、装置及电子设备,涉及计算机技术领域,可以应用于金融领域在计算机使用过程中数据的处理,还可以除金融领域之外的任意领域,本说明书实施例对所述数据清理方法、装置及电子设备的应用领域不做限定。

    需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于装置实施例和设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

    本领域技术人员在阅读本说明书文件之后,可以无需创造性劳动想到将本说明书列举的部分或全部实施例进行任意组合,这些组合也在本说明书公开和保护的范围内。

    在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

    上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

    通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。

    本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

    本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

    本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

    虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。


    技术特征:

    1.一种日志分析系统,其特征在于,所述系统包括采集模块、存储模块和分析模块;

    所述采集模块,用于获取表征日志内容的日志变量,对所述日志变量进行格式化,得到格式化后的日志数据,将所述日志数据传输至所述存储模块;

    所述存储模块,用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;

    所述分析模块,用于基于所述时序数据库,查询得到预设时间段内的日志数据,将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    2.根据权利要求1所述的系统,其特征在于,使用lua-resty-logger-socket模块将所述日志数据传输至所述存储模块。

    3.根据权利要求1所述的系统,其特征在于,所述分析模块还用于,将所述分析数据库中的日志数据进行可视化展示。

    4.根据权利要求3所述的系统,其特征在于,使用采用数据可视化工具grafana对所述日志数据进行可视化展示。

    5.一种日志分析方法,其特征在于,所述方法包括:

    获取表征日志内容的日志变量;

    对所述日志变量进行格式化,得到格式化后的日志数据;

    为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;

    基于所述时序数据库,查询得到预设时间段内的日志数据;

    将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    6.根据权利要求5所述的方法,其特征在于,使用nginx三方模块lua-nginx-module通过luaapi获取表征日志内容的日志变量。

    7.根据权利要求5所述的方法,其特征在于,所述方法还包括:

    根据业务需求,从所述日志变量中获取符合业务需求的目标日志变量;

    相应的,对所目标日志变量进行格式化,得到格式化后的日志数据。

    8.根据权利要求7所述的方法,其特征在于,所述业务需求包括统计当天访问nginx的次数、最活跃的前n个ip、访问最频繁的前n个url、各网页状态码数据中的至少一种。

    9.根据权利要求5所述的方法,其特征在于,所述时序数据库通过influxdb实现。

    10.根据权利要求8所述的方法,其特征在于,所述基于所述时序数据库,查询得到预设时间段内的日志数据包括:使用influxdb提供的连续查询功能查询得到预设时间段内的日志数据。

    11.根据权利要求5所述的方法,其特征在于,所述方法还包括:

    将所述分析数据库中的日志数据进行可视化展示。

    12.根据权利要求11所述的方法,其特征在于,使用采用数据可视化工具grafana对所述日志数据进行可视化展示。

    13.一种日志分析装置,其特征在于,所述装置包括:

    获取模块,用于获取表征日志内容的日志变量;

    格式化模块,用于对所述日志变量进行格式化,得到格式化后的日志数据;

    存储模块,用于为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;

    查询模块,用于基于所述时序数据库,查询得到预设时间段内的日志数据;

    分析模块,用于将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    14.一种电子设备,其特征在于,包括:

    存储器,用于存储计算机程序;

    处理器,用于执行所述计算机程序以实现:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    15.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,所述指令被执行时实现:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析。

    技术总结
    本说明书实施例提供一种日志分析系统、方法及装置。所述方法包括:获取表征日志内容的日志变量;对所述日志变量进行格式化,得到格式化后的日志数据;为所述日志数据建立时间标签,将带有时间标签的日志数据存储至时序数据库中;基于所述时序数据库,查询得到预设时间段内的日志数据;将所述预设时间段内的日志数据存入分析数据库中,以便于对所述分析数据库中的日志数据进行分析,从而提高日志分析的效率。

    技术研发人员:何嘉杰;邓玉;胡仲强;谢潇宇;林浪桥
    受保护的技术使用者:建信金融科技有限责任公司
    技术研发日:2020.11.30
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-22663.html

    最新回复(0)