日志服务提供一套查询语法用于设置查询条件,帮助您更有效地查询日志。

查询方式

开启并配置索引后,在日志查询界面输入查询语句即可查询日志。

查询语句用来指定日志查询时的过滤规则,返回符合条件的日志,支持全文查询和字段查询。
  • 全文查询

    全文查询时,将整条日志作为一个特殊的Key-Value对,Value为全部的日志内容。全文查询表示在日志内容中查询关键字,即指定查询条件为包含或不包含某个关键字,满足查询条件的日志会作为结果返回。

    全文查询可以分为普通全文查询、短语查询、模糊查询。
    • 普通全文查询:指定关键字和规则,包含该关键字并符合规则的日志作为结果返回。

      例如a and b表示查询同时包含关键字ab的日志。

    • 短语查询:如果需要查询的短语中包含空格,可以将短语用双引号("")包裹,表示将双引号中的内容作为多个关键字查询。

      例如msg:"http error"表示查询msg字段中包含关键字httperror的日志,等价于msg:http and msg:error

    • 模糊查询:在查询语句中指定一个64个字符以内的词,在词的中间或者末尾加上模糊查询关键字,即星号(*)和问号(?),日志服务会在所有日志中为您查询到符合条件的100个词,返回包含这100个词并满足查询条件的所有日志。例如addr?表示在所有日志中查找以addr开头的100个词,并返回包含这些词的日志,具体示例请参见模糊查询
      模糊查询是一种采样查询,查询机制如下所示:
      • 当您开启字段索引,且指定某个字段进行查询时,日志服务从该字段的索引数据中随机采样,返回部分结果并不是全量扫描底层数据。
      • 当您开启全文索引,且没有指定某个字段进行查询时,日志服务从全文索引数据中随机采样,返回部分结果并不是全量扫描底层数据。
      说明
      模糊查询使用限制如下所示。
      • 查询时必须指定前缀,即星号(*)和问号(?)不能出现在词的开头。
      • 指定的词越精确,查询结果越精确。
      • 查询的词超过64个字符,无法使用模糊查询。
      • 模糊查询最多返回100条符合查询条件的日志。
  • 字段查询

    配置字段索引之后,可以指定字段名称和字段内容进行查询。对于double和long类型的字段,可以指定数值范围进行查询。例如查询语句为Latency>5000 and Method:Get* and not Status:200,表示查询Latency字段值大于5000、Method字段值以Get开头,且Status字段值不是200的日志。

    根据字段索引中设置的数据类型,您可以进行多种类型的基础查询和组合查询。字段查询示例请参见索引数据类型简介

注意事项

  • 同时使用全文索引和字段索引时,如果在配置索引时两者的分词符不同,以字段索引为准。
  • 只有将某些字段的数据类型设置为double或long后,才能通过数值范围查询这些字段的日志。如果字段设置的数据类型不是double或long,或者查询数值范围的语法错误,那么日志服务会将该查询条件解释成全文索引,这样查询到的结果可能与您期望的结果不同。
  • 如果将某字段的类型由文本类型改成数值类型,则修改索引之前采集到的日志只支持等号(=)查询。

运算符

