日志服务提供一套查询语法用于设置查询条件,帮助您更有效地查询日志。
查询方式
开启并配置索引后,在日志查询界面输入查询语句即可查询日志。
- 全文查询
全文查询时,将整条日志作为一个特殊的Key-Value对,Value为全部的日志内容。全文查询表示在日志内容中查询关键字,即指定查询条件为包含或不包含某个关键字,满足查询条件的日志会作为结果返回。
全文查询可以分为普通全文查询、短语查询、模糊查询。- 普通全文查询:指定关键字和规则,包含该关键字并符合规则的日志作为结果返回。
例如a and b表示查询同时包含关键字a和b的日志。
- 短语查询:如果需要查询的短语中包含空格,可以将短语用双引号("")包裹,表示将双引号中的内容作为多个关键字查询。
例如msg:"http error"表示查询msg字段中包含关键字http和error的日志,等价于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,表示query1和query2查询结果的交集。如果多个单词间没有语法关键词,默认是and的关系。 |
or | 双目运算符。格式为query1 or query2,表示query1和query2查询结果的并集。 |
not | 双目运算符。格式为query1 not query2 ,表示符合query1并且不符合query2的结果,相当于query1–query2。如果只有not query1,那么表示从全部日志中选取不包含query1的结果。 |
( , ) | 括号用于把一个或多个子查询合并成一个查询条件,用于提高括号内查询条件的优先级。 |
: | 用于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运算符外的其他运算符不区分大小写。
- 运算符的优先级由高到低排序为:、"、( )、and、not、or。
- 日志服务保留以下运算符的使用权,如果您需要使用以下运算符作为查询关键字,请使用双引号包裹起来:sort、asc、desc、group by、avg、sum、min、max和limit。
查询语句示例
查询需求 | 查询语句 |
---|---|
同时包含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 < 200或latency 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__:topicName
- 支持查询多个Topic,例如__topic__:topic1 or __topic__:topic2表示查询topic1和topic2下的日志。