前言
面向用戶端的系統,往往會對用戶行為進行數據埋點采集,如電商系統用戶點擊推薦商品、添加購物車、訂單支付等。通過這些重要環節將用戶的操作行為數據上報到后端,再由大數據對數據進行統計、分析計算,最終將結果反饋給運營和決策者,以便更好的服務用戶和做好商業決策。
對企業來說,在法律允許范圍內,數據應采盡采。數據越多對行為分析往往越準確。因此,接收采集數據的服務后端,必須考慮服務的高性能、高吞吐量問題。如何,快速地接收采集數據,并推送到后端大數據使用,同時保證系統服務的穩定和高效,將是一個很大的挑戰。本文將向大家介紹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多文件掃描采集/數據清洗等,這些就不一一介紹了,留給小伙伴們思考。