查询语法
更新时间:2023-10-18
日志查询功能,关键词查询的语法关键词是match,检索语句写在 match 关键字之后,和 match 关键字之间通过空格分隔。形如: match 检索语句
支持的查询类型
- 数值查询: 指定字段和查询条件,所指定字段符合条件的日志会作为结果返回。例如
match status=200 and time_cost in [100 200)
,表示查询 status 等于 200 且 timecost 大于等于 100 且 timecost 小于 200 的日志 - 关键字查询: 指定字段和关键字,所指定字段包含该关键字的日志会作为结果返回。如果不指定字段,将对日志原文进行查询。如果需要查询的关键字中包含检索语法运算符或空格,可以将关键字用双引号("")包裹,表示将双引号中的内容作为多个关键字查询。例如
match method:GET and msg:"service not avaliable"
表示查询 method 是 GET 并且 msg 包含关键字 service、not 和 avaliable 的日志,等价于查询match method:GET and msg:service and msg:"not" and msg:avaliable
- 短语查询: 如果需要查询特定的关键字组合,可以将关键字用单引号('')包裹作为短语,表示按照单引号中的关键字顺序进行匹配查询。如果不指定字段,将对日志原文进行查询。例如
match msg:'service not avaliable'
表示查询 msg 包含短语 service not avaliable 的日志,且组成短语的关键字之前不包括其他关键字, service is temporarily not avaliable 和 not service avaliable 都不会命中查询 - 模糊查询: 在关键字中的中间或末尾加上模糊查询关键字,即
*
和?
,日志服务会在所有日志中为您查询符合条件的日志。例如match httpuseragent:andr*
表示在所有日志中查找 http_user_agent 字段包含以 andr 开头的词的日志
限制说明:
- 查询时必须指定前缀,即 * 和 ? 不能出现在词的开头
- 指定的词越精确,查询结果越精确。
字段对应的查询类型
- 对于 text 类型的字段,可以进行普通查询、短语查询、模糊查询
- 对于 float 和 long 类型的字段,可以指定数值范围进行查询
例如,查询语句为 match method:GET and status >= 500
,表示查询 method 字段值是 GET,且 status 字段值大于等于 500 的日志
运算符简介
运算符 | 说明 |
---|---|
and | 双目运算符。格式为 query1 and query2,表示 query1 和 query2 查询结果的交集。如果多个单词间没有语法关键词,默认是 and 的关系。 |
or | 双目运算符。格式为 query1 or query2,表示 query1 和 query2 查询结果的并集。 |
not | 双目运算符。格式为 query1 not query2,那么表示符合 query1 但不符合 query2 的结果,即 query1 - query2。如果省略 query1 ,只有 not query2 ,表示从全部日志中选取不包含 query2 的结果。 |
(,) | 括号用于把一个或多个子查询合并成一个查询条件,用于提高括号内查询条件的优先级。 |
: | 用于 key-value 对的查询。key:term 构成一个 key-value 对。表示在 key 的索引上执行 term 查询。如果 key 或者 value 内有空格( )、冒号(:)等保留字符,需要用双引号 "" 把整个 key 或者 value 包裹起来。左右引号内部的任何一个 term 都会被查询,而不会当成语法关键词。 |
* | 模糊查询关键字,用于替代 0 个或多个字符,例如:andr*,会返回 andr 开头的所有命中词。 |
? | 模糊查询关键字,用于替代一个字符,例如 andr?id,会返回以 andr 开头,以 id 结尾,并且中间还有一个字符的所有命中的词。 |
" | 转义符号,表示把一个关键词转换成普通的查询字符。左右引号内部的任何一个 term 都会被查询,而不会当成语法关键词。引号内的模糊查询关键字 (*,?) 会被当做字符常量处理。 |
' | 转义符号,表示关键字短语。左右引号内部的内容会被当做一个关键字短语进行短语查询。引号内的模糊查询关键字 (*,?) 会被当做字符常量处理。 |
\ | 转义符。用于转义引号,转义后的引号表示符号本身,不会当成转义字符,例如 "\""。 |
> | 查询某个字段下大于某个数值的日志,例如 status > 500。 |
>= | 查询某个字段下大于或等于某个数值的日志,例如 status >= 500。 |
< | 查询某个字段下小于某个数值的日志,例如 status < 400。 |
<= | 查询某个字段下小于或等于某个数值的日志,例如 status <= 400。 |
= | 查询某个字段下等于某个数值的日志,例如 status = 404。 |
in | 查询某个字段处于某个范围内的日志,使用中括号表示闭区间,使用小括号表示开区间,括号中间使用两个数字,数字中间为若干个空格。例如 status in [500 600] 或 status in [200 400)。 |
is null | 查询某个字段值为空或不包含该字段的日志。例如 error is null。 |
is not null | 查询某个字段值不为空的日志。例如 error is not null。 |
is true | 查询某个布尔类型的字段值为 true 的日志,例如 success is true。 |
is false | 查询某个布尔类型的字段值为 false 的日志,例如 success is false。 |
is not true | 查询某个布尔类型字段值不为 true 的日志。需要注意,若字段内容为空或日志中没有该字段,则默认字段值为null,满足字段值不为 true 的条件。例如 success is not true。如果需要查询有 success 字段,且值不为 true 的日志,可以使用 success is not null and success is not true 进行查询。 |
is not false | 查询某个布尔类型字段值不为 false 的日志。需要注意,若字段内容为空或日志中没有该字段,则默认字段值为null,满足字段值不为 false 的条件。例如 success is not false。 |