CN109460389B - 一种基于openresty的日志记录方法 - Google Patents

一种基于openresty的日志记录方法 Download PDF

Info

Publication number
CN109460389B
CN109460389B CN201811443778.4A CN201811443778A CN109460389B CN 109460389 B CN109460389 B CN 109460389B CN 201811443778 A CN201811443778 A CN 201811443778A CN 109460389 B CN109460389 B CN 109460389B
Authority
CN
China
Prior art keywords
value
shared memory
log
openness
index
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811443778.4A
Other languages
English (en)
Other versions
CN109460389A (zh
Inventor
杨川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201811443778.4A priority Critical patent/CN109460389B/zh
Publication of CN109460389A publication Critical patent/CN109460389A/zh
Application granted granted Critical
Publication of CN109460389B publication Critical patent/CN109460389B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • G06F11/3072Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
    • G06F11/3079Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting the data filtering being achieved by reporting only the changes of the monitored data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种基于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:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key-value的形式将要记录的所有字段拼接为字符串;
步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;
步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中。
基于上述方法的实际操作如下所示:
首先安装openresty,在配置文件nginx.conf的http模块中初始化共享内存大小为10M,代码为:lua_shared_dict log_dict 10m;
第二步,安装lua_resty_logger_module模块:将该模块的lua代码文件放入openresty默认库目录下;
第三步,关闭Nginx默认访问日志记录,实现log阶段处理:
日志存在性的判断代码如下:
Figure BDA0001885262950000051
Figure BDA0001885262950000061
日志的定时获取和发送的代码如下:
Figure BDA0001885262950000062
Figure BDA0001885262950000071
本实施例中,使用lua-resty-logger-socket替代Nginx标准的ngx_http_log_module,以非阻塞IO方式推送日志到远程服务器上,传输采用无状态的UDP协议,确保日志处理是非阻塞的;由于请求执行到log阶段时,响应内容已经发出,故log阶段的执行代码不会影响整体的响应性能,同时也将重复日志进行了合并,很好的解决了现有技术中企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件数量巨大,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且去重繁琐问题。
尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。

Claims (3)

1.一种基于openresty的日志记录方法,其特征在于,所述方法包括如下步骤:
步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;
步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key-value的形式将要记录的所有字段拼接为字符串;
步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;
步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中;
所述共享内存通过openresty的定时器接口调用定时器,并且在存入数据时设置一个名为过期时间的可选参数;
所述日志记录采用的是lua_resty_logger_module模块。
2.根据权利要求1所述的基于openresty的日志记录方法,其特征在于:所述过期时间设置为1s。
3.根据权利要求1所述的基于openresty的日志记录方法,其特征在于:所述定时器每秒从共享内存中读取数据,并且在定时器中用UDP协议将日志发送至指定服务器。
CN201811443778.4A 2018-11-29 2018-11-29 一种基于openresty的日志记录方法 Active CN109460389B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811443778.4A CN109460389B (zh) 2018-11-29 2018-11-29 一种基于openresty的日志记录方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811443778.4A CN109460389B (zh) 2018-11-29 2018-11-29 一种基于openresty的日志记录方法

Publications (2)

Publication Number Publication Date
CN109460389A CN109460389A (zh) 2019-03-12
CN109460389B true CN109460389B (zh) 2021-08-06

Family

ID=65611967

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811443778.4A Active CN109460389B (zh) 2018-11-29 2018-11-29 一种基于openresty的日志记录方法

Country Status (1)

Country Link
CN (1) CN109460389B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110460876A (zh) * 2019-08-15 2019-11-15 网易(杭州)网络有限公司 直播日志的处理方法、装置及电子设备
CN111930686B (zh) * 2020-07-15 2024-02-20 杭州海康威视系统技术有限公司 存储日志的方法、装置和计算机设备
CN114138419B (zh) * 2021-12-07 2022-09-23 北京睿芯高通量科技有限公司 一种基于Openresty的跨类型服务间数据共享方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016180265A1 (zh) * 2015-05-13 2016-11-17 阿里巴巴集团控股有限公司 日志事件处理方法和装置
CN107832406A (zh) * 2017-11-03 2018-03-23 北京锐安科技有限公司 海量日志数据的去重入库方法、装置、设备及存储介质
CN107908748A (zh) * 2017-11-17 2018-04-13 南京感度信息技术有限责任公司 基于大数据的网站用户行为数据采集方法、系统及应用
CN108366021A (zh) * 2018-01-12 2018-08-03 北京奇虎科技有限公司 一种处理并发网页访问业务的方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016180265A1 (zh) * 2015-05-13 2016-11-17 阿里巴巴集团控股有限公司 日志事件处理方法和装置
CN107832406A (zh) * 2017-11-03 2018-03-23 北京锐安科技有限公司 海量日志数据的去重入库方法、装置、设备及存储介质
CN107908748A (zh) * 2017-11-17 2018-04-13 南京感度信息技术有限责任公司 基于大数据的网站用户行为数据采集方法、系统及应用
CN108366021A (zh) * 2018-01-12 2018-08-03 北京奇虎科技有限公司 一种处理并发网页访问业务的方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ngx_lua模块中的共享内存字典项API;gb4215287;《https://blog.csdn.net/gb4215287/article/details/75391572?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242》;20170719;第1-7页 *
日志输出;WenMing;《https://wiki.jikexueyuan.com/project/openresty/openresty/log_response.html》;20181128;第1-3页 *

Also Published As

Publication number Publication date
CN109460389A (zh) 2019-03-12

Similar Documents

Publication Publication Date Title
CN109460389B (zh) 一种基于openresty的日志记录方法
US9038094B2 (en) Automated service interface optimization
US10887201B2 (en) Method for automatically monitoring end-to-end end user performance and apparatus for performing the method
US20160042045A1 (en) Resolving conflicts within saved state data
CN113010818B (zh) 访问限流方法、装置、电子设备及存储介质
CN103685304A (zh) 一种共享session信息的方法和系统
CN107483631B (zh) 一种控制缓存实现移动互联网络服务访问的方法
CN112636992B (zh) 一种动态路由方法、装置、设备及存储介质
CN107276842B (zh) 接口测试方法、装置及电子设备
CN110362547B (zh) 日志文件的编码、解析、存储方法和装置
CN109960621A (zh) 一种基于大数据可视化监控平台的数据抽取方法
CN111008246A (zh) 数据库日志同步方法、装置、计算机设备及可读存储介质
CN110134737A (zh) 数据变化监听方法及装置、电子设备和计算机可读存储介质
US9128886B2 (en) Computer implemented method, computer system, electronic interface, mobile computing device and computer readable medium
CN113553214B (zh) 一种幂等性校验方法及装置
CN109634758A (zh) 基于json文件控制事件和行为的方法及中间件平台
CN116301951B (zh) 一种基于kubernetes的微服务应用安装升级方法及装置
CN111124883B (zh) 一种基于树形表格的测试用例库引入方法、系统及设备
CN110673835A (zh) 一种动态装配式开发系统、方法、计算机和计算机程序
CN106570152A (zh) 一种手机号码的海量提取方法及系统
CN106817383B (zh) 一种基于数据统计上报的访问周期管理方法及装置
CN114328152A (zh) 日志记录方法、装置、设备及介质
CN110046132B (zh) 一种元数据请求处理方法、装置、设备及可读存储介质
CN108733377B (zh) 一种App中网页端与手机端的JS交互方法
CN114244912A (zh) 数据传输方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant