日志服务提供一套查询语法用于设置查询条件,帮助您更有效地查询日志。
查询方式
-
只有在字段索引中将字段的数据类型设置为double、long后,才能通过数值范围查询对应的日志。如果字段的数据类型不被设置为double、long或者查询时数值范围的语法错误,那么日志服务会按照全文查询方式进行查询,这样查询到的结果可能与您期望的结果不同。例如字段
owner_id
为非double、long类型,则执行查询语句
owner_id>100
时,会返回同时包含 owner_id 、 > (非分词符)、 100 这三个词的日志。 - 如果将字段的类型从text类型改成double、long类型,则修改索引之前的日志只支持等号(=)查询。
- 不同的索引配置,会产生不同的查询和分析结果,请根据您的需求,合理创建索引。如果您同时创建了全文索引和字段索引,以字段索引的配置为准。
-
全文查询和字段查询
查询方式 说明 示例 全文查询 配置全文索引后,日志服务根据您设置的分词符将整条日志拆分成多个词。您可以指定关键字(字段名、字段值)和查询规则进行查询。 PUT and cn-shanghai
表示查询同时包含关键字 PUT 和 cn-shanghai 的日志。字段查询 配置字段索引后,您可以指定字段名称和字段值(Key:Value)进行查询。根据字段索引中设置的数据类型,您可以进行多种类型的基础查询和组合查询。更多信息,请参见 数据类型 。 request_time>60 and request_method:Ge*
表示查询 request_time 字段值大于 60 且 request_method 字段值以 Ge 开头的日志。 -
精确查询和模糊查询
查询方式 说明 示例 精确查询 使用完整的词进行查询。 日志服务查询采用的是分词法,精确查询时并不能完全匹配关键词。例如查询语句为
abc def
,查询结果将包含所有abc
和def
的日志,无法完全匹配目标短语。如果您要完全匹配短语abc def
,可以使用短语查询或者Like语法。更多信息,请参见 短语查询 、 如何精准查询日志 。-
host:example.com
表示查询 host 字段值包含 example.com 的日志。 -
PUT
表示查询包含关键字 PUT 的日志。 -
* | 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]。
模糊查询是一种采样查询,查询机制如下所示:- 当您开启字段索引,且指定某个字段进行查询时,日志服务从该字段的索引数据中随机采样,返回部分结果并不是全量扫描底层数据。
- 当您开启全文索引,且没有指定某个字段进行查询时,日志服务从全文索引数据中随机采样,返回部分结果并不是全量扫描底层数据。
-
addr*
表示在所有日志中查找以 addr 开头的100个词,并返回包含这些词的日志。 -
host:www.yl*
表示在所有日志中查找 host 字段值以 www.yl 开头的100个词,并返回包含这些词的日志。
-
运算符
- 除in运算符外,其他运算符不区分大小写。
- 日志服务保留以下运算符的使用权,如果您需要使用以下运算符作为查询关键字,请使用双引号("")包裹: sort 、 asc 、 desc 、 group by 、 avg 、 sum 、 min 、 max 和 limit 。
-
运算符的优先级由高到低排序如下所示:
- 冒号(:)
- 双引号("")
- 圆括号( )
- and、not
- or
运算符 | 说明 |
---|---|
and |
and运算符。例如
request_method:GET and status:200
。
如果多个关键词之间没有语法关键词,默认为and关系,例如
|
or |
or运算符。例如
request_method:GET or status:200
。
|
not |
not运算符。例如
request_method:GET not status:200
、
not status:200
。
|
( ) |
用于提高括号内查询条件的优先级。例如
(request_method:GET or request_method:POST) and status:200
。
|
: |
用于字段查询(Key:Value),例如
request_method:GET
。
如果字段名称或者字段值内有空格、冒号(:)等保留字符,请使用双引号("")包裹字段名称或者字段值,例如
|
"" |
使用双引号("")包裹一个语法关键词,可以将该语法关键词转换成普通字符。例如
"and"
表示查询包含and的日志,此处的and不代表运算符。
在字段查询中双引号("")内的所有词被当成一个整体。 |
\ |
转义符号,用于转义双引号(""),转义后的引号表示符号本身。例如日志内容为
instance_id:nginx"01"
,您可以使用
instance_id:nginx\"01\"
进行查询。
|
* |
通配符查询,匹配零个、单个、多个字符。例如
host:aliyund*c
。
说明
日志服务会在所有日志中为您查询到符合条件的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
冲突,此时您需要使用
Source
、
SOURCE
等词查询自定义的字段。
|
__tag__ |
通过元数据信息查询日志。例如
__tag__:__receive_time__:1609837139
。
|
__topic__ |
查询某日志主题下的日志。例如
__topic__:nginx_access_log
。
|
查询语句示例
同一条查询语句,针对不同的日志内容和索引配置时,会有不同的查询结果。本文基于如下日志样例和索引介绍查询语句示例。
日志样例
本文以Nginx访问日志为例,介绍常见的查询语句。

