全部產品
Search
文件中心

Simple Log Service:掃描(Scan)查詢文法

更新時間:Mar 06, 2025

Log Service掃描(Scan)查詢功能支援免配置索引進行目標欄位的掃描,用於查詢相關日誌,並且支援通過SPL語句對查詢結果進行進一步的過濾、轉換、解析等操作。本文介紹掃描查詢基本文法。

工作流程

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

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

    重要

    第一級管道的查詢語句依賴於索引查詢,無需索引過濾時可以寫 *。例如執行status:200 | WHERE userId = '123' | extend host=upper(hostname)語句前,您需為status欄位建立索引,但無需為userId欄位和hostname欄位建立索引。

  2. 上述索引查詢結果的日誌,經過SPL語句處理(過濾、轉換、解析等操作),處理後的結果作為最終的查詢結果。

基本文法

掃描查詢模式支援SPL(SLS Processing Language),更多資訊請參見SPL文法。對於讀取出的未經處理資料,可以通過SPL語句做結構化資訊提取、欄位操作、資料過濾等操作,並支援多級管道級聯,第一級管道是索引過濾條件,後面的多級管道是SPL指令,最終輸出經過SPL處理後的結果資料。

索引查詢語句 | <spl-cmd> ... | <spl-cmd> ...

日誌範例

  • 原始欄位:標識 [R],適用於掃描搜尋。

  • 索引欄位:標識 [I],適用於索引搜尋。

[I] __topic__: nginx-access-log
[I] Status: 200
[I] Host: api.abc.com
[R] Method: PUT
[R] ClientIp: 192.168.1.1
[R] Payload: {"Item": "1122", "UserId": "112233", "Operation": "AddCart"}
[R] BeginTime: 1705029260
[R] EndTime: 1705028561
[R] RT: 87
[R] Uri: /request/path-3/file-1
[R] UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

樣本

說明
  1. SPL語句中的常量字串使用單引號(')包裹,比如 * | where ClientIp = '192.168.1.1'

  2. 如果欄位名稱中有特殊符號,對欄位名稱使用雙引號(")包裹,比如 * | project-away "user-agent"

按照不同條件進行過濾

  • 等值比較。

    Status: 200 | where ClientIp = '192.168.1.1'
  • 大小寫不敏感搜尋。

    __topic__: nginx-access-log | where lower(Method) != 'put'
  • 模糊比對。

    Status: 200 | where UserAgent like '%Macintosh%'
  • 數值比較。

    注意欄位類型預設是varchar,進行數值比較時要先將類型轉換成bigint。

    Status: 200 |  where cast(RT as bigint) > 50
  • 正則匹配。

    # 找出包含"path-數字"的Uri
    Status: 200 | where regexp_like(Uri, 'path-\d+')

計算出新的欄位

通過extend指令,可以從已有的欄位資訊中,計算出新的欄位。

  • 從正則提取欄位。

    # 提取出Uri欄位裡的檔案名稱編號
    * not Status: 200 | extend fileNumber=regexp_extract(Uri, 'file-(\d+)', 1)
  • 從JSON提取欄位。

    Status:200 | extend Item = json_extract_scalar(Payload, '$.Item')
  • 按照分隔字元提取。

    Status:200 | extend urlParam=split_part(Uri, '/', 3)
  • 根據多個欄位值計算出新的欄位。

    #根據BeginTime和EndTime計算出時間差
    Status:200 | extend timeRange = cast(BeginTime as bigint) - cast(EndTime as bigint)

保留、移除、重新命名欄位

  • 僅保留某些欄位(移除所有其他欄位)。

    Status:200 | project Status, Uri
  • 移除某些欄位(其它欄位保留)。

    Status:200 | project-away UserAgent
  • 重新命名欄位。

    Status:200 | project-rename Latency=RT

展開非結構化資料

  • 展開JSON中的所有欄位。

    #過濾Payload非空的,並且將所有的json欄位展開
    __topic__: nginx-access-log | where Payload is not null | parse-json Payload
  • 將JSON欄位展開,丟棄原有的JSON欄位。

    status:200 
    | parse-json body 
    | project-away body
  • 正則提取出多個欄位。

    Status:200 | parse-regexp Uri, 'path-(\d+)/file-(\d+)' as pathIndex, fileIndex

多級管道級聯

以上樣本中所有操作,都可以在同一個查詢語句中,通過多級管道級聯,執行順序是從前往後依次執行。

Status:200 
| where Payload is not null 
| parse-json Payload 
| project-away Payload 
| where Host='api.qzzw.com' and cast(RT as bigint) > 80 
| extend timeRange=cast(BeginTime as bigint) - cast(EndTime as bigint)
| where timeRange > 500
| project UserId, Uri

使用限制

  1. 掃描模式下執行SPL,運行時相關限制,請參見使用限制

  2. 不支援隨機翻頁。

索引查詢與掃描查詢對比

對比項

索引查詢

掃描查詢

文法

查詢語句

更多資訊,請參見查詢文法與功能

查詢語句 | SPL指令1 | SPL指令2 | ...

更多資訊,請參見SPL文法

是否需要配置索引

需要。

不需要。

重要

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

是否支援搭配分析語句

支援。

支援。

是否支援隨機翻頁

支援。

不支援。

只能連續翻頁(前翻或後翻)。

日誌長條圖

基於查詢語句的查詢結果進行展示。

基於查詢語句的查詢結果、掃描進度進行展示。

運算子與函數

支援邏輯、數學運算;支援模糊查詢;不支援SQL函數。

參考SPL指令SPL支援的SQL函數列表

欄位類型

由索引配置中的資料類型決定。更多資訊,請參見資料類型

無論欄位是否已配置索引,在掃描模式下 SP語句中出現的欄位均按照text類型處理。詳情請參考資料類型轉換

結果集大小

通過控制台或SDK指定,最大100條。

滿足下述任一條件,本次掃描結束並返回掃描結果。

  • 達到您所指定的結果條數。

    您可以控制台或SDK指定返回的結果條數。

  • 掃描超過了單次系統設定的最大條數(基於查詢語句的結果集,預設10萬條。)

  • 掃描執行時間超過45秒。

費用

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

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