当前位置: 首页 > article >正文

大数据埋点方案Openresty+Nginx+Lua踩坑日志

在做埋点采集方案的时候,直接采用Openresty进行数据采集

手撸Java代码性能较差,直接使用第三方框架进行数据采集处理。

其中需要应用到lua-zlib模块进行gz的压缩文件解压;

lua-zlib的安装过程如下:

wget https://github.com/brimworks/lua-zlib/archive/master.zip
unzip master.zip
cd lua-zlib-master/
cmake -DLUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1 -DLUA_LIBRARIES=/usr/local/openresty/luajit/lib -DUSE_LUAJIT=ON -DUSE_LUA=OFF
make
    

确保luajit的依赖存在,在cmake检查的时候会显示出来;

执行make后会在编译主目录下生成zlib.so文件

将zlib.so文件放到openresty的lualib目录下,供全局加载到

 cp zlib.so /usr/local/openresty/lualib/

然后在代码里面就可以使用了

 location /deal_data {
            lua_need_request_body on;
            content_by_lua_block {
                -- 加载lua-zlib库
                local zlib = require "zlib"
                
                -- 读取请求体
                ngx.req.read_body()

                -- 获取请求体数据
                local request_body = ngx.req.get_body_data()

                -- 检查是否有数据
                if not request_body then
                    ngx.log(ngx.ERROR, "No request body found.")
                    return ngx.exit(400)
                end

                -- 解压数据
                local stream = zlib.inflate()
                local r=stream(request_body);
                
               -- ngx.req.set_body_data(r);
                if err then
                    ngx.log(ngx.ERROR, "Failed to decompress GZIP data: ", err)
                    return ngx.exit(500)
                end

                -- 设置响应头
                ngx.header.content_type = 'application/json'

                -- 输出解压后的数据
                ngx.say(r)
                return ngx.exit(200)
            }
        }

至此完成解压工作;

容易踩坑点:询问gbt的时候会提示使用nginx的with-http_gunzip_module模块,设置gunzip on;来自动解压,但是尝试多次后都无法成功。有成功的可以分享下经验哈。

翻看了一些资料,个人理解是 其实with-http_gunzip_module模块是帮前端进行解压的,比如nginx location代理接口进行了gz数据压缩,代理一层的对外接口就可以自动解压了。另外下图资料也说明了假如正向解压有可能遭受网络工具,消耗系统资源

 


http://www.kler.cn/news/327743.html

相关文章:

  • QSpice (9) --结合Python仿真
  • PostgreSQL是否有等待事件
  • Android常用C++特性之std::abs
  • Clickhouse分布式表初体验
  • python的内存管理机制
  • DOM元素导出图片与PDF:多种方案对比与实现
  • 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall
  • 线程池:线程池的实现 | 日志
  • 普通人如何在未来市场中寻找赚钱机会?
  • 深信服2025届全球校招研发笔试-C卷(AK)
  • UE4/UE5开发资源
  • pyqt QGraphicsView 以鼠标为中心进行缩放
  • uniapp中实现评分组件,多用于购买商品后,对商品进行评价等场景
  • 数据结构-AC自动机
  • python 实现矩阵的Schur complement舒尔补算法
  • Goland无法使用debug的修复
  • 【源码+文档+调试讲解】无人超市系统python
  • 【Docker】02-数据卷
  • 【研1深度学习】《神经网络和深度学习》阅读笔记(记录中......
  • 博弈论(学习笔记)
  • RK3568 android11 适配鼎桥MT5710-CN 5G模块
  • 墙绘产品在线展示:SpringBoot技术的应用
  • 数据结构——对顺序线性表的操作
  • docker 私有仓库的镜像删除
  • 基于SSM的O20兼职系统的设计与实现(源码+定制+文档)
  • Windows下安装 LLama-Factory 保姆级教程
  • leetcode:字符串相加
  • leetcode每日一题day19(24.9.29)——买票需要的时间
  • 为啥数据需转换成tensor才能参与后续建模训练
  • Kafka学习笔记(一)Linux环境基于Zookeeper搭建Kafka集群、Kafka的架构