全部產品
Search
文件中心

Simple Log Service:查詢文法與功能

更新時間:Jan 06, 2026

Simple Log Service支援使用查詢語句對日誌進行篩選。篩選結果可獨立使用,也可以用於分析語句,進行更複雜的分析處理。

前提條件

對日誌進行查詢,必須先建立索引

基礎文法

查詢語句與分析語句以|分割,格式為查詢語句|分析語句,樣本如下:

* | SELECT status, count(*) AS PV GROUP BY status

語句類型

說明

查詢語句

查詢條件,可以為關鍵詞、數值、數值範圍、空格、星號(*)等。

如果為空白格或星號(*),表示無過濾條件。

重要

查詢語句中建議不超過30個條件。

分析語句

重要

必須與查詢語句一起使用,分析語句中無需填寫FROM子句和WHERE子句,預設分析當前LogStore中的資料。分析語句不支援offset,不區分大小寫,末尾無需加分號。

對查詢結果或全量資料進行計算和統計。Log Service支援的分析函數和文法:

查詢語句編寫思路

image

查詢語句的編寫流程可分為以下三步:

步驟一:確定查詢方式

重要

不同的索引配置,會產生不同的查詢和分析結果,如果同時建立了全文索引和欄位索引,以欄位索引的配置為準。

根據索引類型的不同,Simple Log ServiceLogStore查詢可分為全文檢索查詢和欄位查詢。全文檢索查詢和欄位查詢區別如下:

  • 如果只建立全文索引,則只能使用全文檢索查詢。

  • 如果已建立欄位索引,則按以下規則查詢:

    • doublelong類型:只能根據欄位查詢文法進行查詢。

    • text類型:若知曉關鍵詞屬於某個已建立索引的text類型欄位,建議使用欄位查詢文法。如果不確定關鍵詞的具體欄位,請使用全文檢索查詢文法。

      • 如果沒有建立全文索引,全文檢索查詢文法僅在欄位索引是text類型的欄位中查詢。

      • 如果已建立全文索引,全文檢索查詢文法會從所有text類型索引中查詢。

全文檢索查詢

不針對具體的欄位進行查詢,支援萬用字元(*?)和邏輯運算子(如and、or等)。

查詢文法
 keywords1  [ and | or | not ] keywords2  ...

樣本

  • 樣本1

    查詢關鍵詞為GET相關的日誌。則查詢文法:GET

  • 樣本2

    查詢關鍵詞為GETPOST相關的日誌。則查詢文法:GET or POST

  • 樣本3

    查詢以Jo開頭相關的日誌,例如Joe、Jon等。則查詢文法為:Jo?

欄位查詢

針對具體欄位名,支援類型化運算(如數值比較、Regex),需欄位已建立索引。

重要
  • indexname1 是需要查詢的欄位名,當欄位名、表名等專有名詞中存在特殊字元(空格、中文等)、文法關鍵詞(andor等)等內容時,則需要使用""(雙引號)包裹。在查詢中使用引號,請參見如何在查詢和分析語句中使用引號

  • 欄位索引涉及longdouble類型,可以使用比較子>>=<<==in

查詢文法

indexname1 [ : | > | >= | < | <= | = | in ] keyword1 [ [ and | or | not ] indexname2 ... ]

樣本

  • 樣本1

    查詢 request_methodGET 相關的日誌,則查詢文法為:request_method: GET

  • 樣本2

    查詢 request_time_msec 大於 50 相關的日誌,則查詢文法為request_time_msec>50(該欄位索引類型為double)。

  • 樣本3

    查詢 request_method GET request_time_msec 大於50 相關的日誌。則查詢文法為:request_method: GET and request_time_msec>50

步驟二:確定欄位類型

編寫查詢語句時需要考慮欄位類型的特點,合理使用運算子,快速、精準地鎖定目標日誌。

欄位類型

欄位類型

說明

可用運算子

text類型

字串類型的欄位。開啟全文索引後,Log Service預設將整條日誌(除__time__以外所有欄位)設定為text類型。

andornot():""\*?

long和double類型

只有設定欄位的資料類型為longdouble後,才能通過數值範圍查詢該欄位的值。

  • 如果欄位的資料類型不被設定為doublelong或者查詢時數值範圍的語法錯誤,那麼Log Service會按照全文檢索查詢方式進行查詢,這樣查詢到的結果可能與期望的結果不同。

    例如欄位owner_id不是doublelong類型,則執行查詢語句owner_id>100時,會返回同時包含owner_id>(非分詞符)、100這三個詞的日誌。

  • 如果將欄位的類型從text類型改成doublelong類型,則只支援等號=查詢。如果需要使用範圍查詢、大於符號(>)、小於符號(<)等運算子,必須重建索引

