全部產品
Search
文件中心

Simple Log Service:掃描(Scan)分析概述

更新時間:Jun 30, 2024

Log Service掃描分析功能支援免配置索引進行目標欄位的掃描,用於分析相關日誌。本文介紹掃描分析功能的相關資訊。

背景資訊

Log Service基於索引技術,提供快速查詢和分析日誌功能,但在某些情境下可能會遇到如下限制,無法建立或使用索引。

  • 為降低使用費用,而未對某些欄位建立索引,但臨時急需查詢歷史日誌。

  • 欄位值長度超過了索引限制,超出部分無法被查詢。

  • 欄位名較多,事先無法擷取具體的欄位名,無法建立欄位索引。

  • 欄位類型發生變化,無法查詢。

針對上述問題,Log Service推出掃描查詢和掃描分析功能,用於查詢和分析日誌,無需對掃描的目標欄位建立索引。關於掃描查詢的更多資訊,請參見掃描(Scan)查詢概述

基本文法

  • 基本文法

    在標準SQL前面,加上set session mode=scan; 表示使用掃描模式。

    查詢語句 | set session mode=scan;分析語句(標準SQL)
  • 使用樣本

    * and status:200 | set session mode=scan;SELECT api, count(*) AS PV GROUP BY api

工作流程

Log Service接收到掃描請求後,執行流程主要分為如下兩步。

  1. 先執行對應的查詢語句進行日誌查詢。

    重要

    查詢語句仍依賴於索引。例如執行status:200 | set session mode=scan;SELECT api, count(*) AS PV GROUP BY api語句前,您需為status欄位建立索引,但無需為api欄位建立索引。

  2. 根據SQL語句中的欄位,掃描上述查詢結果,提取這些欄位對應的資料。

  3. 執行SQL語句,對上述提取到的欄位資料進行彙總分析,並返回最終的分析結果。

掃描分析與索引分析的對比

對比項

索引分析

掃描分析

文法

查詢語句 | 分析語句(標準SQL)

查詢語句 | set session mode=scan; 分析語句(標準SQL)

是否需要配置索引

需要配置欄位索引,並開啟統計功能。

不需要。

重要

豎線(|)前的查詢語句仍依賴於索引。

SQL文法

支援豐富的SQL文法和SQL函數。更多資訊,請參見函數概覽

支援索引模式下的全部的SQL文法和SQL函數。部分情境下存在一定的使用限制,請參見使用限制

分析能力

支援億層級的資料量。更多資訊,請參見分析概述

開啟SQL獨享版可以獲得更強的分析能力。

相對較弱,適用於百萬層級的資料量。

針對資料量大的情境,推薦結合查詢語句(需要建立索引),先過濾日誌。

是否收費

索引流量和索引儲存費用。更多資訊,請參見按使用功能計費模式計費項目

掃描部分按照流量收費,即基於索引查詢後掃描命中的資料量收費。

使用限制

  • 掃描分析模式下,所有欄位均被視為varchar類型。

    如果需要其他類型,請使用cast函數進行轉換。具體操作,請參見cast函數

    例如計算每個介面的平均延時,其中avg函數需要數實值型別,即需要先使用cast函數將latency欄位的類型轉換為bigint類型。

    status:200 | set session mode=scan;SELECT avg(cast(latency AS bigint)) AS '平均延時', api GROUP BY api
  • 掃描分析模式下,Log Service通過掃描方式提取SQL語句中所有欄位對應的日誌,已有的欄位索引不生效。

    例如已為status欄位建立long類型的欄位索引,如果在掃描模式下使用如下語句,則status欄位的索引不生效。

    * | set session mode=scan;SELECT count(1) AS pv, api WHERE cast(status AS bigint) = 200 GROUP BY api

    在此情境下,建議使用如下語句。

    說明

    對於有索引的欄位,建議放到豎線(|)前面,作為過濾條件。

    status:200 | set session mode=scan;SELECT count(1) as pv, api GROUP BY api
  • 掃描分析模式下,分析的資料量有限。限制單Shard只支援分析50萬條日誌,限制掃描總行數為1000萬條日誌(如果有查詢語句,是指過濾後的日誌條數),超出該限制後,返回部分日誌的計算結果,並提示結果不精確。

    您可以通過如下方法,盡量避免查詢結果不精確。

    • 針對大規模結構化資料,建議使用索引分析模式(建立欄位索引,並開啟統計)。

    • 建議使用查詢語句(建立索引)進行預過濾,減少需要掃描的資料量。

    • 建議縮小時間範圍,減少需要掃描的資料量。

  • 掃描分析模式下,不支援*|select *語句。

  • 掃描分析模式下,對多個Logstore進行JOIN分析時,需在欄位名前面加上Logstore名稱,格式為LogstoreName.key