最近更新时间:2026-03-25 16:24:40
本文介绍适用于搜索型日志池的Lucene语法与SQL语法。
在进行日志搜索前,需先选择日志池、时间范围,以及在输入框中输入检索语句。产品支持全文检索、键值检索和模糊关键字检索。
日志服务会根据分词符将每条日志数据拆分为多个词组,以支持您根据特定的关键字来检索日志。全文检索支持普通查询、短语查询和模糊查询。
普通查询
直接输入关键字,或者指定字段和关键字,将返回符合关键字的数据结果。
例如 method:GET and status=200 表示查询 method 是 GET 并且 status 等于 200 的日志。
短语查询
如果需要查询的关键字中包含检索语法运算符或空格,可以将关键字用双引号("")包裹,表示将双引号中的内容作为多个关键字查询。
例如 msg:“not avaliable” 表示 msg 查询包含关键字 not 和 avaliable 的日志,等价于查询 msg:service and msg:“not” and msg:avaliable。
模糊查询
支持关键字中间或末尾加上模糊查询字符( * 和 ?)。例如 http_user:andr? 表示在所有日志中查找 http_user字段包含以 andr 开头的词的日志。
用户可以指定字段名称和字段内容进行查询。对于double和long类型的字段,可以指定数值范围进行查询。例如查询语句为count>5000 AND Status:200,表示查询count值大于5000且Status字段值为200的日志。
语法 | 语义 | 示例 |
key:value | 键值搜索格式,默认开启所有字段的索引,其中 value 支持?、*模糊搜索 | level:INFO |
A AND B | “与”逻辑,返回 A 与 B 的交集结果 | level:INFO AND line:165 |
A OR B | “或”逻辑,返回 A 或 B 的并集结果,如果多个单词间没有语法关键词,默认是 OR 的关系 | line:171 OR line:165 或者 line:(171 OR 165) |
? | 匹配单个字符,用于替代单个字符 | line:15? |
* | 匹配0到多个字符 | line:1* |
TO | range 用法,如status:[400 TO 499],或status:[400 TO 499} '}'为不包含499 | timestamp:[0 TO 1640171559877] |
> | 返回字段下大于某个数值的日志 | line:>158 |
>= | 返回字段大于或等于某个数值的日志 | line:>=158 |
< | 返回字段小于某个数值的日志 | line:<158 |
<= | 返回字段小于或等于某个数值的日志 | line:<=158 |
= | 多用于返回字段等于某个数值的日志 | line=158 |
!a:b | 返回a字段不包含b的数据 | !msg:开始 |
日志服务支持基础的 SELECT 查询,具体查询语法如下。
select_expr [, select_expr] ...
[WHERE where_condition]
[GROUP BY {col_name | expr}, ... ]
[ORDER BY {col_name | expr} [ASC | DESC], ...]
[LIMIT [offset,] row_count]下面是一个查询语句示例。
SELECT id,sum(cost) AS result
WHERE price>500
GROUP BY id说明:SQL查询语法使用限制详见使用限制。
运算符 | 含义 |
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
= | 等于 |
<> | 不等于 |
BETWEEN | 查询处于两个参数之间的数据 |
IS NULL or IS NOT NULL | 判断参数是否是Null值 |
运算符 | 含义 |
AND | 只有左右运算数都是true时,结果才为true |
OR | 左右运算数任一个为true,结果为true |
NOT | 右侧运算数为false时,结果才为true |
真值表
a | b | a AND b | a OR b |
TRUE | TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE |
TRUE | NULL | NULL | TRUE |
FALSE | TRUE | FALSE | TRUE |
FALSE | FALSE | FALSE | FALSE |
FALSE | NULL | FALSE | NULL |
NULL | TRUE | NULL | TRUE |
NULL | FALSE | FALSE | NULL |
运算符 | 含义 |
+ | 两个参数相加 |
- | 两个参数相减 |
* | 两个参数相乘 |
/ | 两个参数相除求整数 |
% | 两个参数相除求余数 |
log10(x) | 返回以10为底,x的对数 |
round(x) | x四舍五入 |
运算符 | 含义 | 示例 |
avg(x) | 计算x列的算数平均值 | select avg(request_time) as avg_times |
count(*) | 表示所有的行数 | select count(*) where method = GET |
max(x) | 返回最大值 | select max(request_time) as max_times |
min(x) | 返回最小值 | select min(request_time) as min_times |
sum(x) | 返回x列的和 | select sum(request_time) as sum_times |
stats(x) | 返回x列的聚合计算结果,包括avg、max、min、sum等 | - |
date_histogram | 根据指定间隔获取所有匹配的值 | select data_histogram(timestamp) where status_code=200 |
percentiles | 指定分位符 | select percentiles(age,10,20,30) |
运算符 | 含义 | 示例 |
floor | 返回小于或等于指定数值表达式的最大整数,向下取整 | select floor(num) as nt |
log | 返回x的自然对数,x相对于基数e的对数 | - |
log10 | 返回x的基数为10的对数 | - |
round | 返回数字表达式并四舍五入为指定的长度或精度 | - |
sqrt | 用来求给定值的平方根 | - |
+ | 加运算 | - |
- | 减运算 | - |
* | 乘运算 | - |
/ | 除运算 | - |
date_format | 用于以不同的格式显示日期或时间数据 | - |
if | 用于条件判断 | select name, if(age <= 18, ‘Y’, ‘O’) as myGender |
percentile_ranks | 计算当前值按百分比计算所处在百分位位置 | select percentile_ranks(age, 3, 8, 12, alias=rankAge) |
查询说明 | 示例 |
术语聚合 | SELECT COUNT(*) GROUP BY gender |
范围聚合 | SELECT COUNT (age) GROUP BY range(age, 20 , 25 , 30 , 35 , 40 ) |
日期直方图聚合 | select count(*) group by date_histogram('field'='timestamp','interval'='1m','format'='yyyy-MM-dd HH:mm','alias'='yourAlias','time_zone'='+08:00') |
纯净模式