andornot()>>=<<==in

JSON類型

針對JSON對象中的欄位,可根據其值,將資料類型設定為longdoubletext,並開啟統計功能。

根據JSON對象中的欄位的類型使用不同的運算子。

運算子

重要
  • in運算子只能小寫,其他運算子不區分大小寫。

  • Log Service保留以下運算子的使用權,如果您需要使用以下運算子作為查詢關鍵字,請使用""(雙引號)包裹:sortascdescgroup byavgsumminmaxlimit

  • 運算子的優先順序由高到低排序如下所示:

    1. 冒號(:)

    2. 雙引號("")

    3. 圓括弧()

    4. and、not

    5. or

運算子

說明

:

用於欄位查詢(Key:Value),例如request_method:GET

如果欄位名稱或者欄位值內有空格、冒號(:)、連字號(-)等特殊字元,請使用雙引號("")包裹欄位名稱或者欄位值,例如"file info":apsara

and

and運算子。例如request_method:GET and status:200

如果多個關鍵詞之間沒有文法關鍵詞,預設為and關係,例如GET 200 cn-shanghai等同於GET and 200 and cn-shanghai

or

or運算子。例如request_method:GET or status:200

not

not運算子。例如request_method:GET not status:200not status:200

( )

用於提高括弧內查詢條件的優先順序。例如(request_method:GET or request_method:POST) and status:200

""

使用""(雙引號)包裹一個文法關鍵詞,可以將該文法關鍵詞轉換成一般字元。在欄位查詢中""內的所有詞被當成一個整體。

  • 當欄位名或欄位值中存在特殊字元(空格、中文、:-等)、文法關鍵詞(andor等)等內容時,需要使用""包裹。例如"and"表示查詢包含and的日誌,此處的and不代表運算子。

  • Log Service保留以下運算子的使用權,如果需要使用以下運算子作為查詢關鍵字,請使用""包裹:sortascdescgroup byavgsumminmaxlimit

  • 通過資料加工或者Logtail外掛程式處理的日誌,其tag中的key會被轉換成普通key,即查詢時需使用""包裹欄位名,例如"__tag__:__client_ip__":192.0.2.1,此處的__tag__:__client_ip__為Log Service保留欄位,表示日誌所在主機的IP地址。更多資訊,請參見保留欄位

\

轉義符號,用於轉義""(雙引號),轉義後的雙引號表示符號本身。例如日誌內容為instance_id:nginx"01",您可以使用instance_id:nginx\"01\"進行查詢。

*

萬用字元查詢,匹配零個、單個、多個字元。例如host:www*com

說明

Log Service會在所有日誌中為您查詢到合格100個詞,返回包含這100個詞並滿足查詢條件的所有日誌。

?

萬用字元查詢,匹配單個字元。例如host:aliyund?c

>

查詢某欄位值大於某數值的日誌。例如request_time>100

>=

查詢某欄位值大於或等於某數值的日誌。例如request_time>=100

<

查詢某欄位值小於某數值的日誌。例如request_time<100

<=

查詢某欄位值小於或等於某數值的日誌。例如request_time<=100

=

查詢某欄位值等於某數值的日誌。針對double、long類型的欄位,=:作用相同。例如request_time=100等同於request_time:100

in

查詢某欄位值處於某數值範圍內的日誌,中括弧表示閉區間,小括弧表示開區間,兩個數字之間使用空格分隔。例如request_time in [100 200]request_time in (100 200]

重要

in只能為小寫字母。

__source__

查詢某個日誌源的日誌,支援萬用字元。例如__source__:192.0.2.*

重要

Log Service中的__source__為保留欄位,可縮寫為source。如果您自訂的欄位中存在source欄位,則會與Log Service保留欄位source衝突,此時您需要使用SourceSOURCE等詞查詢自訂的欄位。

__tag__

通過中繼資料資訊查詢日誌。例如__tag__:__receive_time__:1609837139

__topic__

查詢某日誌主題下的日誌。例如__topic__:nginx_access_log

步驟三:確定匹配模式

根據掌握的關鍵詞資訊及實際業務情境的需要靈活控制使用精準查詢還是模糊查詢。

查詢方式

說明

樣本

精確查詢

使用完整的詞進行查詢。

