nginx日志采集系列(二)-记录遇到的问题

使用lua-nginx-module遇到的一些问题

  1. 配置在http里面,是全局生效吗?

  2. lua_shared_dict 内存满了后,进行lpush/rpush操作会怎么样?进行lpop和rpop呢?还有内存满了的话,会按照lru清理掉最远未被使用的值吗?ua_shared_dict 内存什么时候会清理掉呢?支持的最小最大内存是多少呢?

  3. 除了init_worker_by_lua_block, 其他的阶段可以启动定时任务吗?

  4. log_by_lua_file可以指定多个lua文件吗?

实践

问题一:配置在http下面,会全局server生效

在http下配置两个server,监听不同的端口,都生效;

分别访问localhost:8888/baidu 和localhost:8000/jd, 可以在数据库中看到,确实入库了

问题二: lua缓存

共享缓存被该nginx服务实例的所有工作进程共享

ua_shared_dict 共享内存满了后,lpush和rpush操作list类型时,会返回nil和 no memory, 如果未满,返回操作过后list的长度,lpop和rpop会正常从缓存中取数

共享缓存满了后,不会覆盖掉最近未被使用的值;

lua缓存在nginx重载配置文件的时候不会清理掉

lua共享缓存最少设置为12k,最大的不清楚

实践

设置logs共享缓存大小位12k,

在log_by_lua_block中通过for循环不断写入数字,ngx打印日志,比对缓存未满和已满的日志信息;

同时通过ngx.shared.logs:free_space()不断打印剩余缓存大小

lua 复制代码
log_by_lua_block {

              -- 需要采集的信息
              require "resty.core.shdict"
              local val = 1;
              local key = "log1";
              local logs = ngx.shared.log1;
              while (1 < 2) do
                     local len, err = ngx.shared.log1:rpush(key, val);
                     if len ~= nil then
                            ngx.log(ngx.ERR, "current len of logs cache: ", len);
                     else
                            ngx.log(ngx.ERR, "cache is full: ", err);
                            break;
                     end
                     val = 1 + val;
                     ngx.log(ngx.ERR, "fress_space of cache: ", logs:free_space());
              end
              
              -- do somthing
       }

日志如下:

在缓存已满的情况下,修改配置,打印重启配置后的缓存剩余大小

重新加载配置,不能向缓存中插入数据, 不会清楚掉缓存中的内容

试一试重启,不支持restart操作

停止的话,显然会清除掉缓存中的内容

如果重载配置后,缓存中的值未被清理,则使用lpop打印出头部字段,不会重写掉

在缓存已满的情况下,修改nginx.conf文件中缓存的大小,会报错

添加一个新的共享缓存,设置大小位8k,报错

至于最大是多少,这个也没有说明,试了一下,20M/200M都是可以的

问题三: 一般是在init_worker_by_lua中执行一些定时任务

一般服务的健康检查就是放到这里面执行

init_by_lua_block在重载配置文件时会执行多次?

还没整明白为什么,下面是github上的介绍

lua 复制代码
init_by_lua_block {
              local keys = "log1";
              ngx.log(ngx.ERR, "after cache full ,the first value is: ", ngx.shared.log1:lpop(keys));
       }

执行nginx -s reload重载配置文件的时候,会执行两次?

对应的lua_block和lua_file不能同时存在

问题四: 不支持

用逗号分割,报错

可以在block中通过dofile来指定执行多个lua脚本

链接

Nginx 配置详解 | 菜鸟教程 (runoob.com)

Nginx虚拟主机的六种配置_nginx虚拟主机配置-CSDN博客

GitHub - openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers

相关推荐
代码扳手15 分钟前
Golang 实战:用 Watermill 构建订单事件流系统,一文掌握概念与应用
后端·go
麻木森林17 分钟前
利用Apipost 的AI能力轻松破解接口测试的效率与质量困局
后端·api
祈祷苍天赐我java之术29 分钟前
什么是Nginx?:掌握高性能 Web 服务器核心技术
服务器·前端·nginx
紫荆鱼1 小时前
设计模式-代理模式(Proxy)
c++·后端·设计模式·代理模式
IT技术分享社区1 小时前
架构入门系列:在线二手交易平台技术选型指南
程序员·架构
京东云开发者1 小时前
EasyExcel碰到问题记录
程序员
调试人生的显微镜1 小时前
Web 开发的工具全攻略 一套高效、实用、可落地的前端工作体系
后端
非凡ghost1 小时前
Affinity Photo(图像编辑软件) 多语便携版
前端·javascript·后端
非凡ghost1 小时前
VideoProc Converter AI(视频转换软件) 多语便携版
前端·javascript·后端