全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

查询语法

更新时间:2018-01-05 14:22:38

为了能够帮助您更有效地查询日志,Log Service 提供一套查询语法用以表达查询条件。您可以通过 Log Service API 中的 GetLogsGetHistograms 接口或者在 Log Service 控制台的查询页面指定查询条件。本文档详细说明该查询条件的语法。

索引类型

日志服务支持通过两种模式建立对日志库索引:

  • 全文索引:将整行日志作为整体进行查询,既不区分键与数值(Key,Value)。
  • 键值索引:指定键(Key)情况下进行查询,例如 FILE:appType:action。在该键下被包含字符串都会命中。

语法关键词

LogSearch 查询条件支持如下关键字:

名称 语义
and 双目运算符。形式为 query1 and query2,表示 query1query2 查询结果的交集。如果多个单词间没有语法关键词,默认是 and 的关系。
or 双目运算符。形式为 query1 or query2,表示 query1query2 查询结果的并集。
not 双目运算符。形式为 query1 not query2,表示符合 query1 并且不符合 query2 的结果,相当于 query1–query2。如果只有 not query1,那么表示从全部日志中选取不包含 query1 的结果。
( , ) 左右括号用于把一个或多个子 query 合并成一个 query,用于提高括号内 query 的优先级。
: 用于 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
  • Log Service 还保留以下关键字的使用权,如果您需要使用以下关键字,请使用双引号包含起来: sort asc desc group by avg sum min max limit
  • 同时配置全文索引和键值索引时,如果两者的分词字符不一样,那么使用全文查询方式时数据无法查出。
  • 使用数值查询的前提条件是给该列设置类型为double或long,如果您没有设置类型,或者数值范围查询的语法不正确,日志服务会将该查询条件解释成全文索引,可能与您的期望的结果不同。
  • 如果您之前把某列配置为文本类型,现在改成数值类型,那么之前的数据只支持=查询。

查询示例

  • 同时包含 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

其他语法

指定或跨 Topic 查询

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

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

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

topic

Topic 查询语法:

  • 支持查询所有Topic下的数据,在查询语法和参数中都不指定Topic表示查询所有Topic的数据。
  • 支持在Query中查询Topic,查询语法为 __topic__:topicName。同时仍然支持旧的模式,即在URL参数中指定Topic。
  • 支持查询多个Topic,例如 __topic__:topic1 or __topic__:topic2 表示查询Topic1和Topic2下的数据的并集。
本文导读目录