簡介
阿裡雲 SLS 是雲上一站式大資料處理、分析平台,其目标是“讓使用者專注在資料價值上,把資料系統部署、運維、擴容的工作交給 SLS”。随着使用者在 SLS 存儲的資料越來越多,除了最常見的運維等場景,如何進一步挖掘資料的價值,就成為了下一步的重要目标。這裡,我們通過一個執行個體,介紹如何使用 SLS 基于 WEB 通路日志一站式實作使用者畫像分析,一步一步實作資料價值的挖掘。
通路日志
WEB 通路日志包含了很多使用者特征資料,以 nginx 伺服器為例,如下是使用 logtail 從測試 nginx 伺服器采集到通路日志樣例,該樣例是模拟“電商商品點選”場景:
content: 127.0.0.1 - - [26/Oct/2020:21:43:09 +0800] "GET /product/8396812?from=source-2 HTTP/1.1" 200 473 "-" "Mozilla/5.0 (iPhone; U; fr; CPU iPhone OS 4_2_1 like Mac OS X; fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5"
在通路日志中,包含以下使用者特征資訊:
- 用戶端 IP:可以解析得到通路發出的地理位置資訊、IP 風險度(是否存在共攻擊風險)
- 時間:使用者的通路頻率,通路的時間偏好
- URL 位址:使用者的商品偏好(商品ID)、點選來源(廣告源)
- HTTP 狀态碼:運維定位通路失敗的原因、跟蹤客戶流失
- 請求資料大小
- 用戶端 UserAgent:使用者裝置資訊(硬體裝置、作業系統、浏覽器)
但是,通路日志的所有内容被打包成一條非結構化的文本資料條目,無法直接使用。為了實作有效資訊的使用,第一步就是需要進行資料規整,從其中抽取出有效資訊,變為結構化資料。SLS 中【資料加工】就是實作資料處理和結構化的完整解決方案。
有了結構化資料,下一步則是統計分析和可視化展示。SLS 提供大規模資料的實時查詢與分析能力,并支援使用 SQL 做統計分析。SLS 還提供了豐富的資料可視化方式,隻需要在控制台選擇配置就可以,簡使用單友善。
SLS 處理
Logtail: 采集通路日志
使用 logtail 采集已經有很多社群文章的講解,這裡就不再贅述。列舉以下幾篇文章以供參考:
Logtail從入門到精通系列 Kubernets日志采集配置模式介紹與對比資料加工:規整資料
SLS 的資料加工功能是一個全托管、高可用、易擴充的資料處理服務,廣泛适用于資料的規整、富化、分發、彙總、重建索引等場景。資料加工 DSL(Domain Specific Language)文法是 SLS 資料加工使用的與Python相容的腳本,編排靈活易用。DSL 目前提供 200+ 内置函數來簡化資料加工模式,更多函數還在添加和更新。
這裡,我們展示使用資料加工從通路日志中抽取出部分使用者相關的特征資料:
- 用戶端 IP
- 點選商品
- 裝置資訊
資料加工 DSL 腳本如下:
e_regex("content", grok(r'%{IPORHOST:client_ip} - %{USER} \[%{HTTPDATE:time}\] %{QS:request} %{NUMBER} (?:%{NUMBER}|-) %{QS} %{QS:user_agent}'))
e_regex("request", grok(r'"%{WORD:method} %{URIPATH:product}%{URIPARAM:params} %{NOTSPACE:http_version}"'))
e_kv("params")
e_set("user_os", ua_parse_os(v("user_agent")))
e_drop_fields("content", "request", "params", "user_agent", regex=False)
這裡,DSL 首先使用正則函數,從非結構化文本中提取出各個組成部分,而且支援豐富的 GROK 模式,使得正則抽取不再那麼令人生畏。接着通過 KV 抽取通路請求中的參數變量,和解析使用者的裝置資訊。最後,我們可以操作時間字段,保持資料的簡潔,友善分析使用和減少存儲成本。
經過加工處理以後,資料内容規整為:
client_ip: 127.0.0.1
from: source-2
http_version: HTTP/1.1
method: GET
product: /product/8396812
time: 26/Oct/2020:21:43:09 +0800
user_os: {"family": "iOS", "major": "4", "minor": "2", "patch": "1"}
從以上可以看出,資料加工 DSL 使用很友善,因為 DSL 内置函數非常豐富,可以滿足各種各樣的資料處理需求。而且開發活躍,一直在添加、更新函數。
查詢/SQL:分析展示結果
通過資料加工将非結構化的文本規整為結構化資料後,SLS 就可以非常友善地進行同居分析。這裡,我們從 3 個執行個體展示 SLS 的統計分析和可視化,實作使用者畫像。
1. 使用者裝置資訊統計
統計通路涞源的使用者裝置統計,SQL語句如下:
* | select "user_os.family" as Device, count(1) as Count group by Device
涉及到成分占比對比分析,選擇“餅圖”,效果如圖:

2. 通路地域分布
模拟通路資料的地理位置資訊,SQL語句如下:
* | select ip_to_province(client_ip) as ip_province, count(*) as Users group by ip_province order by Users desc limit 500
基于地理位置的資料分布,選擇“地圖”,效果如下:
3. 各商品的點選來源
分析每一個廣告投放對于各個商品的點選效果,SQL語句如下:
* | select product, "from" as source, count(1) as count group by product, source
分類統計,選擇“流圖”,類型“柱狀圖”,聚合列選擇“source”,效果如下:
總結
如果我們為了實作資料分析,需要搭建多個不同的系統元件,就會分散我們對于資料價值挖掘的投入,SLS 正是解決這個問題。從資料采集,到規整化處理,最後統計分析和可視化,一站式完成。
- Logtail 采集性能高、開銷少、延遲低
- 資料加工處理靈活易用、免運維、易擴充
- 統計分析支援 SQL,豐富強大,完整的可視化方式