日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

查詢語法與功能

更新時間: 2024-12-10 13:28:13

日志服務Project支持使用查詢語句對存儲在Logstore中的日志進行篩選。篩選結果可獨立使用,也可以用于分析語句,進行更復雜的分析處理。本文介紹查詢語句的語法結構,以及應用場景和具體示例。

基礎語法

查詢語句和分析語句以|分割。其格式為:

查詢語句|分析語句

查詢語句可單獨使用,分析語句必須與查詢語句一起使用。即分析功能是基于查詢結果或全量數據進行的。

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

  • 分析語句中無需填寫FROM子句和WHERE子句,默認分析當前Logstore中的數據。分析語句不支持使用offset,不區分大小寫,末尾無需加分號。

語句類型

說明

查詢語句

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

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

分析語句

對查詢結果或全量數據進行計算和統計。日志服務支持的分析函數和語法,請參見:

查詢和分析語句示例:

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

本文中涉及的查詢示例的原始日志請參見調試

查詢語句編寫思路

image

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

步驟一:確定查詢方式

重要
  • 如需對Logstore中的日志進行查詢,則必須首先創建索引。如需要對某個字段進行分析(SELECT語句),則必須創建字段索引。創建字段索引和全文索引的步驟,請參見字段索引

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

根據索引類型的不同,日志服務Project查詢可分為全文查詢和字段查詢。全文查詢和字段查詢區別如下:

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

  • 如果已創建字段索引,則按以下規則查詢:

    • doublelong類型:只能根據字段查詢語法進行查詢。

    • text類型:如您知曉關鍵詞屬于某個已創建索引的text類型字段,建議使用字段查詢語法。如果不確定關鍵詞的具體字段,請使用全文查詢語法。

      • 如果沒有創建全文索引,全文查詢語法僅在字段索引是text類型的字段中查詢。

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

全文查詢

全文查詢不針對具體的字段進行查詢,其查詢語法為: keywords1 [ [ and | or | not ] keywords2 ] ...

keywords1 是需要查詢的關鍵詞,可以使用 *進行模糊匹配,也可以結合運算符如 andor 等聯合其他查詢條件一起查詢。

  • 示例1

    如果您希望查詢關鍵詞為GET相關的日志。則查詢語法:GET

  • 示例2

    如果您查詢關鍵詞為GETPOST相關的日志。則查詢語法:GET or POST

字段查詢

字段查詢對應的字段類型包含textlongdoublejson,且針對具體的字段進行查詢,其查詢語法為:

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

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

  • 字段索引涉及longdouble類型,可以使用比較運算符>>=<<==in

  • 示例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類型

字符串類型的字段。開啟全文索引后,日志服務默認將整條日志(除__time__以外所有字段)設置為text類型。

andornot():""\*?

long和double類型

只有設置字段的數據類型為longdouble后,才能通過數值范圍查詢該字段的值。

  • 如果字段的數據類型不被設置為doublelong或者查詢時數值范圍的語法錯誤,那么日志服務會按照全文查詢方式進行查詢,這樣查詢到的結果可能與您期望的結果不同。

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

  • 如果將字段的類型從text類型改成doublelong類型,則只支持等號=查詢。如果需要使用范圍查詢、大于號(>)、小于號(<)等運算符,必須重建索引

andornot()>>=<<==in

JSON類型

針對JSON對象中的字段,您可根據其值,將數據類型設置為longdoubletext,并開啟統計功能。

根據JSON對象中的字段的類型使用不同的運算符。

運算符

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

  • 日志服務保留以下運算符的使用權,如果您需要使用以下運算符作為查詢關鍵字,請使用""(雙引號)包裹: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不代表運算符。

  • 日志服務保留以下運算符的使用權,如果您需要使用以下運算符作為查詢關鍵字,請使用""包裹:sortascdescgroup byavgsumminmaxlimit

  • 通過數據加工或者Logtail插件處理的日志,其tag中的key會被轉換成普通key,即查詢時需使用""包裹字段名,例如"__tag__:__client_ip__":192.0.2.1,此處的__tag__:__client_ip__為日志服務保留字段,表示日志所在主機的IP地址。更多信息,請參見保留字段

\

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

*

通配符查詢,匹配零個、單個、多個字符。例如host:www*com

說明

日志服務會在所有日志中為您查詢到符合條件的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.*

重要

日志服務中的__source__為保留字段,可縮寫為source。如果您自定義的字段中存在source字段,則會與日志服務保留字段source沖突,此時您需要使用SourceSOURCE等詞查詢自定義的字段。

__tag__

通過元數據信息查詢日志。例如__tag__:__receive_time__:1609837139

__topic__

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

步驟三:確定匹配模式

您可根據掌握的關鍵詞信息及實際業務場景的需要靈活控制使用精準查詢還是模糊查詢。若無法找到想要的日志,可參見文檔進行排查:查詢不到日志的排查思路

查詢方式

說明

示例

精確查詢

使用完整的詞進行查詢。

日志服務查詢采用的是分詞法,精確查詢時并不能完全匹配關鍵詞。例如查詢語句為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個字符以內的詞,在詞的中間或者末尾加上模糊查詢關鍵字,即星號(*)或問號(?),日志服務會在所有日志中為您查詢到符合條件的100個詞,返回包含這100個詞并滿足查詢條件的所有日志。指定的詞越精確,查詢結果越精確。

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

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

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

  • 當您開啟字段索引,且指定某個字段進行查詢時,日志服務從該字段的索引數據中隨機采樣,返回部分結果并不是全量掃描底層數據。

  • 當您開啟全文索引,且沒有指定某個字段進行查詢時,日志服務從全文索引數據中隨機采樣,返回部分結果并不是全量掃描底層數據。

  • request_time>60 and request_method:Ge*表示查詢request_time字段值大于60request_method字段值以Ge開頭的日志。

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

  • host:www.yl*表示在所有日志中查找host字段值以www.yl開頭的100個詞,并返回包含這些詞的日志。

更多信息,請參見如何模糊查詢日志?

查詢語句示例

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

日志樣例

本文以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:* not request_time > -10000000000
說明

request_time:*用于判斷request_time字段是否存在。此處的星號(*)不代表模糊查詢。

調試

查詢包含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__為日志服務保留字段,表示日志所在主機的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'

  • 基于分詞符的查詢

    日志服務會根據分詞符,將日志內容拆分成多個詞。日志服務默認配置的分詞符為, '";=()[]{}?@&<>/:\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不代表運算符。

    • 日志服務保留以下運算符的使用權,如果您需要使用以下運算符作為查詢關鍵字,請使用""包裹:sortascdescgroup byavgsumminmaxlimit

    • 通過數據加工或者Logtail插件處理的日志,其tag中的key會被轉換成普通key,即查詢時需使用""包裹字段名,例如"__tag__:__client_ip__":192.0.2.1,此處的__tag__:__client_ip__為日志服務保留字段,表示日志所在主機的IP地址。更多信息,請參見保留字段

    查詢需求

    查詢語句

    查詢request method字段值中包含PUT的日志。字段名request method中存在空格。

    "request method":PUT

    查詢采集于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.%.%'

    在查詢中使用引號,如何在查詢和分析語句中使用引號?

相關文檔

上一篇: 開啟SQL獨享版 下一篇: 短語查詢
阿里云首頁 日志服務 相關技術圈