閱讀504 返回首頁    go 魔獸


采集-多渠道數據__最佳實踐_日誌服務-阿裏雲

日誌服務LogHub功能提供數據實時采集與消費,其中實時采集功能支持30+種手段,這裏簡單介紹下各場景的接入方式。

數據采集一般有兩種方式,區別如下。我們這裏主要討論通過LogHub流式導入(實時)采集。

方式 優勢 劣勢 例子
批量導入 吞吐率大,麵向曆史存量數據 實時性較差 FTP、OSS上傳、郵寄硬盤、SQL數據導出
流式導入 實時,所見即所得,麵向實時數據 收集端要求高 LogHub、HTTP上傳、IOT,Queue

背景

“我要點外賣“是一個平台型電商網站,用戶、餐廳、配送員等。用戶可以在網頁、App、微信、支付寶等進行下單點菜;商家拿到訂單後開始加工,並自動通知周圍的快遞員;快遞員將外賣送到用戶手中。

screenshot

運營需求

在運營的過程中,發現了如下的問題:

  1. 獲取用戶難,投放一筆不小的廣告費對到渠道(網頁、微信推送),收貨了一些用戶,但無法評判各渠道的效果
  2. 用戶經常抱怨送貨慢,但慢在什麼環節,接單、配送、加工?如何優化?
  3. 用戶運營,經常搞一些優惠活動(發送優惠券),但無法獲得效果
  4. 調度問題,如何幫助商家在高峰時提前備貨?如何調度更多的快遞員到指定區域?
  5. 客服服務,用戶反饋下單失敗,用戶背後的操作是什麼?係統是否有錯誤?

數據采集難點

在數據化運營的過程中,第一步是如何將散落日誌數據集中收集起來,其中會遇到如下挑戰:

  • 多渠道:例如廣告商、地推(傳單)等
  • 多終端:網頁版、公眾賬號、手機、瀏覽器(web,m站)等
  • 異構網:VPC、用戶自建IDC,阿裏雲ECS等
  • 多開發語言:核心係統Java、前端Nginx服務器、後台支付係統C++
  • 設備:商家有不同平台(X86,ARM)設備

我們需要把散落在外部、內部日誌收集起來,統一進行管理。在過去這塊需要大量幾種工作,現在可以通過LogHub采集功能完成統一接入。

screenshot

日誌統一管理、配置

  1. 創建管理日誌項目Project,例如叫myorder
  2. 為不同數據源產生日誌創建日誌庫Logstore,例如:
    • wechat-server (存儲微信服務器訪問日誌)
    • wechat-app (存儲溫馨服務器應用日誌)
    • wechat-error (錯誤日誌)
    • alipay-server
    • alipay-app
    • deliver-app (送貨員app狀態)
    • deliver-error (錯誤日誌)
    • web-click (H5頁麵點擊)
    • server-access(服務端Access-Log)
    • server-app (應用)
    • coupon (應用優惠券日誌)
    • pay (支付日誌)
    • order(訂單日誌)
  3. 如需要對原始數據進行清洗與ETL,可以創建一些中間結果logstore

