DataV是阿里雲的可視化產品,能協助您通過圖形化的介面輕鬆搭建專業水準的可視化應用,豐富表現日誌分析資料。本文檔介紹如何通過Log Service對接DataV進行大屏資料展示。
前提條件
背景資訊
即時大屏廣泛應用於大型線上促銷活動。即時大屏基於流式計算架構,該架構包含以下模組:
資料擷取:將來自各源頭資料即時採集。
中間儲存:利用類Kafka Queue進行生產系統和消費系統解耦。
Realtime Compute:資料處理關鍵環節,訂閱即時資料,通過計算規則對視窗中資料進行運算。
結果儲存:計算結果資料存入SQL和NoSQL。
可視化:通過API調用結果資料進行展示。
在阿里集團內,有大量成熟的產品可以完成此類工作,一般可供選型的產品如下:
Log Service支援通過Log Service查詢分析API直接對接DataV進行大屏資料展示。
功能特點
計算方式根據資料量、即時性和業務需求會分為以下兩種。
Realtime Compute(Realtime Compute):固定的計算+變化的資料
離線計算(資料倉儲+離線計算):變化的計算+固定的資料
在對即時性有要求的日誌分析情境中,Log Service為您提供即時索引LogHub中資料機制,可通過LogSearch/Anlaytics直接進行查詢分析。這種方式具有以下優勢:
快速:一秒內查詢(5個條件),可處理10億級資料。一秒內分析(5個維度彙總+GroupBy),可彙總億層級資料,無需等待和預計算結果。
即時:99.9%情況下可做到日誌產生1秒內反饋到大屏。
動態:無論修改統計方法還是補資料,支援即時重新整理顯示結果,無需等待重新計算。
這種方式具有以下限制:
資料量:單次計算資料量限制為百億行,當超過百億行,需要限定時間段。
計算靈活度:計算限於SQL92文法,不支援自訂UDF。
DataV配置步驟
建立DataV資料來源。
登入DataV控制台。
在我的資料頁簽中,單擊添加資料。
在添加資料對話方塊中,完成如下配置,然後單擊確定。
配置項
說明
類型
選擇簡單Log Service SLS。
自訂資料來源名稱
設定資料來源的名稱,例如log_service_api。
AppKey
阿里雲帳號的AccessKey ID或者具備Log Service讀取許可權的RAM使用者的AccessKey ID。
AppSecret
阿里雲帳號的AccessKey Secret或者具備Log Service讀取許可權的RAM使用者的AccessKey Secret。
EndPoint
Log ServiceProject所在地區的Endpoint。更多資訊,請參見服務入口。
開啟可視化畫布。
在我的可視化頁簽中,將滑鼠懸浮在已存在的可視化應用上,單擊編輯。
在我的可視化頁簽中,建立專案。具體操作,請參見使用模板建立PC端可視化應用。
建立折線圖並添加過濾器。
建立一個折線圖。
在左側組件列表中,選擇
。在右側資料頁簽中,單擊配置資料來源,完成如下配置。
配置項
說明
資料來源類型
選擇簡單Log Service SLS。
選擇已有資料來源
選擇您在步驟1中建立的資料來源,例如log_service_api。
查詢
查詢樣本如下:
{ "projectName": "dashboard-demo", "logStoreName": "access-log", "topic": "", "from": ":from", "to": ":to", "query": "*| select approx_distinct(remote_addr) as uv ,count(1) as pv , date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d %H:%i:%s') as time group by time order by time limit 1000" , "line": 100, "offset": 0 }
查詢樣本中的各個欄位說明如下表所示。
參數
說明
projectName
Project名稱。
logstoreName
Logstore名稱。
topic
日誌主題,如果您沒有設定日誌主題,此處請留空。
from、to
from和to分別是查詢的起始和結束時間。
說明樣本中填寫的是
:from
和:to
。在測試時,您可以先填寫時間戳記,例如1509897600。發布之後換成:from
和:to
,然後您可以在URL參數裡控制這兩個數值的具體時間範圍。例如,預覽時的URL是http://datav.aliyun.com/screen/86312
,開啟http://datav.aliyun.com/screen/86312?from=1510796077&to=1510798877
後,會按照指定的時間進行計算。query
查詢條件。query的文法請參見分析概述。
說明query中的時間格式為
YYYY/mm/dd HH:mm:ss
,例如2017/07/11 12:00:00,所以採用以下方式把時間對齊到整點,再轉化成目標格式。date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d%H:%i:%s')
line
請填寫預設值100。
offset
請填寫預設值0。
配置完成後,查看資料響應結果。
建立過濾器。
選中資料過濾器,然後單擊添加過濾器後的加號(+)。
過濾器內容請按照以下格式填寫。
return Object.keys(data).map((key) => { let d= data[key]; d["pv"] = parseInt(d["pv"]); return d; });
在過濾器中,要把y軸用到的結果顯示為int類型,上述範例中,y軸為pv,所以需要轉換pv列。
可以看到在結果中有t和pv兩列,您可以將x軸配置為t,y軸配置成pv。
建立餅狀圖並添加過濾器。
建立輪播餅圖。
在左側組件列表中,選擇
。在右側資料頁簽中,單擊配置資料來源,完成如下配置。
配置項
說明
資料來源類型
選擇簡單Log Service SLS。
選擇已有資料來源
選擇您在中步驟1建立的資料來源,例如log_service_api。
查詢
查詢樣本如下:
{ "projectName": "dashboard-demo", "logStoreName": "access-log", "topic": "", "from": 1509897600, "to": 1509984000, "query": "*| select count(1) as pv ,method group by method" , "line": 100, "offset": 0 }
樣本參數說明請參見折線圖的參數說明。
配置完成後,查看資料響應結果。
添加一個過濾器。
選中資料過濾器,然後單擊添加過濾器後的加號(+)。
過濾器內容請按照以下格式填寫。
return Object.keys(data).map((key) => { let d= data[key]; d["pv"] = parseInt(d["pv"]); return d; })
餅圖的type配置為method,value配置為pv。
回調ID動態擷取時間範圍。
以下步驟示範如何動態顯示15分鐘的日誌。
建立一個待用資料源並添加一個過濾器。
在右側資料頁簽中,單擊配置資料來源。
在設定資料來源面板中,完成如下配置。
待用資料使用預設代碼即可。
過濾器代碼參考如下所示。
return [{ value:Math.round(Date.now()/1000) }];
return [{ value:Math.round((Date.now() - 24 * 60 * 60 * 1000)/1000) }];
在互動頁簽中,選中啟用對應的響應事件,並將value綁定到變數中。
在資料檢視,通過
:from
和:to
引用回調ID,樣本如下:{ "projectName": "dashboard-demo", "logStoreName": "access-log", "topic": "", "from": ":from", "to": ":to", "query": "*| select count(1) as pv ,referer group by pv desc limit 30" , "line": 100, "offset": 0 }
預覽和發布。
單擊預覽表徵圖對已編輯的視圖進行預覽。
單擊發布表徵圖即完成視圖發布。
案例:調整不同統計口徑下的雲棲大會網站訪問即時大屏
雲棲大會期間有一個臨時需求,需要您統計大會網站的全國各地訪問量以在即時大屏上顯示。此前您已配置採集全量日誌資料,並且在Log Service中開啟了查詢分析,所以只要輸入查詢分析Query即可。在此過程中,需求是不斷調整的,如下所列:
原始需求:在雲棲大會的第一天,您需要統計UV(當日點擊使用者數量)。
您要查詢所有訪問日誌中nginx下forward欄位的資料(該欄位記錄訪問使用者的一個或多個IP,每條日誌一個forward欄位),通過
approx_distinct(forward)
計算去重後的IP地址數量,擷取從雲棲大會首日零時到當前時刻的點擊UV數,可以使用如下語句。* | select approx_distinct(forward) as uv
需求第一次調整:雲棲大會的第二天,需求調整為您需要統計yunqi.aliyun.com這個網域名稱下的使用者訪問量資料。
您可以增加一個過濾條件host進行即時查詢,使用如下語句。
host:yunqi.aliyun.com | select approx_distinct(forward) as uv
需求第二次調整:在統計過程中,您發現Nginx訪問日誌forward欄位存在多個IP,您預設只要第一個IP。
使用如下語句。
host:yunqi.aliyun.com | select approx_distinct(split_part(forward,',',1)) as uv
需求第三次調整:雲棲大會的第三天,需求被加上限制條件,您需要剔除通過UC瀏覽器訪問並點擊該瀏覽器廣告而來的使用者訪問量,統計非UC瀏覽器廣告導流、不重複IP的全國各地使用者訪問量。
此時您可以加上一個過濾條件not,使用如下語句。
host:yunqi.aliyun.com not URL:uc-iflow | select approx_distinct(split_part(forward,',',1)) as uv