更新时间:2024-12-04 GMT+08:00
分享

LTS搜索语法介绍

云日志服务LTS提供一套搜索语法用于设置搜索条件,帮助您更有效地搜索日志。

查询语句用来指定日志查询时的过滤规则,返回符合条件的日志。根据索引配置方式可分为全文查询和字段查询,根据查询精确程度可分为精确查询和模糊查询。详细请参考表1

SQL是用于访问和处理数据库的标准计算机语言。管道符提供了使用SQL语句进行数据分析的能力,具体请参考SQL92语法标准。

使用SQL语句进行查询时,建议SQL语句中的字段名或别名使用双引号,例如:select "filed1.a" as "别名" from log。

表1 查询方式

查询方式

说明

示例

全文查询

配置全文索引后,日志服务根据您设置的分词符将整条日志拆分成多个词。您可以指定关键字(字段名、字段值)和查询规则进行查询。

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个词并满足查询条件的所有日志。指定的词越精确,查询结果越精确。

说明:
  • 星号(*)代表匹配多个字符,问号(?)代表匹配1个字符。
  • 当星号(*)和问号(?)作为分词符时,不具备模糊搜索功能,其中问号(?)为默认的分词符,使用其模糊搜索功能前需将其从分词符中移除。
  • 星号(*)或问号(?)不能用在词的开头。
  • long数据类型和float数据类型不支持使用星号(*)或问号(?)进行模糊搜索。
  • 当模糊条件前缀很短且日志中符合条件的词超过100个时,查询结果会不精确。

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

短语搜索

短语搜索用于准确匹配目标短语,例如搜索语句abc def,不区分先后顺序,将匹配所有同时包含abcdef的日志。短语搜索和关键词搜索的区别请参考表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运算符配合使用时,还会匹配到不包含该字段的日志。
    • 短语搜索不支持搭配模糊搜索。

      短语搜索中的星号(*)和问号(?)会被视为普通字符,因此短语搜索不支持搭配模糊搜索,可以用来搜索日志中的星号(*)和问号(?)。

    • 短语搜索不支持对分词符进行搜索。

      例如搜索语句#"var/log",其中 / 为分词符,搜索语句等同于#"var log",会搜索包含目标短语var log的日志。同理,搜索语句#"var:log"#"var;log"等搜索的也是包含目标短语var log的日志。

    • 中文搜索推荐采用短语搜索。

      由于中文默认采用的是一元分词,每个汉字单独分词,搜索时会匹配同时包含搜索语句中每一个汉字的日志,本身便具有模糊搜索的特性,当需要更加精确的结果时,推荐采用短语搜索。

运算符

查询语句支持如下运算符

表4 运算符

运算符

说明

示例

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 not status:200
  • not status:200

( )

用于提高括号内查询条件的优先级。

(request_method:GET or request_method:POST) and status:200

:

用于字段查询(Key:Value)。

说明:

如果字段名称(key)或者字段值(value)内有空格或冒号(:)等保留字符,请使用双引号("")包裹字段名称(key)或者字段值(value)。例如:

  • "request method":GET
  • message:"This is a log"
  • time:"09:00:00"
  • ipv6:"2024:AC8:2ac::d09"

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_time in [100 200]
  • request_time in (100 200]

#""

用于搜索包含目标短语的日志,可以保证关键词出现的顺序。

说明:

短语搜索中的星号(*)和问号(?)会被视为普通字符,因此短语搜索不支持模糊搜索,可以用来搜索日志中的星号(*)和问号(?)。

request_method:#"GET POST"

示例说明

表5 搜索说明

搜索需求

搜索语句

搜索User-Agent字段值包含短语Mon, 17 Apr 2023的日志。

User-Agent:#"Mon, 17 Apr 2023"

搜索User-Agent字段值包含短语Mozilla/5.0的日志。

User-Agent:#"Mozilla/5.0"

搜索week字段值包含短语星期一的日志。

week:#"星期一"

相关文档