Log Service查詢採用的是分詞法,精確查詢時並不能完全符合關鍵詞。例如查詢語句為abc def,查詢結果將包含所有abcdef的日誌,無法完全符合目標短語。如果您要完全符合短語abc def,可以使用短語查詢或者Like文法。更多資訊,請參見短語查詢如何精準查詢日誌

  • host:example.com表示查詢host欄位值包含example.com的日誌。

  • PUT and cn-shanghai表示查詢同時包含關鍵字PUTcn-shanghai的日誌。

  • * | Select * where http_user_agent like '%like Gecko%'表示查詢http_user_agent欄位值中包含短語like Gecko的日誌。

  • #"redo_index/1"表示查詢包含短語redo_index/1的日誌。

模糊查詢

在查詢語句中指定一個64個字元以內的詞,在詞的中間或者末尾加上模糊查詢關鍵字,即星號(*)或問號(?),Log Service會在所有日誌中為您查詢到合格100個詞,返回包含這100個詞並滿足查詢條件的所有日誌。指定的詞越精確,查詢結果越精確。

重要
  • 星號(*)或問號(?)不能用在詞的開頭。

  • long資料類型和double資料類型不支援使用星號(*)或問號(?)進行模糊查詢。可以使用數值範圍進行模糊查詢,例如status in [200 299]。

模糊查詢是一種採樣查詢,查詢機制如下所示:

  • 開啟欄位索引,且指定某個欄位進行查詢時,Log Service從該欄位的索引資料中隨機採樣,返回部分結果並不是全量掃描底層資料。

  • 開啟全文索引,且沒有指定某個欄位進行查詢時,Log Service從全文索引資料中隨機採樣,返回部分結果並不是全量掃描底層資料。

  • request_time>60 and request_method:Ge*表示查詢request_time欄位值大於60request_method欄位值以Ge開頭的日誌。

  • addr*表示在所有日誌中尋找以addr開頭的100個詞,並返回包含這些詞的日誌。

  • host:www.yl*表示在所有日誌中尋找host欄位值以www.yl開頭的100個詞,並返回包含這些詞的日誌。

更多資訊,請參見如何模糊查詢日誌?

查詢語句樣本

同一條查詢語句,針對不同的日誌內容和索引配置時,會有不同的查詢結果。本文基於如下日誌範例和索引介紹查詢語句樣本。

text、double、long類型

日誌範例

本文以Nginx訪問日誌為例,介紹常見的查詢語句。

日誌範例

索引配置

在查詢日誌前,請確保已建立索引。檢查索引配置的步驟,如下所示:

  1. 在LogStore的查詢/分析頁面,選擇查詢分析屬性 > 屬性image

  2. 在開啟的查詢分析頁面,查看是否已配置欄位索引。索引

普通查詢樣本

查詢需求

查詢語句

調試

查詢GET請求成功(狀態代碼為200~299)的日誌。

request_method:GET and status in [200 299]

調試

查詢來自非杭州地區的GET請求的日誌。

request_method:GET not region:cn-hangzhou

查詢GET請求或POST請求的日誌。

request_method:GET or request_method:POST

調試

查詢非GET請求的日誌。

not request_method:GET

調試

查詢GET請求或POST請求成功的日誌。

(request_method:GET or request_method:POST) and status in [200 299]

調試

查詢GET請求或POST請求失敗的日誌。

(request_method:GET or request_method:POST) not status in [200 299]

調試

查詢GET請求成功(狀態代碼為200~299)且請求時間小於60秒的日誌。

request_method:GET and status in [200 299] not request_time>=60

調試

查詢請求時間為60秒的日誌。

request_time:60

調試

request_time=60

調試

查詢請求時間大於等於60秒,並且小於200秒的日誌。

request_time>=60 and request_time<200

調試

request_time in [60 200)

調試

查詢request_time欄位是否存在。

request_time:*

調試

查詢request_time欄位值為空白或非法數位日誌。

(request_time:"") or (not request_time > -10000000000)

調試

查詢包含request_time欄位且欄位值為數位日誌。

request_time > -1000000000

調試

查詢包含and的日誌。

"and"
說明

此處的and為一般字元串,不代表運算子。

調試

查詢request method欄位值是PUT的日誌。

"request method":PUT
重要

欄位名request method中存在空格,在查詢時需使用雙引號("")包裹。

查詢日誌主題為HTTPS或HTTP的日誌。

__topic__:HTTPS or __topic__:HTTP

查詢採集於192.0.2.1主機的日誌。

__tag__:__client_ip__:192.0.2.1

此處的__tag__:__client_ip__為Log Service保留欄位,表示日誌所在主機的IP地址。更多資訊,請參見保留欄位

重要

通過資料加工或者Logtail外掛程式處理的日誌,其tag中的key會被轉換成普通key,即查詢時需使用雙引號("")包裹欄位名,例如"__tag__:__client_ip__":192.0.2.1

