前言
面向用戶端的系統(tǒng),往往會(huì)對(duì)用戶行為進(jìn)行數(shù)據(jù)埋點(diǎn)采集,如電商系統(tǒng)用戶點(diǎn)擊推薦商品、添加購(gòu)物車、訂單支付等。通過這些重要環(huán)節(jié)將用戶的操作行為數(shù)據(jù)上報(bào)到后端,再由大數(shù)據(jù)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、分析計(jì)算,最終將結(jié)果反饋給運(yùn)營(yíng)和決策者,以便更好的服務(wù)用戶和做好商業(yè)決策。
對(duì)企業(yè)來(lái)說(shuō),在法律允許范圍內(nèi),數(shù)據(jù)應(yīng)采盡采。數(shù)據(jù)越多對(duì)行為分析往往越準(zhǔn)確。因此,接收采集數(shù)據(jù)的服務(wù)后端,必須考慮服務(wù)的高性能、高吞吐量問題。如何,快速地接收采集數(shù)據(jù),并推送到后端大數(shù)據(jù)使用,同時(shí)保證系統(tǒng)服務(wù)的穩(wěn)定和高效,將是一個(gè)很大的挑戰(zhàn)。本文將向大家介紹Nginx作為采集后端服務(wù)的一種用法。希望對(duì)有相似場(chǎng)景的小伙伴有所幫助和啟發(fā)。
數(shù)據(jù)采集流程架構(gòu)

nginx作為一個(gè)高性能的服務(wù)組件,早已被各大廠反復(fù)驗(yàn)證。這里采用Nginx作為采集服務(wù)的后端。Nginx提供一個(gè)post埋點(diǎn)接口,如:http://xxxx/trackLog。接收前端埋點(diǎn)請(qǐng)求,將post請(qǐng)求body寫入本地日志文件,直接響應(yīng)返回。后端以異步方式,使用采集代理程序(如logstash)監(jiān)聽日志文件,并將數(shù)據(jù)推送到kafka。大數(shù)據(jù)程序(Flink)對(duì)kafka數(shù)據(jù)統(tǒng)計(jì)分析,形成結(jié)果數(shù)據(jù)提供給上層應(yīng)用使用。
Nginx接收到前端頁(yè)面的http post請(qǐng)求,將post中的body參數(shù)作為埋點(diǎn)的消息內(nèi)容,以json格式按行追加到日志文件中。這個(gè)過程的關(guān)鍵點(diǎn):如何將post body參數(shù)內(nèi)容寫入到一個(gè)單獨(dú)的日志文件。下面是Nginx的相關(guān)配置。
Nginx post body參數(shù)配置
修改Nginx config配置文件,在配置文件中加入以下信息。
http 塊添加以下配置
# 添加post body參數(shù)日志,日志為json格式 log_format trackerlog escape=json '$request_body';
server 塊添加以下配置
location /tracklog { # 非post請(qǐng)求,拒絕 if ($request_method !~* POST) { return 403; } # request_body變量 通過proxy_pass請(qǐng)求才生效 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目錄執(zhí)行配置生效命令 ./nginx -s reload
測(cè)試post請(qǐng)求
# 部署Nginx服務(wù)器執(zhí)行測(cè)試post請(qǐng)求,body參數(shù)可根據(jù)業(yè)務(wù)場(chǎng)景自行定義 curl -H "Content-type:application/json" -X POST -d '{"name":"test"}' http://localhost/tracklog
日志查看
生成的日志在/usr/local/nginx/logs/track.log目錄下,查看日志文件,日志文件內(nèi)容已生成,驗(yàn)證完成。

總結(jié)
本文介紹了埋點(diǎn)采集服務(wù)Nginx的使用方案。包含整體流程架構(gòu),Nginx配置方式,數(shù)據(jù)驗(yàn)證等內(nèi)容。相信看到這里的小伙伴,對(duì)采集方案有了大致的了解。當(dāng)然,這個(gè)只是基礎(chǔ)實(shí)現(xiàn),在生產(chǎn)環(huán)境應(yīng)用,還需要保證高可用等處理。如Nginx的多實(shí)例部署,日志文件按每天時(shí)間生成,logstash多文件掃描采集/數(shù)據(jù)清洗等,這些就不一一介紹了,留給小伙伴們思考。






