一:场景描述
对于线上大流量服务或者需要上报日志的nginx服务,每天会产生大量的日志,这些日志非常有价值。可用于计数上报、用户行为分析、接口质量、性能监控等需求。但传统nginx记录日志的方式数据会散落在各自nginx上,而且大流量日志本身对磁盘也是一种冲击。
我们需要把这部分nginx日志统一收集汇总起来,收集过程和结果需要满足如下需求:
支持不同业务获取数据,如监控业务,数据分析统计业务,推荐业务等。
数据实时性
高性能保证
本环境主要为了收集用户行为日志,配合前端埋点实现精确统计用户行为
方案
方案描述:
1、客户端,包括安卓、IOS、PC、H5页面通过埋点方式向后台发送用户行为
2:nginx接收请求后,使用lua完成日志整理
3:根据不同业务的nginx日志,划分不同的topic。
4:lua实现producter异步发送到kafka集群。
安装Openresty
下载解压Openresty
wget https://openresty.org/download/openresty-1.9.7.4.tar.gz
tar -xzf openresty-1.9.7.4.tar.gz /opt/nginx/
编译安装
./configure --with-luajit --without-http_redis2_module --with-http_iconv_module
make
make install
安装lua-resty-kafka
下载lua-resty-kafka:
wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip
unzip master.zip
拷贝lua-resty-kafka到openresty
mkdir -p /usr/local/openresty/lualib/kafka
cp -rf /usr/local/nginx/lua-resty-kafka-master/lib/resty /usr/local/openresty/lualib/kafka/
下载并编译lua-cjson
wget https://github.com/openresty/lua-cjson/archive/2.1.0.6.tar.gz
tar -xvf 2.1.0.6.tar.gz
cd lua-cjson-2.1.0.6
修改Makefile,将地址修改为luajit安装目录
PREFIX = /usr/local/luajit
LUA_INCLUDE_DIR ?= $(PREFIX)/include/luajit-2.0
make
make install
安装Zookeeper
安装Kafka
配置
问题解决:
如果nginx出现下面的异常,将producer.lua放置对应的目录即可
2019/03/04 15:42:17 [error] 83444#0: *26 lua entry thread aborted: runtime error: /usr/local/nginx/conf/lua/erphio.lua:3: module ‘resty.kafka.producer’ not found:
no field package.preload[‘resty.kafka.producer’]
no file ‘/usr/local/openresty/lualib/kafka/resty/kafka/producer.lua’
no file ‘./resty/kafka/producer.lua’
no file ‘/usr/local/luajit/share/luajit-2.0.4/resty/kafka/producer.lua’
no file ‘/usr/local/share/lua/5.1/resty/kafka/producer.lua’
no file ‘/usr/local/share/lua/5.1/resty/kafka/producer/init.lua’
no file ‘/usr/local/luajit/share/lua/5.1/resty/kafka/producer.lua’
no file ‘/usr/local/luajit/share/lua/5.1/resty/kafka/producer/init.lua’
no file ‘./resty/kafka/producer.so’
no file ‘/usr/local/lib/lua/5.1/resty/kafka/producer.so’
no file ‘/usr/local/luajit/lib/lua/5.1/resty/kafka/producer.so’
no file ‘/usr/local/lib/lua/5.1/loadall.so’
no file ‘./resty.so’
no file ‘/usr/local/lib/lua/5.1/resty.so’
no file ‘/usr/local/luajit/lib/lua/5.1/resty.so’
no file ‘/usr/local/lib/lua/5.1/loadall.so’
stack traceback: