作者:章建(處知)
引言
日志服務 SLS 是云原生觀測和分析平臺,為 Log、Metric、Trace 等數據提供大規模、低成本、實時的平臺化服務。SLS 提供了多地域支持【1】,方便用戶可以根據數據源就近接入 SLS 服務,減少不必要網絡延遲以及公網費用。然而,如果需要將不同地域的數據進行聯合統籌分析時,該怎么辦呢?
SLS 近期推出的 StoreView 功能,可以協助用戶便捷地進行跨域、跨 project 的查詢和統計分析。StoreView 允許將多個 project 下(支持跨域)的 logstore 數據組合成一個虛擬的 logstore 使用,用戶可以像使用一個 logstore 那樣,使用 StoreView 進行各種查詢分析。
數據準備
下面以 4 個 demo projects 對幾個常遇到的場景進行說明,這 4 個 projects 來自不同的地域,信息如下:
其中,每個 project 都包含一個名為 user-queries 的 logstore,包含的核心字段如下:
字段名稱 | 類型 | 含義 |
---|---|---|
requestId | 字符串 | 請求的唯一ID |
status | 整數 | 請求狀態,200,400, 500等 |
latencyMs | 整數 | 請求延遲 |
resultRows | 整數 | 返回的結果行數 |
prcessedBytes | 整數 | 處理的原始數據量(字節) |
prcessedRows | 整數 | 處理的原始數據量(行數) |
query | 字符串 | SQL的具體內容 |
如何進行全域分析?
主要問題
在支持 StoreView 之前,如果需要對多個地域的 logstore 數據進行整體分析,則需要通過 ETL 任務先將各個地域的 logstore 數據同步到中心化的 logstore下,即需要為上面 4 個 demo project 下的 logstore 按照如下步驟創建同步 logstore 數據的加工任務(具體參考數據加工概述【2】)。
所有加工任務創建成功后,就可以使用中心化的 logstore?centralized-user-queries?進行統計分析了。
可以看到,上面的操作非常繁瑣,需要為每個 logstore 創建加工任務。另外,這種方式會導致數據存儲量放大,即每個 logstore 的存儲量會增加一倍,而且還有公網流量,從而導致產生額外費用。因此,通過加工任務的方式將多個地域的數據同步到一個 project 下,不僅費時費力,還費錢。
現在的做法
鑒于通過 ETL 任務將多地域的數據同步到一個 project 下的缺點,SLS 推出了 StoreView 功能,允許將不同地域、不同 project 下的多個 logstore 進行組合,形成一個虛擬的 logstore。用戶基于 StoreView 對跨域、跨 project 的多個 logstore 數據進行統籌分析下時,就像對單個 logstore 進行分析一樣簡單。進入任意一個 project,參考文檔數據集(StoreView)概述【3】?,創建如下 StoreView 定義。
創建好上面的 StoreView 定義后,就可以進入對應的查詢分析頁面進行操作了。通過下面 SQL 語句,可以在 StoreView 下實現和加工中心化 logstore 查詢分析一樣的效果。
可以看到,相比于為每個 logstore 創建加工任務,創建 StoreView 非常簡單。同時,使用 StoreView 進行數據分析時,不會存在 ETL 任務同步數據延遲的問題,因為它是實時地讀取底層每個 logstore 的數據。
StoreView SPL 特性
StoreView 除了能夠高效地解決數據因地域隔離導致查詢分析不方便的問題外,它還集成了 SPL 句法加工數據的能力(參看?SPL 句法【4】,當前 StoreView 僅支持 extend、project 以及 where 三種指令)。基于 SPL 豐富的函數以及算子,StoreView 可以實現諸多 logstore 本身不具備的能力,下面將從數據可見性控制、查詢式 ETL 處理以及異構數據 schema 對齊等方面展開介紹。
數據可見性控制
對于 logstore 中的數據,有時我們想控制數據行級別的可見性,比如對于運維人員,我們想讓他們只有權限看到報錯的 queries 信息(方便他們監控系統的異常情況),但無權限查看正常的 queries。對于普通 logstore 而言,目前無法做到行級別的可見性控制(當前授權僅支持以 logstore 為粒度),但采用 StoreView 后,卻非常容易實現這一點,比如我們可以創建如下圖所示的 StoreView。
上面的 StoreView 中額外定義了一個查詢過濾,它限定了返回沒有匹配 status 為 200 的數據。通過下的 SQL 結果,可以清楚地看到,從 failed_user_queries 這個 StoreView 中只能看到錯誤的 queries 統計結果,而成功 queries(status 為 200)全部被過濾掉了。
因此,如果有行級別的數據可見性管理需求,StoreView 正好可以派上用場。
查詢式 ETL 處理
有時候,logstore 中可能會包含一些敏感信息,我們并不想讓團隊中普通組員看到(但允許他們查看其他非敏感的字段信息)。比如,對于 user-queries 這個 logstore,我不想讓所有人看到 sourceIp 以及 userId 這兩個用戶敏感信息,那該怎么處理呢?
按照之前的做法,可以通過數據加工任務對原始的 logstore 數據進行脫敏后,保存到另外一個 logstore 中,然后再將這個新的 logstore 開放給普通成員。雖然這樣操作也能滿足需求,但這不僅操作復雜,而且會增加額外的存儲成本。基于 StoreView 的 SPL 能力,很容易滿足這個需求,我們可以創建如下一個 StoreView。
通過下面的執行結果可以看到,無論是查詢還是 SQL 分析,都看不到 sourceIp 和 userId 的原始內容。
可以看到,通過 StoreView 集成的 SPL 能力,可以非常便捷地對原始數據進行各種加工處理。相對于傳統的 ETL 加工任務,StoreView SPL 定義更新更為靈活,修改后立刻對查詢分析可見,而加工任務更新后,僅僅會作用于新寫入源 logstore 中的數據。
異構數據 schema 對齊
在 SQL 場景下,StoreView 這個虛擬表支持的字段是所有底層 logstore 開啟了統計分析字段的超集。對于多個 logstore 中同名但類型不同的分析字段,會歸一化到 varchar 類型。但對于名稱不同、含義相同的字段,怎么進行統一分析呢?比如,下面的場景中,統計每個 project 下 query 的平均延遲,結果發現 sls-cn-guangzhou-queries 對應的結果為 null,這是為什么呢?
經過分析發現,原來 sls-cn-guangzhou-queries 中的 query 數據并不包含?latencyMs?這個字段,它的數據中對應的字段名稱實際上為?latency。針對這種情況,我們仍然可以通過 SPL 的?extend 算子解決這種問題,即為 latency 字段增加一個 alias 字段(當前 SPL 會默認將所有字段作為 varchar 處理,下面 SPL 中進行了類型轉換)。
經過上面的操作后,SQL 的執行結果就符合預期了,具體如下所示。
StoreView meta 字段
StoreView SQL 提供了 project 以及 logstore 兩個 meta 字段,它們分別表示數據原始所對應的 project 以及 logstore 名稱。用戶可以基于這兩個 meta 字段來識別 StoreView 中結果的來源。比如,我們可以通過以下 SQL 來對比分析每個 project 下一天的處理數據量。
結語
通過上面的實例分析可以看到,SLS StoreView 功能為用戶提供了極為便捷的跨 project 查詢和分析能力,用戶不再需要通過創建加工任務來匯聚數據,節省了用戶的使用成本。當前,控制臺直接 SQL 分析以及大盤展示已經支持 StoreView(告警目前還不支持,后續也會考慮放開)。當然,因為跨 project 進行查詢和分析,會涉及到跨域讀取數據,整個處理鏈路受網絡影響可能較大。后期我們會不斷完善 StoreView 的易用性、穩定性和性能,讓用戶基于 StoreView 就能輕松愉悅地查詢分析全地域的數據,真正做到數據分析不受地域邊界的限制。
【1】多地域支持
https://help.aliyun.com/zh/sls/product-overview/supported-regions
【2】數據加工概述
https://help.aliyun.com/zh/sls/user-guide/data-processing-new-edition-overview?spm=a2c4g.11186623.help-menu-28958.d_2_6_0_0.6f4067a2X0smir
【3】數據集(StoreView)概述
https://help.aliyun.com/zh/sls/user-guide/dataset-storeview-overview?spm=a2c4g.11186623.help-menu-28958.d_2_4_0.25fa2a1cwcy7dW
【4】SPL 句法
https://help.aliyun.com/zh/sls/user-guide/spl-overview/?spm=a2c4g.11186623.help-menu-28958.d_2_13.6778a945BHmS0U&scm=20140722.H_2536529._.OR_help-T_cn~zh-V_1
點擊此處,體驗日志服務 SLS StoreView 功能