云日志服务提供一套查询语法设置查询条件语句,通过查询条件语句可更有效地进行日志查询。查询操作介绍请参考日志查询。
查询方式
查询条件语句用来指定日志搜索时的过滤规则,用于查询返回符合语句条件的日志数据。以下为云日志服务提供的各种查询方式介绍以及查询语句示例。
查询方式 | 详情 | 示例 |
---|---|---|
全文模糊搜索 | 在快捷模式下,可直接输入关键词,日志服务将根据您输入的关键词,搜索原文中包含该关键词的日志。 | ERROR 表示搜索原文中包含ERROR关键词的日志 |
字段搜索 | 在语句模式下,您可以指定字段名和字段值(key = value)进行搜索,搜索内容基于sql中的where条件进行过滤。 根据字段索引中设置的数据类型,您可以进行多种类型的基础搜索和组合搜索。 |
request_time>60 and request_method='GET'表示搜索request_time字段值大于60且request_method字段值为GET的日志。 request_method= ''表示搜索request_method字段值为空的日志。not request_method= 'GET'表示搜索不包含request_method字段和request_method字段值不为GET的日志。 |
字段模糊搜索 | 在语句模式下,支持进行字段模糊搜索(key like value)。 value可包含模糊搜索关键字,即百分号(%)或下划线(_),日志服务会在所有日志中搜索到符合条件的词,返回包含这些词并满足搜索条件的所有日志。 |
request_method like 'GE%',表示在所有日志中查找request_method字段值以GE开头的词,并返回包含这些词的日志。 |
范围搜索 | 在语句模式下,double数据类型的字段支持范围搜索。 方式1:通过 =(等于)、>(大于)、<(小于)>=(大于或等于)、<=(小于或等于)运算符搜索日志。 方式2:通过between xx and xx搜索日志 |
request_time>=60表示在所有日志中查找request_time字段值大于等于60的日志。 request_time between 60 and 120表示在所有日志中查找request_time字段值大于等于60且小于等于120的日志。 |
说明全文模糊搜索
该模式下不允许通过运算符连接多个关键词。
该模式下不允许通过通配符实现模糊匹配。
字段搜索
若key为text类型,则value为字符串,需要用单引号括起字符串内容。
value参数不可为空,通过搜索语句key=''可匹配字段值为空的日志。
字段搜索和 not 运算符配合使用时,还会匹配到不包含该字段的日志。
字段模糊搜索
value字符串需要用单引号括起。
百分号(%)代表零个或多个字符。例如,'g%'会匹配以字母 'g' 开头的任何字符串,如 'get'。
下划线(_)代表单个字符。例如,'_e%'会匹配任何包含 'e' 作为第二个字符的字符串,如 'get' 或 'setting'。
double数据类型不支持使用百分号(%)或下划线(_)进行模糊搜索。
__message__为日志原文对应的内置字段,可通过__message__ like '%GET%' 实现全文模糊搜索。
运算符
查询语句支持以下运算符:
运算符 | 说明 | 示例 |
---|---|---|
and | 与运算符,不区分大小写。 | abc = 123 and abc = 456 |
or | 或运算符,不区分大小写。 | abc = 123 or abc = 456 |
not | 非运算符,区分大小写。 not 作为运算符使用时需要使用空格分隔。 not 运算符和字段搜索配合使用时还会匹配到不包含对应字段的日志。 |
not abc = 123 |
( ) | 逻辑分组操作符,控制逻辑运算优先级。 | (abc = 123 or abc = 456) and status = 200 |
\ | 转义符号,转义后的字符表示符号本身,被检索的值包含(')、(%)、(_)时,需进行转义。 | 转义('):abc = 'status:'200'' 转义(%):abc like 'status:%200%' |
> | 范围操作符,表示大于某个数值,仅适用于double类型的字段。 | abc > 123 |
>= | 范围操作符,表示大于等于某个数值,仅适用于double类型的字段。 | abc >= 123 |
< | 范围操作符,表示小于某个数值,仅适用于double类型的字段。 | abc < 123 |
<= | 范围操作符,表示小于等于某个数值,仅适用于double类型的字段。 | abc <= 123 |
= | 范围操作符,表示等于某个数值,仅适用于double类型的字段。 | abc = 123 |
in | 允许指定多个值,是多个or条件的简写。 | abc in (value1, value2) |
查询语句示例
以下为常用查询语句示例
普通查询示例
查询需求 | 语句 |
---|---|
搜索POST请求且状态码为200的日志。 | request_method = 'POST' and status = 200 |
搜索GET请求或POST请求成功(状态码为200~299)的日志。 | (request_method = 'POST' or request_method = 'GET') and status between 200 and 299 |
搜索GET请求或POST请求失败的日志。 | (request_method = 'POST' or request_method = 'GET') and not status between 200 and 299 |
搜索非GET请求的日志。 | request_method != 'GET' |
搜索GET请求成功且请求时间小于60秒的日志。 | request_method = 'GET' and request_time < 60 |
搜索请求时间为60秒的日志。 | request_time = 60 |
搜索请求时间大于等于60秒,并且小于200秒的日志。 | request_time >= 60 and request_time < 200 |
搜索全文包含and的日志。 | __message__like '%and%' |
搜索user字段值为空的日志。 | user = '' |
搜索非INFO级别的日志。 | not level= 'INFO' |
进阶模糊查询示例
查询需求 | 查询语句 |
---|---|
搜索日志原文以GE开头的日志。 | __message__like 'GE%' |
搜索日志原文以GE开头,结尾只有一个字符的词的日志。 | __message__like 'GE%' |
搜索request_method字段值以G开头的日志。 | request_method like 'G%' |
搜索request_method字段值以P开头,以T结尾,中间还有单个字符的词的日志。 | request_method like 'P_T' |
搜索request_method字段值包含以P开头,以T结尾,中间包含零个、单个或多个字符的词的日志。 | request_method like 'P%T' |