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

查询方式

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

日志查询语句是查询分析语句的前半部分,指定日志查询时的过滤规则,返回符合条件的日志数据。查询语句中支持全文查询和键值查询。
  • 全文查询

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

    除了普通的全文查询之外,日志服务还支持短语查询和模糊查询。
    • 普通全文查询:指定关键字和规则,包含该关键字并符合规则的日志会作为结果返回。

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

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

      例如"http error"表示查询包含关键字http error的日志。

    • 模糊查询:指定一个64个字符以内的词,在词的中间或者末尾加上模糊查询关键字,即*?,日志服务会在所有日志中为您查询到符合条件的100个词,并返回包含这100个词并满足查询条件的所有日志。

      例如addr?表示在所有日志中查找以addr开头的100个词,并返回包含这些词的日志。

  • 键值查询

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

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

注意事项

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

运算符

查询语句支持如下运算符:
运算符 说明
and 双目运算符。格式为 query1 and query2,表示query1query2 查询结果的交集。如果多个单词间没有语法关键词,默认是and 的关系。
or 双目运算符。格式为query1 or query2,表示query1query2 查询结果的并集。
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 | timeslice 1h | count
timeslice 时间分片运算符,表示多长时间的数据作为一个整体进行计算,使用方式有 timeslice 1h,timeslice 1m,timeslice 1s 分别表示以 1 小时,1 分钟,1s 作为一个整体。例如 query1 | timeslice 1h | count 表示查询 query 这个条件,并且返回以 1 小时为时间分片的总次数。
count 计数运算符,表示日志条数。
* 模糊查询关键字,用于替代 0 个或多个字符,例如:que*,会返回que 开头的所有命中词。
说明 模糊查询最多返回100个包含符合关键词的日志。
? 模糊查询关键字,用于替代一个字符,比如qu?ry,会返回以qu开头,以ry结尾,并且中间还有一个字符的所有命中词。
__topic__ 查询某个 topic 下数据,可以在 query 中查询 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 查询某个字段处于某个范围内的日志,使用中括号表示闭区间,使用小括号表示开区间,括号中间使用两个数字,数字中间为若干个空格。例如latency in [100 200]latency in (100 200]
说明
  • 运算符不区分大小写。
  • 运算符的优先级由高到底排序为:>">( )>and>not>or
  • 日志服务保留以下运算符的使用权,如果您需要使用以下运算符作为查询关键字,请使用双引号包裹起来: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 FILE: 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*
查询以 shen 开头,以 ong 结尾,中间还有一个字符的日志 shen?ong
查询包括以 shen 开头,并且包括以 aps 开头的日志 shen* and aps*
查询以 shen 开头的日志的分布,时间片为 20 分钟 shen*| timeslice 20m | count
查询 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:*

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

每个 Logstore 根据 Topic 可以划分成一个或多个子空间,当进行查询时,指定 topic 可以限定查询范围,达到更快速度。因此我们推荐对 logstore 有二级分类需求的用户使用 topic 进行划分。

当指定一个或多个 topic 进行查询时,仅从符合条件的 topic 中进行查询。但不输入 topic,默认查询所有 topic 下的数据。

例如,使用Topic来划分不同域名下日志:

图 1. 日志Topic


Topic 查询语法:
  • 支持查询所有 topic 下的数据,在查询语法和参数中都不指定 topic 意味着查询所有 topic 的数据。
  • 支持在 query 中查询 topic,查询语法为 __topic__:topicName。同时仍然支持旧的模式,在 url 参数中指定 topic。
  • 支持查询多个 topic,例如 __topic__:topic1 or __topic__:topic2 表示查询 topic1 和 topic2 下的数据的并集。

模糊查询

日志服务支持单词模糊查询,指定一个64个字符以内的词,在词的中间或者末尾加上模糊查询运算符,即*?,日志服务会在所有日志中为您查询到符合条件的100个词,并返回包含这100个词并满足查询条件的所有日志。

限制说明
  • 查询时必须指定前缀,即*?不能出现在词的开头。
  • 指定的词越精确,查询结果越精确。
  • 查询的词超过64个字符,无法使用模糊查询。建议您把查询的词长度缩小到64个字符以下。