一种基于openresty的日志记录方法技术

技术编号:20566588 阅读:144 留言:0更新日期:2019-03-14 09:25
本发明专利技术公开了一种基于openresty的日志记录方法,涉及信息安全技术领域,所述方法包括步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key‑value的形式将要记录的所有字段拼接为字符串;步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中,解决了服务器中产生过多重复日志的问题。

A log recording method based on openresty

The invention discloses an openresty-based log recording method, which relates to the field of information security technology. The method comprises steps 1: defining a custom named memory space in the shared memory API of openresty, and defining the memory size according to the requirements; step 2: When the processing of the first request reaches the log recording stage, according to the defined log format, Nginx The built-in variable obtains all the fields to be recorded and stitches all fields to be recorded as strings in the form of key value; Step 3: Use the strings obtained in Step 2 as indexes and the number of records as values to store the key value pairs in the shared memory defined in Step 1; Step 4: When subsequent requests arrive, generate the index key value in step 2 and obtain it from shared memory. If the value of the index is not empty, the value value is added 1; if the value is empty, the key value and the number of accesses are put into shared memory, which solves the problem of too many duplicate logs in the server.

【技术实现步骤摘要】
一种基于openresty的日志记录方法
本专利技术涉及信息安全
,具体的说,是一种基于openresty的日志记录方法。
技术介绍
现如今随着互联网技术的不断高速发展,人们对于服务器的性能要求也越来越高,传统的Apache,tomcat等同步处理的服务器在面对日益增加的用户数和并发量时,往往在效率和性能上显得力不从心,于是各大网站均把目光投向了nginx。Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx专为性能优化而开发,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。Nginx支持热部署。启动容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能在不间断服务的情况下对软件版本进行进行升级。Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Ngin模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项,将Nginx变成一个强大的通用Web应用平台。开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,使Nginx的开发和拓展变得简洁容易。当使用Ningx作为企业级的web或接口代理服务器时,日志的分析和处理是非常重要的。每一次访问都会产生一条日志,收集日志并整理日志信息,对于分析用户习惯,服务器性能瓶颈等有着重要的意义;而企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件也高达十几G甚至几十G,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且整理去重也十分繁琐。
技术实现思路
本专利技术的目的在于提供一种基于openresty的日志记录方法,用于解决现有技术中企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件数量大,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且去重繁琐问题。本专利技术通过下述技术方案解决上述问题:一种基于openresty的日志记录方法,所述方法包括如下步骤:步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key-value的形式将要记录的所有字段拼接为字符串;步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中。本专利技术的方法用到openresty中的共享内存API对每条到达的日志进行重复判断,在共享内存定义一块自定义命名的内存空间,内存大小根据需求自己定义,定义的共享内存对象对于Nginx中所有worker进程都是可见的,它的用法类似于python中的字典,以key-value的形式存储数据;当Nginx通过reload命令重启时,共享内存字典项会从新获取它的内容,当Nginx退出时,字典项的值将会丢失;通过key-value的形式将要记录的所有字段拼接为字符串,以这个字符串作为索引,记录次数作为value,将键值对存入共享内存中,可以很好的对重复的日志进行合并,log阶段的不会影响服务器整体的响应性能,很好的解决了现有技术中企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件数量巨大,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且去重繁琐问题。优选地,所述共享内存通过openresty的定时器接口调用定时器,并且在存入数据时设置一个名为过期时间的可选参数,由于共享内存的大小有限,故需要将共享内存中的数据及时取出记录,否则会发生覆盖导致未及时取出的数据丢失,设置过期时间可以让内部数据在超时后自动失效,避免长时间占用共享内存的空间导致内存空间不足。优选地,所述过期时间设置为1s,由于Nginx日志记录的时间粒度为1秒,故可设置共享内存中数据的过期时间为1秒,这样可保证日志记录的时间粒度与原Nginx一致。优选地,所述定时器每秒从共享内存中读取数据,并且在定时器中用UDP协议将日志发送至指定服务器,由于Nginx日志记录的时间粒度为1秒,这样可保证共享内存始终处于可用状态,不会因内存占满而导致数据的覆盖丢失。优选地,所述日志记录采用的是lua_resty_logger_module模块,这是一个非阻塞的日志发送模块,可通过配置ip、端口和协议将日志发送至指定服务器,模块初始化绑定端口和ip后,在定时器中每秒用UDP协议将日志发送至指定服务器,可在Nginx所在服务器本身磁盘不足的情况下缓解磁盘压力。本专利技术与现有技术相比,具有以下优点及有益效果:(1)本专利技术通过key-value的形式将要记录的所有字段拼接为字符串,以这个字符串作为索引,记录次数作为value,将键值对存入共享内存中,可以很好的对重复的日志进行合并,log阶段不会影响服务器整体的响应性能,很好的解决了现有技术中企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件数量巨大,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且去重繁琐问题。(2)本专利技术中的共享内存通过openresty的定时器接口调用定时器,并且在存入数据时设置一个名为过期时间的可选参数,由于共享内存的大小有限,故需要将共享内存中的数据及时取出记录,否则会发生覆盖导致未及时取出的数据丢失,设置过期时间可以让内部数据在超时后自动失效,避免长时间占用共享内存的空间导致内存空间不足。(3)本专利技术中日志记录采用的是lua_resty_logger_module模块,这是一个非阻塞的日志发送模块,可通过配置ip、端口和协议将日志发送至指定服务器,模块初始化绑定端口和ip后,在定时器中每秒用UDP协议将日志发送至指定服务器,可在Nginx所在服务器本身磁盘不足的情况下缓解磁盘压力,提升服务器性能。附图说明图1为本专利技术的流程示意框图。具体实施方式下面结合实施例对本专利技术作进一步地详细说明,但本专利技术的实施方式不限于此。实施例1:结合附图1所示,一种基于openresty的日志记录方法,所述方法包括如下步骤:步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义,通过openresty的定时器接口调用定时器,并且在向共享内存中存入数据时设置1s的过期时间,设置定时器每秒从共享内存中读取数据;步骤2:当第一个请求的处理到达日志记录阶段时本文档来自技高网
...

【技术保护点】
1.一种基于openresty的日志记录方法,其特征在于,所述方法包括如下步骤:步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key‑value的形式将要记录的所有字段拼接为字符串;步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中。

【技术特征摘要】
1.一种基于openresty的日志记录方法,其特征在于,所述方法包括如下步骤:步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key-value的形式将要记录的所有字段拼接为字符串;步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空...

【专利技术属性】
技术研发人员:杨川
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川,51

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

1