本文介绍日志服务检索功能支持的检索语法。
Demo 中心 日志服务 Demo 中心提供了检索语句 Demo,方便您快速体验功能。单击 Demo 中心 立即体验。
注意
Demo 中心的数据为演示数据,请勿用于生产环境。
注意事项 语法操作符不区分大小写,例如 AND
、and
均表示检索逻辑运算符。 逻辑操作(AND
,OR
,&&
,!
等)必须使用半角括号(()
)明确逻辑操作优先级,否则搜索到的结果可能和预期不一致。例如搜索某台机器上 log
目录下不包含 error
的日志,可指定检索条件为 ((__source__:192.168.10.10 AND __path__:\/var\/log\/*) NOT error)
。 多个检索语句用空格分隔时,表示“与”逻辑,即等同于 AND
。例如 warning error
等同于 warning AND error
,表示检索内容中包含关键词 warning
和 error
的日志。 检索语法中的运算符均为日志服务的保留字符,若检索关键字中包含这些语法保留字符,均需要转义。
检索方式 日志服务支持全文检索和键值检索,详细说明如下表所示。
检索方式
说明
全文检索
输入检索条件时,直接输入关键词,无需指定日志字段名,日志服务会根据指定的分词符切分原始日志,当分词后的日志中包含符合检索条件的词即匹配。检索语句格式如下:
keywords1 [ [ and | or | not ] keywords2 ] ...
其中,keywords
为需要检索的关键词,支持与运算符结合使用。例如,404 AND 500
表示查询包含 404 和 500 关键字的所有日志。
说明
开启全文索引后才能进行全文检索。 在检索语句中,如果检索内容存在特殊字符(空格、中文等)、检索运算符(and、or 等)、索引分词符等内容时,需要使用双引号("")包裹,例如"cn guilin"
。 键值检索
(Key:Value)
输入检索条件时,需要指定字段名称和字段值,如果日志内指定字段的值符合指定的检索条件即匹配。检索语句格式:
key1 [ : | > | >= | < | <= | = ] value1 [ [ and | or | not ] key2 [ : | > | >= | < | <= | = ] value2 ]...
其中,key
为索引字段。例如,status:500
表示检索 status
为 500 的访问日志。
说明
在检索语句中,如果字段名或字段值中存在特殊字符(空格、中文等)、检索运算符(and、or 等)、索引分词符等内容时,需要使用双引号("")包裹,例如"cn guilin"
。 仅 long 和 double 类型的字段支持数值范围查询。 开启键值索引后才能进行键值检索。
检索精度 日志服务支持精确查询和模糊查询,详细说明如下表所示。
检索精度
说明
示例
精确查询
检索时指定完整的关键词,即通过完整的关键词进行匹配。例如指定检索条件为 GET,表示查询包含关键词 GET 的日志。
日志服务检索数据时采用分词法,精确查询的结果并非完全精准,例如执行检索语句 successful request
时,日志服务将根据 successful and request
语句进行检索,同时包含 successful
、 request
的日志都会被匹配到,而非精确匹配短语 successful request
。如果您要完全匹配短语 successful request
,可使用短语查询或 LIKE 语法。详细说明,请参考如何精准查询短语? 。
region: cn-shanghai
:查询 region
字段值包含 cn-shanghai
的日志。URL:#"successful request"
:查询包含短语 successful request
的日志。* | SELECT * WHERE "__content__" LIKE '%Error 2024-06-24%'
:查询__content__
字段中包含短语 Error 2024-06-24
的日志。模糊查询
检索条件中仅指定关键词的部分字符,即在关键字中加上通配符星号(*
)或问号(?
),日志服务会匹配符合条件的 100 个词,并返回满足检索条件且包含这 100 词中的日志。例如检索条件 erro*
表示在所有日志中查询以 erro 开头的 100 个词,然后返回包含这 100 个词并满足检索条件的所有日志。详细说明,请参考如何模糊检索日志? 。
指定的词越精确,查询结果越精确。 使用双引号("")包裹星号(*
)或问号(?
)后,星号(*
)或问号(?
)仅表示普通字符,不具备模糊匹配功能。 数值类型(long、double)的字段不支持使用星号(*
)或问号(?
)进行模糊查询。您可以使用数值范围进行查询,例如指定 age:{20 TO 30}
。 TopicID:6d*67
:查询包含字段名为 TopicID
,字段值以 6d
开头,以 67
结尾的日志。cn*
:查询包含以 cn
开头的词的日志。
运算符 日志服务支持的检索运算符如下表所示。
操作符
说明
示例
AND
与逻辑操作符,表示取多个搜索结果的交集,指定多个逻辑操作时请使用半角括号()明确逻辑操作优先级。
__path__:\/var\/log\/* AND error
OR
或逻辑操作符,表示取多个搜索结果的并集。指定多个逻辑操作时请使用半角括号()
明确逻辑操作优先级。
error OR warning
NOT
非逻辑操作符,表示搜索结果不包含 NOT 之后的关键词。指定多个逻辑操作时请使用半角括号()明确逻辑操作优先级。
ERROR AND NOT __path__:\/var\/log\/*
TO
范围逻辑操作符,TO 前后应加空格。
如果开始值大于结束值,则会自动替换。即 age:[20 TO 1]
与 age:[1 TO 20]
等价。
age:[1 TO 20]
''
单引号,单引号中的字符串包含预设的分词符时,被分词符拆分后的各个关键字之间为 AND 关系。
'today is friday'
""
双引号,双引号中的字符串包含预设的分词符时,被分词符拆分后的各个关键字之间为 AND 关系。
__hostname__:"Jone Doe"
:
冒号,表示键值检索,返回包含指定 Key 和 Value 的日志。
level:info
*
通配符,表示模糊查询。通配符*
可以匹配零个、单个、多个字符。
使用双引号("")包裹星号(*
)或问号(?
)后,星号(*
)或问号(?
)仅表示普通字符,不具备模糊匹配功能。例如:
gu*
表示匹配以 gu
开头的关键词。"gu*"
表示匹配关键词 gu*
。level:erro*
?
通配符,表示模糊查询。通配符?
可以匹配单个字符。
使用双引号("")包裹星号(*
)或问号(?
)后,星号(*
)或问号(?
)仅表示普通字符,不具备模糊匹配功能。例如:
gu?n
表示匹配以 gu
开头,以 n
结尾,且中间还有一个字符的关键词。"gu?n"
表示匹配关键词 gu?n
。level:erro?
()
分组操作符,用于控制多个逻辑运算之间的优先级。
((__source__:192.168.10.10 AND __path__:\/var\/log\/*) NOT error)
=
等号,表示在数值类型的字段中,查询 value 等于某个数值的日志。等号(=)和冒号(:)为相同作用。
age=18
>
范围操作符,表示在数值类型的字段中,查询 value 大于某个数值的日志。
age>18
>=
范围操作符,表示在数值类型的字段中,查询 value 大于等于某个数值的日志。
age>=18
<
范围操作符,表示在数值类型的字段中,查询 value 小于某个数值的日志。
age<18
<=
范围操作符,表示在数值类型的字段中,查询 value 小于等于某个数值的日志。
age<=18
[]
范围操作符,范围中包含边界值。
age:[20 TO 30]
{}
范围操作符,范围中不包含边界值。
age:{20 TO 30}
\
转义符。如果查询的关键词中包含保留字符,则需要通过转义符进行转义后再检索。转义后的字符代表字符本身,而不是代表关键字。
需要转义的字符包括 + - = & | > < ! ( ) { } [ ] ^ " ~ * ? : \ /
。
说明
使用双引号进行检索时,仅需转义 "
和 \
。 使用单引号进行检索时,仅需转义 '
、\
和 *
。 __path__:\/images\/log
检索语句参考
常用检索语句 场景
语句
查询包含关键词 ERROR 的日志。
ERROR
查询包含 level
字段的日志。
level:*
查询不包含 level
字段的日志。
NOT level:*
查询 level
字段值不为空的日志。
NOT level:""
查询 level
字段值为空的日志。
level:""
查询 level
字段值不为null的日志。
NOT level:"null"
查询来源为指定 IP 的某台机器或某些机器的日志。
__source__:192.168.10.10
或 __source__:192.168.10.*
查询日志采集路径为特定名字的某个文件或某些文件的日志。
__path__:"/var/log/access.log"
或__path__:\/var\/log\/*.log
查询状态码为 4xx
的访问日志。
status:[400 TO 500}
查询状态码大于 400
,即访问失败的日志。
status:>400
在 GET 请求的访问日志中,查询请求失败的日志。
method:GET AND status:>400
查询异常日志,即级别非 INFO 的日志。
NOT level:INFO
查询 ERROR 或 WARNING 级别的日志。
level:ERROR OR level:WARNING
查询指定机器上的异常日志,即来源为指定 IP 地址、级别非 INFO 的日志。
__source__:192.168.10.10 NOT level:INFO
来源为指定 IP 地址、级别为 ERROR 或 WARNING 的日志。
__source__:192.168.10.10 AND (level:ERROR OR level:WARNING)
查询指定机器上指定文件中的异常日志,即来源为指定 IP 地址、路径为指定文件、级别非 INFO 的日志。
(__source__:192.168.10.10 AND __path__:\/var\/log\/access.log) NOT level:INFO
通过预留字段 __pod_name__
查询指定 Pod 名称的日志。
__pod_name__:nginx
查询 Pod 名称为 application,且请求延时大于 3s 的日志。
__pod_name__:application AND request_time:>3
查询包含字段名为 ProjectID
,字段值以 6d
开头,以 67
结尾的日志。
ProjectID:6d*67
查询包含关键词 not
的日志。
"not"
说明
not 默认为日志服务检索运算符,当 not 为普通的检索字符串时,需使用双引号("")包裹。
基于分词符的检索 如果您在创建索引时开启了分词符功能,则日志服务会基于分词符,将日志内容拆分成多个关键词,您可以搜索各个关键词进行日志检索。日志服务支持的分词符包括 !@#%^&*"()-_=', <>/?|;:\n\t\r[]{}\
。
例如 region
字段值为 cn-guilin
,并为该字段配置了键值索引。
当您未开启分词符时,cn-guilin
为一个整体,您使用guilin
检索语句将检索不到该日志。
当您设置分词符为 !@#%^&*"()-_=', <>/?|;:\n\t\r[]{}\
时,cn-guilin
将被拆分为 cn
、guilin
。您可以使用如下语句进行日志检索。
场景
检索语句
查询 region
字段的值中包含guilin
的日志。
region:guilin
查询 region
字段的值中包含cn
、guilin
的日志。
region:"cn guilin"
查询包含以 gu
开头的词的日志。
gu*
短语查询 使用短语查询可以精准匹配指定的短语,详细说明请参考短语查询 。
场景
检索语句
查询 URL
字段的值中包含 ShardId=7
的日志。
URL:#"ShardId=7"
预留字段查询 预留字段
说明
示例
__source__
筛选来源为指定 IP 地址的日志。支持通过通配符进行模糊查询。
__source__:127.0.0.*
__path__
筛选来源为指定路径下文件的日志。支持通过通配符进行模糊查询。
__path__:\/var\/log\/messages
__time__
通过日志中的 __time__
字段筛选日志,支持范围查询。
__time__:[1524952304123 TO 1724958207123]
检索示例 本示例从全文检索、键值检索、精确查询、模糊查询、短语查询、SQL LIKE 查询等维度演示检索语法的使用。
原始日志 Action:ConsumeLogs
Host:t.ivolces.com
UID:210006
ReqID:f118a5b781
ReqSize:51
ReqTime:16
RespSize:1
Method:GET
status:200
URL:/ConsumeKafkaLogs?ShardId=5&TopicId=d6cb02b5-1cd1-4265-9b8b-83b7
level:error
error:短时间内请求过多,请放慢速度。
配置索引 不同的索引配置,会产生不同的检索分析结果。同时创建全文索引和检索索引后,以键值索引的配置为准。
检索语句
模糊查询 分类
场景
检索语句和结果
基础模糊查询
查询包含以 Consume
开头的关键字的相关日志。
基于 SQL LIKE 语法的模糊检索
查询 host
字段中包含字符串 ivolces
的日志。
精确查询 分类
场景
检索语句和结果
基础精确查询
查询包含关键词 ConsumeLogs
的相关日志。
查询 URL
字段中包含 ConsumeLogs 的日志。
查询 ConsumeLogs?ShardId=5
的相关日志。
在本示例中,问号(?)、等号(=)为分词符,因此日志服务会将 ConsumeLogs?ShardId=5
拆分 ConsumeLogs、ShardId、5 并进行查询。如果您需要精准匹配短语 ConsumeLogs?ShardId=5
,可参考下面的短语查询和 SQL LIKE 查询。
短语查询
精准查询短语 ConsumeLogs?ShardId=5
相关的日志。
精准匹配ConsumeLogs?ShardId=5
,可以使用短语查询或者基于 SQL LIKE 语法的精确检索。
基于 SQL LIKE 语法的精确检索
精准查询 URL
字段中包含 ConsumeLogs?ShardId=5
的相关日志。