(更多操作可以參見快速開始/管理控製台

用戶推廣日誌采集

為獲取新用戶,一般有2種方式:

  1. 網站注冊時直接投放優惠券
  2. 其他渠道掃描二維碼,投放優惠券
    • 傳單二維碼
    • 掃描網頁二維碼登陸

做法

定義如下注冊服務器地址,生成二維碼(傳單、網頁)供用戶注冊掃描。用戶掃描該頁麵注冊時,就知道用戶通過特定來源進入,並記錄日誌。

  1. https://examplewebsite/login?source=10012&ref=kd4b

當服務端接受請求時,服務器輸出如下日誌:

  1. 2016-06-20 19:00:00 e41234ab342ef034,102345,5k4d,467890
  • time:注冊時間
  • session: 瀏覽器當前session,用以跟蹤行為
  • source:來源渠道,例如活動A為10001, 傳單為10002,電梯廣告為10003
  • ref:推薦號,是否有人推薦注冊,沒有則為空
  • params:其他參數

收集方式:

  1. 應用程序輸出日誌到硬盤,通過Logtail采集
  2. 應用程序通過SDK寫入,參見SDK

服務端數據采集

支付寶/微信公眾賬號編程是典型的Web端模式,一般會有三種類型日誌:

  • Nginx/Apache 訪問日誌:用以監控、實時統計
    1. 10.1.168.193 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=8225105404 HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
  • Nginx/Apache 錯誤日誌
    1. 2016/04/18 18:59:01 [error] 26671#0: *20949999 connect() to unix:/tmp/fastcgi.socket failed (111: Connection refused) while connecting to upstream, client: 10.101.1.1, server: , request: "POST /logstores/test_log HTTP/1.1", upstream: "fastcgi://unix:/tmp/fastcgi.socket:", host: "ali-tianchi-log.cn-hangzhou-devcommon-intranet. sls.aliyuncs.com"
  • 應用層日誌:應用層日誌要把事件產生的時間、地點、結果、延時、方法、參數等記錄詳細,對於擴展類字段一般放在最後
    1. {
    2. "time":"2016-08-31 14:00:04",
    3. "localAddress":"10.178.93.88:0",
    4. "methodName":"load",
    5. "param":["31851502"],
    6. "result":....
    7. "serviceName":"com.example",
    8. "startTime":1472623203994,
    9. "success":true,
    10. "traceInfo":"88_1472621445126_1092"
    11. }
  • 應用層錯誤日誌:錯誤發生時間、代碼行、錯誤碼、原因等
    1. 2016/04/18 18:59:01 :/var/www/html/SCMC/routes/example.php:329 [thread:1] errorcode:20045 message:extractFuncDetail failed: account_hsf_service_log

做法

  1. 日誌寫到本地文件,通過Logtail配置正則表達式寫到指定Logstore
  2. Docker中產生日誌可以使用容器服務集成日誌服務
  3. Java程序可以使用Log4J Appender日誌不落盤, LogHub Producer Library(客戶端高並發寫入)Log4J Appender
  4. C#、Python、Java、PHP、C等可以使用SDK寫入
  5. Windows服務器可以使用Logstash采集

終端用戶日誌接入

  • 移動端:可以使用移動端SDK IOS, Android、或MAN(移動數據分析)接入
  • ARM設備:ARM平台可以使用Native C交叉編譯
  • 商家平台設備:X86 平台設備可以用SDK、ARM平台可以使用Native C交叉編譯

Web/M 站頁麵用戶行為

頁麵用戶行為收集可以分為兩類:

  1. 頁麵與後台服務器交互:例如下單,登陸、退出等。
  2. 頁麵無後台服務器交互:請求直接在前端處理,例如滾屏,關閉頁麵等。

做法

  1. 第一種可以參考服務端采集方法
  2. 第二種可以使用Tracking Pixel/JS Library收集頁麵行為,參考Tracking Web接口

服務器日誌運維

例如:

  • Syslog日誌
    1. Aug 31 11:07:24 zhouqi-mac WeChat[9676]: setupHotkeyListenning event NSEvent: type=KeyDown loc=(0,703) time=115959.8 flags=0 win=0x0 winNum=7041 ctxt=0x0 chars="u" unmodchars="u" repeat=0 keyCode=32
  • 應用程序Debug日誌
    1. __FILE__:build/release64/sls/shennong_worker/ShardDataIndexManager.cpp
    2. __LEVEL__:WARNING
    3. __LINE__:238
    4. __THREAD__:31502
    5. offset:816103453552
    6. saved_cursor:1469780553885742676
    7. seek count:62900
    8. seek data redo
    9. log:pangu://localcluster/redo_data/41/example/2016_08_30/250_1472555483
    10. user_cursor:1469780553885689973
  • Trace日誌
    1. [2013-07-13 10:28:12.772518] [DEBUG] [26064] __TRACE_ID__:661353951201 __item__:[Class:Function]_end__ request_id:1734117 user_id:124 context:.....

做法

  • 參考服務端采集方法

不同網絡環境下數據采集

LogHub在各Region提供 訪問點,每個Region提供三種方式接入點:

  • 內網(經典網):本Region內服務訪問,帶寬鏈路質量最好(推薦)
  • 公網(經典網):可以被任意訪問,訪問速度取決於鏈路質量、傳輸安全保障建議使用HTTPS
  • 私網(專有網VPC):本Region內VPC網絡訪問

更多請參見網絡接入,總有一款適合你。

其他

  1. 參見LogHub完整采集方式
  2. 參見日誌實時消費,涉及流計算、數據清洗、數據倉庫和索引查詢等功能。

最後更新:2016-10-08 19:21:45

  上一篇:go 采集-IIS訪問日誌__最佳實踐_日誌服務-阿裏雲
  下一篇:go 采集-日誌管理__最佳實踐_日誌服務-阿裏雲