索引配置

普通查询示例
查询需求 | 查询语句 |
---|---|
查询GET请求成功(状态码为200~299)的日志。 |
|
查询来自非杭州地域的GET请求的日志。 |
|
查询GET请求或POST请求的日志。 |
|
查询非GET请求的日志。 |
|
查询GET请求或POST请求成功的日志。 |
|
查询GET请求或POST请求失败的日志。 |
|
查询GET请求成功(状态码为200~299)且请求时间小于60秒的日志。 |
|
查询请求时间为60秒的日志。 |
|
查询请求时间大于等于60秒,并且小于200秒的日志。 |
|
查询 request_time 字段值为空或非法数字的日志。 |
说明
request_time:*
用于判断
request_time
字段是否存在。此处的星号(*)不代表模糊查询。
|
查询包含 request_time 字段且字段值为数字的日志。 |
|
查询包含 and 的日志。 |
说明
此处的
and
为普通字符串,不代表运算符。
|
查询 request method 字段值中包含 PUT 的日志。 |
重要
字段名
request method
中存在空格,在查询时需使用双引号("")包裹。
|
查询日志主题为HTTPS或HTTP的日志。 |
|
查询采集于 192.0.2.1 主机的日志。 |
此处的
重要
通过数据加工或者Logtail插件处理的日志,其tag中的key会被转换成普通key,即查询时需使用双引号("")包裹字段名,例如
"__tag__:__client_ip__":192.0.2.1
。
|
查询包含
192.168.XX.XX
的日志。
|
更多信息,请参见
通过SQL的like语法进行精确的模糊查询
。
|
查询 remote_user 字段值不为空的日志。 |
|
查询 remote_user 字段值为空的日志。 |
|
查询 remote_user 字段值不为 null 的日志。 |
|
查询不存在 remote_user 字段的日志。 |
|
查询存在 remote_user 字段的日志。 |
|
查询 城市 字段值不为 上海 的日志。 |
说明
当您要查询中文字符串时,您需要在配置索引时,打开
包含中文
开关。更多信息,请参见
创建索引
。
|
进阶查询示例
-
模糊查询
查询需求 查询语句 查询包含以 cn 开头的词的日志。 cn*
查询 region 字段值是以 cn 开头的日志。 region:cn*
查询 region 字段值包含 cn* 的日志。 region:"cn*"
说明 此处的cn*
为一个独立词。例如:-
如果日志内容为
region:cn*,en
,分词符为半角逗号(,),则该日志内容被拆分为region
、cn*
和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
后,该字段值为拆分为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
等查询语句进行查询。
说明 当查询关键字中包含分词符时,您可以使用短语查询或者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 字段值中包含 Linux 和 Chrome 的日志。 -
http_user_agent:"Linux Chrome"
-
http_user_agent:Linux and http_user_agent:Chrome
查询 http_user_agent 字段值中包含 Firefox 或 Chrome 的日志。 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_index
、1
等词。 -
设置
分词符
为空时,该字段值将被当成一个整体,则您使用
-
查询JSON日志(字段值为JSON对象、JSON数组)
当字段值为JSON格式时,您可以为该字段配置JSON类型的索引或者使用JSON函数进行查询与分析。更多信息,请参见 查询和分析JSON日志的常见问题 。