全部產品
Search
文件中心

Simple Log Service:對接DataV

更新時間:Jun 30, 2024

DataV是阿里雲的可視化產品,能協助您通過圖形化的介面輕鬆搭建專業水準的可視化應用,豐富表現日誌分析資料。本文檔介紹如何通過Log Service對接DataV進行大屏資料展示。

前提條件

背景資訊

即時大屏廣泛應用於大型線上促銷活動。即時大屏基於流式計算架構,該架構包含以下模組:

  • 資料擷取:將來自各源頭資料即時採集。

  • 中間儲存:利用類Kafka Queue進行生產系統和消費系統解耦。

  • Realtime Compute:資料處理關鍵環節,訂閱即時資料,通過計算規則對視窗中資料進行運算。

  • 結果儲存:計算結果資料存入SQL和NoSQL。

  • 可視化:通過API調用結果資料進行展示。

在阿里集團內,有大量成熟的產品可以完成此類工作,一般可供選型的產品如下:

Log Service支援通過Log Service查詢分析API直接對接DataV進行大屏資料展示。 Log Service對接DataV

功能特點

計算方式根據資料量、即時性和業務需求會分為以下兩種。

  • Realtime Compute(Realtime Compute):固定的計算+變化的資料

  • 離線計算(資料倉儲+離線計算):變化的計算+固定的資料

在對即時性有要求的日誌分析情境中,Log Service為您提供即時索引LogHub中資料機制,可通過LogSearch/Anlaytics直接進行查詢分析。這種方式具有以下優勢:

  • 快速:一秒內查詢(5個條件),可處理10億級資料。一秒內分析(5個維度彙總+GroupBy),可彙總億層級資料,無需等待和預計算結果。

  • 即時:99.9%情況下可做到日誌產生1秒內反饋到大屏。

  • 動態:無論修改統計方法還是補資料,支援即時重新整理顯示結果,無需等待重新計算。

這種方式具有以下限制:

  • 資料量:單次計算資料量限制為百億行,當超過百億行,需要限定時間段。

  • 計算靈活度:計算限於SQL92文法,不支援自訂UDF。

DataV配置步驟

  1. 建立DataV資料來源。

    1. 登入DataV控制台

    2. 我的資料頁簽中,單擊添加資料

    3. 添加資料對話方塊中,完成如下配置,然後單擊確定

      配置項

      說明

      類型

      選擇簡單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。更多資訊,請參見服務入口

  2. 開啟可視化畫布。

    • 我的可視化頁簽中,將滑鼠懸浮在已存在的可視化應用上,單擊編輯

    • 我的可視化頁簽中,建立專案。具體操作,請參見使用模板建立PC端可視化應用

  3. 建立折線圖並添加過濾器。

    1. 建立一個折線圖。

      1. 在左側組件列表中,選擇圖表 > 折線圖 > 折線圖

      2. 在右側資料頁簽中,單擊配置資料來源,完成如下配置。

        配置項

        說明

        資料來源類型

        選擇簡單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

        日誌主題,如果您沒有設定日誌主題,此處請留空。

        fromto

        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。

    2. 配置完成後,查看資料響應結果。

    3. 建立過濾器。

      選中資料過濾器,然後單擊添加過濾器後的加號(+)。

      過濾器內容請按照以下格式填寫。

      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。

  4. 建立餅狀圖並添加過濾器。

    1. 建立輪播餅圖。

      1. 在左側組件列表中,選擇圖表 > 餅環圖 > 輪播餅圖

      2. 在右側資料頁簽中,單擊配置資料來源,完成如下配置。

        配置項

        說明

        資料來源類型

        選擇簡單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
        }

        樣本參數說明請參見折線圖的參數說明。

    2. 配置完成後,查看資料響應結果。

    3. 添加一個過濾器。

      選中資料過濾器,然後單擊添加過濾器後的加號(+)。

      過濾器內容請按照以下格式填寫。

      return Object.keys(data).map((key) => {
      let d= data[key];
      d["pv"] = parseInt(d["pv"]);
      return d;
      })

      餅圖的type配置為method,value配置為pv。

  5. 回調ID動態擷取時間範圍。

    以下步驟示範如何動態顯示15分鐘的日誌。

    1. 建立一個待用資料源並添加一個過濾器。

      1. 在右側資料頁簽中,單擊配置資料來源

      2. 設定資料來源面板中,完成如下配置。

        • 待用資料使用預設代碼即可。

        • 過濾器代碼參考如下所示。

          return [{
            value:Math.round(Date.now()/1000)
          }];
          return [{
            value:Math.round((Date.now() - 24 * 60 * 60 * 1000)/1000)
          }];

        待用資料源

    2. 互動頁簽中,選中啟用對應的響應事件,並將value綁定到變數中。

      001

    3. 在資料檢視,通過: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
      }
  6. 預覽和發布。

    1. 單擊預覽表徵圖對已編輯的視圖進行預覽。

    2. 單擊發布表徵圖即完成視圖發布。

案例:調整不同統計口徑下的雲棲大會網站訪問即時大屏

雲棲大會期間有一個臨時需求,需要您統計大會網站的全國各地訪問量以在即時大屏上顯示。此前您已配置採集全量日誌資料,並且在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