查询语句支持如下运算符。
运算符 说明
and 双目运算符。格式为query1 and query2,表示query1query2查询结果的交集。如果多个单词间没有语法关键词,默认是and的关系。
or 双目运算符。格式为query1 or query2,表示query1query2查询结果的并集。
not 双目运算符。格式为query1 not query2 ,表示符合query1并且不符合query2的结果,相当于query1–query2。如果只有not query1,那么表示从全部日志中选取不包含query1的结果。
说明 最多过滤100条索引对应的日志。
( , ) 括号用于把一个或多个子查询合并成一个查询条件,用于提高括号内查询条件的优先级。
: 用于Key-Value对的查询。term1:term2构成一个Key-Value对。如果Key或者Value内有空格、冒号(:)等保留字符,需要用双引号("")把整个Key或者Value包裹起来。
把一个关键词转换成普通的查询字符。左右引号内部的任何一个term都会被查询,而不会当成语法关键词。或者在Key-Value查询中把左右引号内的所有term当成一个整体。
\ 转义符。用于转义引号("),转义后的引号表示符号本身,不会当成转义字符,例如"\""
| 管道运算符,表示在前一个计算的基础上进行更多计算,例如query1 | select count(1)
* 模糊查询关键字,用于替代0个或多个字符,例如:que*,会返回que开头的所有命中词。
说明 模糊查询最多返回100个符合关键词的日志。
? 模糊查询关键字,用于替代一个字符,例如qu?ry,会返回以qu开头,以ry结尾,并且中间还有一个字符的所有命中的词。
__topic__ 查询某日志主题(topic)下日志,可以查询0个或多个topic的日志,例如__topic__:mytopicname
__tag__ 查询某个tag key下某个tag value,例如__tag__:tagkey:tagvalue
source 查询某个IP的日志,例如source:127.0.0.1
> 查询某个字段下大于某个数值的日志,例如latency > 100
>= 查询某个字段下大于或等于某个数值的日志,例如latency >= 100
< 查询某个字段下小于某个数值的日志,例如latency < 100
<= 查询某个字段下小于或等于某个数值的日志,例如latency <= 100
= 查询某个字段下等于某个数值的日志,例如latency = 100
in 查询某个字段处于某个范围内的日志,使用中括号表示闭区间,使用小括号表示开区间,括号中间使用两个数字,数字中间为若干个空格。仅支持小写字符in。例如latency in [100 200]latency in (100 200]
说明
  • 除in运算符外的其他运算符不区分大小写。
  • 运算符的优先级由高到低排序为:"( )andnotor
  • 日志服务保留以下运算符的使用权,如果您需要使用以下运算符作为查询关键字,请使用双引号包裹起来:sortascdescgroup byavgsumminmaxlimit

查询语句示例

查询需求 查询语句
同时包含a和b的日志 a and b或者a b
包含a或者包含b的日志 a or b
包含a但是不包含b的日志 a not b
所有日志中不包含a的日志 not a
查询包含a而且包含b,但是不包括c的日志 a and b not c
包含a或者包含b,而且一定包含c的日志 (a or b ) and c
包含a或者包含b,但不包括c的日志 (a or b ) not c
包含a而且包含b,可能包含c的日志 a and b or c
FILE 字段包含apsara的日志 FILE:apsara
FILE字段包含apsara和shennong的日志 FILE:"apsara shennong"FILE:apsara and FILE:shennong
包含and日志 and"
FILE字段包含apsara或者shennong的日志 FILE:apsara or FILE:shennong
file info字段包含apsara的日志 "file info":apsara
包括引号的日志 \"
查询以shen开头的所有日志 shen*
查询FILE字段下,以shen开头的所有日志 FILE:shen*
查询FILE字段下,以shen结尾的所有日志 暂不支持
查询FILE字段下,值为shen*的所有日志 FILE: "shen*"
查询以shen开头,以ong结尾,中间还有一个字符的日志 shen?ong
查询以shen开头,以ong结尾,中间包含多个字符的日志 shen*ong
查询包括以shen开头,并且包括以aps开头的日志 shen* and aps*
查询topic1和topic2下的所有日志 __topic__:topic1 or __topic__ : topic2
查询tagkey1下tagvalue2的所有日志 __tag__ : tagkey1 : tagvalue2
查询latency大于等于100,并且小于200的所有日志 latency >=100 and latency < 200latency in [100 200)
查询latency大于100的所有请求 latency > 100
查询不包含爬虫的日志,并且http_referer中不包含opx的日志 not spider not bot not http_referer:opx
查询cdnIP字段不为空的日志 not cdnIP:""
查询cdnIP字段不存在的日志 not cdnIP:*
查询存在cdnIP字段的日志 cdnIP:*
查询指定url * | select * where url = 'www.xxxxx.com'

指定或跨日志主题(Topic)查询

每个Logstore根据Topic可以划分成一个或多个子空间,在查询时,指定Topic可以限定查询范围,达到更快速度。您如果对Logstore有二级分类需求,可以使用Topic进行划分。

当指定一个或多个Topic进行查询时,仅从符合条件的Topic中进行查询。不指定Topic时,则查询所有Topic下的日志。

例如,使用Topic划分不同域名下日志。日志Topic
Topic查询语法如下所示。
  • 支持查询所有Topic下的日志,在查询语法和参数中都不指定Topic意味着查询所有Topic的日志。
  • 查询语法为__topic__:topicName
  • 支持查询多个Topic,例如__topic__:topic1 or __topic__:topic2表示查询topic1和topic2下的日志。