查詢包含192.168.XX.XX的日誌。

* | select * from log where key like '192.168.%.%'

更多資訊,請參見通過SQL的like文法進行精確的模糊查詢

查詢remote_user欄位值不為空白的日誌。

not remote_user:""

調試

查詢remote_user欄位值為空白的日誌。

remote_user:""

調試

查詢remote_user欄位值不為null的日誌。

not remote_user:"null"

調試

查詢不存在remote_user欄位的日誌。

not remote_user:*

調試

查詢存在remote_user欄位的日誌。

remote_user:*

調試

查詢城市欄位值不為上海的日誌。

not 城市:上海
說明

當查詢中文字串時,需要在配置索引時,開啟包含中文開關。更多資訊,請參見建立索引

模糊查詢樣本

查詢需求

查詢語句

調試

查詢包含以cn開頭的詞的日誌。

cn*

調試

查詢region欄位值是以cn開頭的日誌。

region:cn*

查詢region欄位值包含cn*的日誌。

region:"cn*"
說明

此處的cn*為一個獨立詞。例如:

  • 如果日誌內容為region:cn*,en,分詞符為半形逗號(,),則該日誌內容被拆分為regioncn*en,您可以通過上述語句查詢到該日誌。

  • 如果日誌內容為region:cn*hangzhou,則cn*hangzhou為一個整體,您執行上述語句無法查詢到該日誌。

查詢包含以mozi開頭,以la結尾,中間還有一個字元的詞的日誌。

mozi?la

調試

查詢包含以mo開頭,以la結尾,中間包含零個、單個或多個字元的詞的日誌。

mo*la

調試

查詢包含以moz開頭的詞和以sa開頭的詞的日誌。

moz* and sa*

調試

查詢region欄位值以hai結尾的所有日誌。

目前使用查詢語句無法查詢到對應的日誌,您可以使用SQL分析中的Like文法進行查詢。更多資訊,請參見通過SQL的like文法進行精確的模糊查詢

*| select * from log where region like '%hai'

查詢message欄位值以"get_time: 0.開頭的所有日誌。

使用SQL分析中的like文法進行查詢。

*| select message where message like '"get_time: 0.%'

或者使用SPL中的where指令進行過濾查詢。

*| where message like '"get_time: 0.%'

基於分詞符的查詢樣本

Log Service會根據分詞符,將日誌內容拆分成多個詞。Log Service預設配置的分詞符為, '";=()[]{}?@&<>/:\n\t\r。如果設定分詞符為空白,則欄位值將被當成一個整體,您只能通過完整字串或模糊查詢尋找對應的日誌。如何設定分詞符,請參見建立索引

例如http_user_agent欄位值為Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/192.0.2.0 Safari/537.2

  • 設定分詞符為空白時,該欄位值將被當成一個整體,則使用http_user_agent:Chrome查詢語句進行查詢時,無法查詢到日誌。

  • 設定分詞符, '";=()[]{}?@&<>/:\n\t\r後,該欄位值拆分為Mozilla5.0WindowsNT6.1AppleWebKit537.2KHTMLlikeGeckoChrome192.0.2.0Safari537.2。可以使用http_user_agent:Chrome等查詢語句進行查詢。

重要

當查詢關鍵字中包含分詞符時,您可以使用短語查詢或者Like文法。例如:

  • 短語查詢:#"redo_index/1"。更多資訊,請參見短語查詢

  • Like文法:* | select * from log where key like 'redo_index/1'

查詢需求

查詢語句

調試

查詢http_user_agent欄位值中包含Chrome的日誌。

http_user_agent:Chrome

調試

查詢http_user_agent欄位值中包含LinuxChrome的日誌。

http_user_agent:Linux and http_user_agent:Chrome

調試

http_user_agent:"Linux Chrome"

調試

查詢http_user_agent欄位值中包含FirefoxChrome的日誌。

http_user_agent:Firefox or http_user_agent:Chrome

調試

查詢request_uri欄位值包含/request/path-2的日誌。

request_uri:/request/path-2

調試

查詢request_uri欄位值以/request開頭,但不包含/file-0的日誌。

request_uri:/request* not request_uri:/file-0

調試

完全符合包含短語redo_index/1的日誌。

  • #"redo_index/1"

  • * | select * from log where key like 'redo_index/1'

說明

通過短語查詢或者Like文法,可完全符合目標短語。使用普通的精確查詢,將匹配redo_index1等詞。

