CN109460389A - 一种基于openresty的日志记录方法 - Google Patents
一种基于openresty的日志记录方法 Download PDFInfo
- Publication number
- CN109460389A CN109460389A CN201811443778.4A CN201811443778A CN109460389A CN 109460389 A CN109460389 A CN 109460389A CN 201811443778 A CN201811443778 A CN 201811443778A CN 109460389 A CN109460389 A CN 109460389A
- Authority
- CN
- China
- Prior art keywords
- value
- openresty
- shared drive
- log recording
- log
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring 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/3079—Monitoring 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的日志记录方法。
背景技术
现如今随着互联网技术的不断高速发展,人们对于服务器的性能要求也越来越高,传统的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阶段处理:
日志存在性的判断代码如下:
日志的定时获取和发送的代码如下:
本实施例中,使用lua-resty-logger-socket替代Nginx标准的ngx_http_log_module,以非阻塞IO方式推送日志到远程服务器上,传输采用无状态的UDP协议,确保日志处理是非阻塞的;由于请求执行到log阶段时,响应内容已经发出,故log阶段的执行代码不会影响整体的响应性能,同时也将重复日志进行了合并,很好的解决了现有技术中企业级的服务器每天的访问量成千上万,服务器每天产生的日志文件数量巨大,对于硬盘不大的服务器来说很可能装满磁盘,导致后续日志丢失,并且去重繁琐问题。
尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。
Claims (5)
1.一种基于openresty的日志记录方法,其特征在于,所述方法包括如下步骤:
步骤1:在openresty中的共享内存API内定义一块自定义命名的内存空间,内存大小根据需求自己定义;
步骤2:当第一个请求的处理到达日志记录阶段时,根据定义的日志格式,由Nginx内置变量获取所有要记录的字段,并以key-value的形式将要记录的所有字段拼接为字符串;
步骤3:以步骤2所得的字符串作为索引,记录次数作为value,将键值对存入步骤1定义的共享内存中;
步骤4:后续请求到来时,按步骤2的方式生成索引key值,并从共享内存中获取该索引的value,若读取到的value值不为空,则对value值加1;若读取到的value值为空,则将key值和访问次数放入共享内存中。
2.根据权利要求1所述的基于openresty的日志记录方法,其特征在于:所述共享内存通过openresty的定时器接口调用定时器,并且在存入数据时设置一个名为过期时间的可选参数。
3.根据权利要求2所述的基于openresty的日志记录方法,其特征在于:所述过期时间设置为1s。
4.根据权利要求2所述的基于openresty的日志记录方法,其特征在于:所述定时器每秒从共享内存中读取数据,并且在定时器中用UDP协议将日志发送至指定服务器。
5.根据权利要求1所述的基于openresty的日志记录方法,其特征在于:所述日志记录采用的是lua_resty_logger_module模块。
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 true CN109460389A (zh) | 2019-03-12 |
CN109460389B 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) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110460876A (zh) * | 2019-08-15 | 2019-11-15 | 网易(杭州)网络有限公司 | 直播日志的处理方法、装置及电子设备 |
CN111930686A (zh) * | 2020-07-15 | 2020-11-13 | 杭州海康威视***技术有限公司 | 存储日志的方法、装置和计算机设备 |
CN114138419A (zh) * | 2021-12-07 | 2022-03-04 | 北京睿芯高通量科技有限公司 | 一种基于Openresty的跨类型服务间数据共享方法及*** |
Citations (4)
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 | 北京奇虎科技有限公司 | 一种处理并发网页访问业务的方法及*** |
-
2018
- 2018-11-29 CN CN201811443778.4A patent/CN109460389B/zh active Active
Patent Citations (4)
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 (3)
Title |
---|
GB4215287: "ngx_lua模块中的共享内存字典项API", 《HTTPS://BLOG.CSDN.NET/GB4215287/ARTICLE/DETAILS/75391572?UTM_MEDIUM=DISTRIBUTE.PC_RELEVANT.NONE-TASK-BLOG-BAIDUJS_TITLE-2&SPM=1001.2101.3001.4242》 * |
WENMING: "日志输出", 《HTTPS://WIKI.JIKEXUEYUAN.COM/PROJECT/OPENRESTY/OPENRESTY/LOG_RESPONSE.HTML》 * |
罗剑锋: "《Nginx 完全开发指南: 使用C 、C++和OpenResty》", 30 June 2017 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110460876A (zh) * | 2019-08-15 | 2019-11-15 | 网易(杭州)网络有限公司 | 直播日志的处理方法、装置及电子设备 |
CN111930686A (zh) * | 2020-07-15 | 2020-11-13 | 杭州海康威视***技术有限公司 | 存储日志的方法、装置和计算机设备 |
CN111930686B (zh) * | 2020-07-15 | 2024-02-20 | 杭州海康威视***技术有限公司 | 存储日志的方法、装置和计算机设备 |
CN114138419A (zh) * | 2021-12-07 | 2022-03-04 | 北京睿芯高通量科技有限公司 | 一种基于Openresty的跨类型服务间数据共享方法及*** |
CN114138419B (zh) * | 2021-12-07 | 2022-09-23 | 北京睿芯高通量科技有限公司 | 一种基于Openresty的跨类型服务间数据共享方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN109460389B (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9332063B2 (en) | Versatile application configuration for deployable computing environments | |
JP2020521209A (ja) | プラグイン関数プラットフォームおよび方法 | |
CN105812351B (zh) | 实现会话共享的方法和*** | |
CN113010818B (zh) | 访问限流方法、装置、电子设备及存储介质 | |
CN102368213B (zh) | 一种ie内核浏览器的页面下载控制方法和*** | |
US20090240698A1 (en) | Computing environment platform | |
CN109460389A (zh) | 一种基于openresty的日志记录方法 | |
CN108964968A (zh) | 一种容器云环境下的服务接入管理方法和*** | |
KR20080017338A (ko) | 콘텐트 신디케이션 플랫폼 | |
KR20080028869A (ko) | 콘텐트 신디케이션 플랫폼 | |
CN103685304A (zh) | 一种共享session信息的方法和*** | |
KR101533427B1 (ko) | 대용량 가상저장공간을 제공하는 이동식 저장장치 및 그 제공방법 | |
CN100473070C (zh) | 一种具有存储功能的usb设备在网络计算机上的映射方法 | |
CN102368249B (zh) | 一种ie内核浏览器的页面下载控制方法和*** | |
CN102368248B (zh) | 一种ie内核浏览器的页面下载控制方法和*** | |
CN102917005B (zh) | 一种支持事务的海量存储访问方法及装置 | |
CN102722405A (zh) | 高并发、多线程应用中的计数方法及*** | |
CN111444278B (zh) | 数据同步方法、装置及中转服务器 | |
CN111367685B (zh) | 接口调用的方法及装置、计算机设备、存储介质 | |
US9128886B2 (en) | Computer implemented method, computer system, electronic interface, mobile computing device and computer readable medium | |
CN108156009B (zh) | 一种服务调用方法及装置 | |
CN106570152B (zh) | 一种手机号码的海量提取方法及*** | |
Huang et al. | Achieving fast page load for websites across multiple domains | |
CN102355486A (zh) | 一种下载数据的方法及装置 | |
CN101517540B (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 |