Skip to content

查询介绍

日志服务支持秒级查询十亿到千亿级别的日志数据,并支持使用SQL对查询结果进行统计分析,或者使用Scan功能对查询结果的指定字段进行扫描查询

语句描述特点示例
查询语句查询语句用于指定日志查询时的过滤规则,返回符合条件的日志可单独出现,需配置索引Status: 400
分析语句分析语句可以对查询的结果进行计算或者统计,为SQL语法,竖线(|)跟随查询语句: 查询语句|分析语句需结合查询语句一起使用,需配置索引* | SELECT status, count(*) AS PV GROUP BY status
扫描语句扫描语句可以对查询的结果进行扫描计算,为SLS的Scan语法,竖线(|)跟随查询语句: 查询语句 | WHERE bool_expression需配合查询语句使用,无需配置索引* | WHERE userId = '123'

更详细的 查询 说明参考查询概述 - 官方文档

更详细的 索引 说明参考配置索引 - 官方文档

本文主要针对 查询 语句,更详细的 分析扫描(Scan) 使用方法可参考案例中心对应说明

日志场景

测试的日志场景为mock产生的nginx的access log,日志中的主要字段如下

字段名类型样例
body_bytes_sentlong3000
hosttext(不分词)www.mg.mock.com
http_referertext(不分词)www.hpw.mock.com
http_user_agenttextMozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11
http_x_forwarded_fortext(不分词)127.0.0.1
remote_addrtext(不分词)127.0.0.1
remote_usertext50i0(随机字符串)
request_lengthlong2000
request_methodtextPOST
request_timelong30
request_urltext/request/path-1/file-4
statuslong200
time_localtext22/Dec/2022:09:26:43
upstream_response_timedouble0.5

注:未注明分词的默认分词符为 , '";=()[]{}?@&<>/:\n\t\r

普通查询

sql
status: 404
sql
upstream_response_time > 0.5
sql
request_time in [50 100]
sql
host: www.ol.mock.com

模糊查询

sql
remote_user: a*
sql
http_user_agent: mo*la
  • 查询http_user_agent中包含以mozi开头,以la结尾,中间还有一个字符的词的日志 Playground中试试
sql
http_user_agent: mozi?la

当然也可以使用 mozilla, mo*la 或者 mozi?la 等直接查询而不指定字段

短语查询

想搜索time_local处于12月22日的日志,使用了下方的语句会发现,存在其他如time_local字段为 17/Dec/2022:06:22:23 这样格式的日志,因为查询语句被分词为 22Dec, 而本条日志中同时包含两个部分,当不指定字段直接对所有字段进行查询,出现的可能性更高了。所以在查询时可以在关键词前加一个 # 避免这个问题。所以可以更换为下面的查询语句

time_local: 22/Dec

所以可以更换为下面的查询语句

time_local: #"22/Dec"

更详细的 短语查询 说明参考短语查询 - 官方文档

FAQ

  1. 模糊查询不支持后缀匹配,更多需求可考虑选择分析或者扫描语句
  2. 短语查询实现为先分词查询然后再对短语进行过滤,所以其不支持 not 条件,且后面也不支持跟随 分析语句 进行分析