關鍵詞轉義樣本

  • 在查詢語句中

    使用""(雙引號)包裹一個文法關鍵詞,可以將該文法關鍵詞轉換成一般字元。在欄位查詢中""內的所有詞被當成一個整體。

    • 當欄位名或欄位值中存在特殊字元(空格、中文、:-等)、文法關鍵詞(andor等)等內容時,需要使用""包裹。例如"and"表示查詢包含and的日誌,此處的and不代表運算子。

    • Log Service保留以下運算子的使用權,如果需要使用以下運算子作為查詢關鍵字,請使用""包裹:sortascdescgroup byavgsumminmaxlimit

    • 通過資料加工或者Logtail外掛程式處理的日誌,其tag中的key會被轉換成普通key,即查詢時需使用""包裹欄位名,例如"__tag__:__client_ip__":192.0.2.1,此處的__tag__:__client_ip__為Log Service保留欄位,表示日誌所在主機的IP地址。更多資訊,請參見保留欄位

    查詢需求

    查詢語句

    查詢request method欄位值為PUT的日誌。欄位名request method中存在空格,需使用雙引號("")包裹。

    "request method":PUT

    查詢system error description欄位值中包含DB的日誌。欄位名system error description中存在空格。

    "system error description":DB*

    查詢region欄位值包含cn*的日誌。這裡的cn*為一個字串。如果日誌內容為region:cn*,en,分詞符為半形逗號(,),則該日誌內容被拆分為regioncn*en,可通過右側語句查詢到該日誌。

    region:"cn*"

    查詢remote_user欄位值為空白的日誌。

    remote_user:""

    查詢Authorization欄位值為Bearer 12345的日誌。欄位值Bearer 12345中存在空格。

    "Authorization": "Bearer 12345"

    分析errorContent欄位值包含The body is not valid json string的日誌。欄位值中存在空格。

    * | select * where errorContent like '%The body is not valid json string%'

    查詢採集於192.0.2.1主機的日誌。

    "__tag__:__client_ip__":192.0.2.1
  • 在分析語句中

    • 當欄位名、表名等專有名詞中存在特殊字元(空格、中文、:-等)、文法關鍵詞(andor等)等內容時,需要使用""包裹。

    • 表示字串的字元必須使用''(單引號)包裹。無符號包裹或被""(雙引號)包裹的字元表示欄位名或列名。例如:'status'表示字串status,status"status"表示日誌欄位status。

    查詢需求

    查詢語句

    查詢包含192.168.XX.XX的日誌。

    * | select * from log where key like '192.168.%.%'

    計算請求時間長度的前10名。

    列名top 10中存在空格,需使用雙引號("")包裹。

    * | SELECT max(request_time,10) AS "top 10"

    統計不同請求狀態對應的日誌數量。

    此處content欄位的索引為JSON類型。更多資訊,請參見如何查詢和分析有索引的JSON欄位

    * | SELECT "content.status", COUNT(*) AS PV GROUP BY "content.status"

json類型

日誌範例

{
  "timestamp": "2025-03-21T14:35:18Z",
  "level": "ERROR",
  "service": {
    "name": "payment-processor",
    "version": "v2.8.1",
    "environment": "production"
  },
  "error": {
    "code": 5031,
    "message": "Failed to connect to third-party API",
    "details": {
      "endpoint": "https://api.paymentgateway.com/v3/verify",
      "attempts": 3,
      "last_response": {
        "status_code": 504,
        "headers": {
          "Content-Type": "application/json",
          "X-RateLimit-Limit": "100"
        }
      }
    }
  },
  "user": {
    "id": "usr-9a2b3c4d",
    "session": {
      "id": "sess-zxy987",
      "device": {
        "type": "mobile",
        "os": "Android 14",
        "network": "4G"
      }
    }
  },
  "trace": {
    "correlation_id": "corr-6f5e4d3c",
    "span_id": "span-00a1b2"
  }
}

索引配置

在查詢日誌前,請確保已建立索引。檢查索引配置的步驟,如下所示:

  1. 在LogStore的查詢/分析頁面,選擇查詢分析屬性 > 屬性image

  2. 在開啟的查詢分析頁面,查看是否已配置欄位索引。

    image

樣本

查詢需求

查詢語句

查詢請求錯誤的日誌。

level:error

查詢使用者ID為usr-9a2b3c4d的所有請求。

user.id:usr-9a2b3c4d

查詢使用者ID為usr-9a2b3c4d,並且查看錯誤狀態。

user.id:usr-9a2b3c4d and error.details.last_response.status_code :504

常見問題

無法找到想要的日誌

查詢不到日誌的排查思路

JSON日誌問題

查詢和分析JSON日誌的常見問題

查詢錯誤排查

相關文檔