LTS搜索语法介绍
云日志服务LTS提供一套搜索语法用于设置搜索条件,帮助您更有效地搜索日志。
查询语句用来指定日志查询时的过滤规则,返回符合条件的日志。根据索引配置方式可分为全文查询和字段查询,根据查询精确程度可分为精确查询和模糊查询。详细请参考表1。
使用SQL语句进行查询时,建议SQL语句中的字段名或别名使用双引号,例如:select "filed1.a" as "别名" from log。
查询方式 |
说明 |
示例 |
---|---|---|
全文查询 |
配置全文索引后,日志服务根据您设置的分词符将整条日志拆分成多个词。您可以指定关键字(字段名、字段值)和查询规则进行查询。 |
hello and world表示查询同时包含关键字hello和world的日志。 |
字段查询 |
配置字段索引后,您可以指定字段名称和字段值(Key:Value)进行查询。根据字段索引中设置的数据类型,您可以进行多种类型的基础查询和组合查询。 |
time>60 and region:r*表示查询time字段值大于60且region字段值以r开头的日志。 |
精确查询 |
使用完整的词进行查询。日志服务查询采用的是分词法,精确查询时并不能完全匹配关键词。例如查询语句为abc def,查询结果将包含所有abc和def的日志,无法完全匹配目标短语。如果您要完全匹配短语abc def,可以使用短语查询。更多信息,请参见短语查询、如何精准查询日志。 |
region:r1表示查询region字段值精确匹配r1的日志。 |
模糊查询 |
在查询语句中指定一个64个字符以内的词,在词的中间或者末尾加上模糊查询关键字,即星号(*)或问号(?),日志服务会在所有日志中为您查询到符合条件的100个词,返回包含这100个词并满足查询条件的所有日志。指定的词越精确,查询结果越精确。
说明:
|
my*表示在所有日志中查找以my开头的100个词,并返回包含这些词的日志。 |
短语搜索
短语搜索用于准确匹配目标短语,例如搜索语句abc def,不区分先后顺序,将匹配所有同时包含abc和def的日志。短语搜索和关键词搜索的区别请参考表2。
- 短语搜索:在关键词搜索语法的基础上实现,短语搜索能够区分关键词的顺序,用于精准匹配目标短语,搜索结果更加精确。短语搜索适用于英文短语、中文短语的搜索,不支持模糊搜索。
- 关键词搜索:关键词搜索是基于分词实现,通过分词符先将搜索内容拆分为多个关键词,然后匹配日志。关键词搜索不会区分多个关键词在日志中出现的顺序,因此只要日志中按照搜索的与或非逻辑能命中关键词,该日志就会被搜索到。
表2 搜索区别 搜索方式
短语搜索
关键词搜索
搜索区别
区分关键词的顺序,用于精准匹配目标短语,搜索结果更加精确。
不区分关键词的顺序,按照搜索逻辑命中关键词即可。
举例说明
假设您的日志流中存在2条原始日志,如下:
- 原始日志1:this service is lts
- 原始日志2:lts is service
短语搜索:#"is lts",会命中1条日志。
关键词搜索:is lts,会命中2条日志。
短语搜索:#"lts is",会命中1条日志。
关键词搜索:lts is,会命中2条日志。
表3 搜索方式 搜索方式
说明
全文搜索
- #"abc def"
- content:#"abc def"
说明:content为日志原文对应的内置字段,#"abc def"等同于content:#"abc def",默认匹配日志原文的内容。
字段搜索
key:#"abc def"
说明:- value参数不可为空。
- 字段搜索和not运算符配合使用时,还会匹配到不包含该字段的日志。
运算符
查询语句支持如下运算符。
运算符 |
说明 |
示例 |
---|---|---|
and |
and运算符。 |
request_method:GET and status:200 |
AND |
与运算符,等同于and。 |
request_method:GET AND status:200 |
or |
or运算符。 |
request_method:GET or status:200 |
OR |
或运算符,等同于or。 |
request_method:GET OR status:200 |
not |
not运算符。 |
|
( ) |
用于提高括号内查询条件的优先级。 |
(request_method:GET or request_method:POST) and status:200 |
: |
用于字段查询(Key:Value)。
说明:
如果字段名称(key)或者字段值(value)内有空格或冒号(:)等保留字符,请使用双引号("")包裹字段名称(key)或者字段值(value)。例如:
|
request_method:GET |
"" |
使用双引号("")包裹一个语法关键词,可以将该语法关键词转换成普通字符。例如"and"表示查询包含and的日志,此处的and不代表运算符。在字段查询中双引号("")内的所有词被当成一个整体。 |
request_method:"GET" |
\ |
转义符号,用于转义双引号(""),转义后的引号表示符号本身。
说明:
转义双引号\"在搜索语句中必须成对出现。例如支持使用fieldName : "\"error\""或fieldName:"\\",不支持使用fieldName : "error\""或者fieldName : "error\" |
例如日志内容为instance_id:nginx"01",您可以使用instance_id:nginx\"01\"进行查询。 |
* |
通配符查询,匹配零个、单个、多个字符。 |
host:aliyund*c |
? |
通配符查询,匹配单个字符。 |
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_method:#"GET POST" |
示例说明
搜索需求 |
搜索语句 |
---|---|
搜索User-Agent字段值包含短语Mon, 17 Apr 2023的日志。 |
User-Agent:#"Mon, 17 Apr 2023" |
搜索User-Agent字段值包含短语Mozilla/5.0的日志。 |
User-Agent:#"Mozilla/5.0" |
搜索week字段值包含短语星期一的日志。 |
week:#"星期一" |