lightning
服务收集app web h5 埋点信息,openresty 实现 支持文件上传/zlib压缩/messagepack
安装openresty
[1] 安装依赖包
yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl
[2] 安装openresty
tar zxvf ngx_openresty-{Version}.tar.gz
cd ngx_openresty-{Version}
./configure --prefix=/usr/local/openresty
make
make install
依赖
运行
修改bin/start.sh
OPENRESTY_INSTALL_PATH 为你的openresty 安装路径
修改配置文件路径为你nginx.conf的路径
修改bin/stop.sh 同上
修改conf/nginx.conf 里面加载lua的路径指向到该项目路径
启动重启:
sh bin/star.tsh
停止:
sh bin/stop.sh
修改相关配置
lightning-gataway/lualib/lightning/config.lua
_Config={
--- kafka broker list
BROKER_LIST = {
{ host = "", port = 9092 },
{ host = "", port = 9092 },
{ host = "", port = 9092 },
},
--- kafka config one ngx worker one kafka client or producer instance
KAFKA_CONFIG= {
producer_type = "async", ---异步
socket_timeout = 6000, --- request_timeout
max_retry = 2, --- 重试次数
refresh_interval = 600 * 1000, ---auto refresh the metadata in milliseconds.
keepalive_timeout = 600 * 1000, ---connection timeout 10 min
keepalive_size = 40, --- pool size for each nginx worker
max_buffering = 1000000, --- queue size
flush_time=100, --- send kafka XX ms
batch_num=500 --- 批量大小,当队列内达到500时进行一个send 到kakfa
},
--- MD5 key
MD5_KEY="",
SPIDER_REG="", ---过滤的爬虫网站
DID_LENGTH=32, --- did 长度限制
TIMESTAMP_LENGTH=13, --- 时间戳长度限制
DST_ANDROID="1", --- 设备android
DST_IOS="2", --- 设备IOS
MD5_LIST_APP={"fr","ct","tpc","did","eid"}, --- app md5生成签名的字段拼接顺序
MD5_LIST_WEB_H5={"fr","ct","tpc","url","eid"} --- web h5 md5生成签名的字段拼接顺序
}
埋点字段
字段 | 来源 | 是否必填 | 说明
----|------|----|----
req | 服务端 | 是 | 请求到达时间
ua | 服务端 | 是 | user agent
ip | 服务端 | 是 | client ip
clt | 客户端 | 是 | 终端类型 [app web h5]
pf | 客户端 | 是 | 平台类型,哪个平台在调用数据接口
typ | 客户端 | 是 | 事件类型 p: 进入页面事件,e: 页面内事件(点击曝光等)
tpc | 客户端 | 是 | 具体在给哪个业务或者产品在埋点,也是发给kafka的topic
pid | 客户端 | 是 | 页面id
ppid | 客户端 | 是 | 父页面id
eid | 客户端 | 是 | 事件id
pno | 客户端 | 是 | 页面访问深度
ver | 客户端 | 是 | 日志版本
data | 服务端 | 是 | 业务字段,服务端传递给客户段要埋点的数据
did | 客户端 | 是 | 设备id ,app 端必须传,web h5 为空,服务端会将did写入cookie
amd | 客户端 | 否 | imei,idfa
uid | 客户端 | 否 | 用户id
sid | 客户端 | 否 | 会话 session id
dsv | 客户端 | 是 | 设备系统版本 app 必须传递
dt | 客户端 | 是 | 设备类型 app 必须传递
dst | 客户端 | 是 | 设备系统类型 1 android 2 ios app 必须传递
dsv | 客户端 | 是 | 设备系统版本 app 必须传递
apv | 客户端 | 是 | 应用版本 app version app 必须传递
lag | 客户端 | 是 | 客户端语言 app 必须传递
fr | 客户端 | 是 | app 下载来源
net | 客户端 | 是 | 网络类型 2-4 : 2-4g ,5:wifi ,1:其他 app 必须传递
scr | 客户端 | 是 | 屏幕分辨率 app 必须传递
lon | 客户端 | 否 | 经度 app 必须传递
lat | 客户端 | 否 | 纬度 app 必须传递
ct | 客户端 | 是 | 客户端时间戳 ms
lc | 客户端 | 否 | 登陆方式
sn | 客户端 | 是 | 请求域名 web h5 必须传递
url | 客户端 | 是 | 请求的url web h5 必须传递
refer | 客户端 | 是 | 请求的refer url web h5 必须传递
sig | 客户端 | 是 | 签名
埋点信息
{
"cm": {
"ver": "2", //日志版本
"clt": "app",//终端类型 app web h5
"pf": "demo", //平台
"tpc": "recommder",
"did": "ce9ca2eb2a9a9f964ef895ab084ce12b", //设备id,浏览器id
"amd": "ce9ca2eb2a9a9f964ef895ab084ce12b", //imei|idfa
"uid": "9000032", //用户id
"sid": "9f964ef895ab084ce",//会话session id
"dsv": "4.0", //设备系统版本
"dt": "HM 1s", //设备类型
"dst": "1",//设备系统类型 1 android 2 ios
"apv": "1.3.5",//app 版本号
"lag": "zh", //客户端语言
"fr": "appStore",//app下载来源
"scr": "1027*777",//屏幕分辨率
"lc": "qq" //登陆方式
},
"log": [
{
"typ": "e",// 事件类型 e or p 两个事件 e页面内事件 p 进入页面事件
"pid": "00011",//页面id,和进入页面的p事件 eid 一样
"ppid": "00010",//父页面id
"eid": "00011",// 事件id
"pno": "10",//页面访问深度
"net": "1",//网络类型2-4 : 2-4g ,5:wifi ,1:其他
"sn": "www.xxx.com",//请求数据的域名
"url": "/login",//当前url
"ref": "/register",//refer url
"ct": "1486915200000",//client 时间戳
"lon": 89.09, //经纬度
"lat": 88.09,
"data": {// 业务数据 由服务端传递给client 进行埋点
"rec": "2.12.20.jn.zk"
},
"sig": "2160ed0e47607e1e53fd5aaed41f7e73"//生成的签名
},{
"typ": "e",
"pid": "00011",
"ppid": "00010",
"eid": "00011",
"pno": 10,
"net": 1,
"sn": "www.xxx.com",
"url": "/login",
"ref": "/register",
"ct": "1486915200000",
"lon": 89.09,
"lat": 88.09,
"data": {
"rec": "2.12.20.jn.zk"
},
"sig": "2160ed0e47607e1e53fd5aaed41f7e73"
}
]
}
Kafka接受json 格式 message
{
"ver": "2",
"clt": "app",
"pf": "demo",
"tpc": "rec",
"did": "ce9ca2eb2a9a9f964ef895ab084ce12b",
"amd": "ce9ca2eb2a9a9f964ef895ab084ce12b",
"uid": "9000032",
"sid": "9f964ef895ab084ce",
"dsv": "4.0",
"dt": "HM 1s",
"dst": 1,
"apv": "1.4.5",
"lag": "zh",
"fr": "appStore",
"scr": "1027*777",
"lc": "wx",
"req":"140023432423423",
"ua":"user agent",
"ip":"10.20.22.172",
"typ": "e",
"pid": "00011",
"ppid": "00010",
"eid": "00011",
"pno": "10",
"net": "1",
"sn": "www.xx.com",
"url": "/login",
"ref": "/register",
"ct": "1486915200000",
"lon": "89.09",
"lat": "88.09",
"data": {
"rec": "2.12.20.jn.zk"
},
"sig": "2160ed0e47607e1e53fd5aaed41f7e73"
}