日志服务提供类似于SQL的聚合计算功能,该功能结合了查询功能和SQL的计算功能,对查询结果进行计算。

语法示例:

status>200 |select avg(latency),max(latency) ,count(1) as c GROUP BY  method  ORDER BY c DESC  LIMIT 20

基本语法:

[search query] | [sql query]

search条件和计算条件以|分割,表示以search query从日志中过滤出需要的日志,并对这些日志进行SQL query计算。search query的语法为日志服务专有语法,参见查询语法

效果展示

图 1. 效果展示


交互分析、仪表盘、Grafana、Datav等更多Demo请单击DEMO查看。

前提条件

要使用分析功能,必须在查询分析设置中点击SQL涉及的字段下开启分析开关,详情请参考简介中设置步骤。

  • 如果不开启统计,默认只提供每个shard最多1万行数据的计算功能,而且延时比较高。
  • 开启后可以提供秒级别快速分析。
  • 开启后只对新数据生效。
  • 开启统计后不会产生额外费用。

支持的SQL语法

日志服务支持以下SQL语法,详细内容请点击链接查看。

图 2. 支持的SQL语法


语法结构

SQL语法结构如下:

  • SQL语句中不需要填写from子句和where子句, 默认from表示从当前Logstore的数据中查询,where条件为search query。
  • 支持的子句包括SELECT、GROUP BY、ORDER BY [ASC,DESC]、LIMIT、HAVING。
说明
默认情况下返回前100个结果,如要返回更多请加上limit n,例如* | select count(1) as c, ip group by ip order by c desc limit 100

内置字段

日志服务内置了一些字段供统计,当用户配置了任何一个有效列后,就会自动加上这些内置字段。

字段名 类型 含义
__time__ bigint 日志的时间。
__source__ varchar 日志来源IP。在搜索时,该字段是source,在SQL中才会带上前后各两个下划线。
__topic__ varchar 日志的Topic。

限制说明

  1. 每个Project的最高并发为15。
  2. 单列varchar,最大长度为2048,超过后会截断。
  3. 默认返回100行数据,不支持翻页。若需要返回更多数据,请使用LIMIT语法

示例

统计每小时的PV、UV和最高延时对应的用户请求,延时最高的10个延时:

*|select date_trunc('hour',from_unixtime(__time__)) as time, 
     count(1) as pv, 
     approx_distinct(userid)  as uv,
     max_by(url,latency) as top_latency_url,
     max(latency,10) as top_10_latency
     group by  1
     order by time