面向用户端的系统,往往会对用户行为进行数据埋点采集,如电商系统用户点击推荐商品、添加购物车、订单支付等。通过这些重要环节将用户的操作行为数据上报到后端,再由大数据对数据进行统计、分析计算,最终将结果反馈给运营和决策者,以便更好的服务用户和做好商业决策。
对企业来说,在法律允许范围内,数据应采尽采。数据越多对行为分析往往越准确。因此,接收采集数据的服务后端,必须考虑服务的高性能、高吞吐量问题。如何,快速地接收采集数据,并推送到后端大数据使用,同时保证系统服务的稳定和高效,将是一个很大的挑战。本文将向大家介绍Nginx作为采集后端服务的一种用法。希望对有相似场景的小伙伴有所帮助和启发。
数据采集流程架构
nginx作为一个高性能的服务组件,早已被各大厂反复验证。这里采用Nginx作为采集服务的后端。Nginx提供一个post埋点接口,如:http://xxxx/trackLog。接收前端埋点请求,将post请求body写入本地日志文件,直接响应返回。后端以异步方式,使用采集代理程序(如logstash)监听日志文件,并将数据推送到kafka。大数据程序(Flink)对kafka数据统计分析,形成结果数据提供给上层应用使用。
Nginx接收到前端页面的http post请求,将post中的body参数作为埋点的消息内容,以json格式按行追加到日志文件中。这个过程的关键点:如何将post body参数内容写入到一个单独的日志文件。下面是Nginx的相关配置。
Nginx post body参数配置
修改Nginx config配置文件,在配置文件中加入以下信息。
http 块添加以下配置
# 添加post body参数日志,日志为json格式 log_format trackerlog escape=json '$request_body';
server 块添加以下配置
location /tracklog { # 非post请求,拒绝 if ($request_method !~* POST) { return 403; } # request_body变量 通过proxy_pass请求才生效 access_log /usr/local/nginx/logs/track.log tracklog; proxy_pass http://127.0.0.1/return200/; } location /return200 { default_type Application/json; return 200 '{"code":0,"msg":"success"}'; }
生效Nginx Config
# Nginx sbin目录执行配置生效命令 ./nginx -s reload
测试post请求
# 部署Nginx服务器执行测试post请求,body参数可根据业务场景自行定义 curl -H "Content-type:application/json" -X POST -d '{"name":"test"}' http://localhost/tracklog
日志查看
生成的日志在/usr/local/nginx/logs/track.log目录下,查看日志文件,日志文件内容已生成,验证完成。
总结
本文介绍了埋点采集服务Nginx的使用方案。包含整体流程架构,Nginx配置方式,数据验证等内容。相信看到这里的小伙伴,对采集方案有了大致的了解。当然,这个只是基础实现,在生产环境应用,还需要保证高可用等处理。如Nginx的多实例部署,日志文件按每天时间生成,logstash多文件扫描采集/数据清洗等,这些就不一一介绍了,留给小伙伴们思考。