一、基本简介
阿里云日志的作用?日志服务(Log Service,简称SLS)是针对日志类数据的一站式服务,无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立DT时代海量日志处理能力。
如上就是简答的日志如何采集的描述,本片文章主要介绍如何查询日志,所以基础功能就不过多的赘述。
我们有了海量的日志,呢么我们该怎么去分析查询这些日志呢?
日志服务提供大规模日志的实时查询与分析能力。接下来我们就从简至繁简介一下如何查询并且分析你所想要的数据。
二、查询简介
阿里云日志系统的查询语句中包含了查询语句|分析语句
,每个语句中必须要要有查询语句,分析语句可选。
-
简单查询开始:
查询分析图标最基础的语句:* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method LIMIT 10
|之前的是查询语句,*
代表查询全表的数据
|之后的语句是分析语句,相当于sql查询,分析出你所想要的数据类型以及格式,上述的分析语句所查询的是SELECT 请求模式, Count(*) as number GROUP BY 请求模式 LIMIT 10
,是不是很简单?和原生的sql差不多?查询出的表如下:
-
稍微复杂的查询:
接下来我们看个稍微复杂点的图标是如何通过sqk查询出来的
* | select time_series(__time__, '1m', '%H:%i:%s' ,'0') as Time, count(1) as PV, approx_distinct(IP) as UV group by Time order by Time limit 100
不多说直接分析了:
* | 日期格式化 , count(1) as PV, approx_distinct(IP) as UV group by Time order by Time limit 100
涉及到的分析函数:
select time_series(__time__, '1m', '%H:%i:%s' ,'0') 日期格式
approx_distinct(x) 估算x列的唯一值的个数,,相当于去重操作
PV代表时间段请求的总和,UV代表时间段中不重复的ip
-
如何展开一个字段中的JSON
如图,字段重的json如何取出来呢?
第一步:需要格式化这个json,将string转化为json格式(json_parse(properties)
第二步:如何取出json中keyjson_extract_scalar(json_parse(properties), '$.username')
参考文档:JSON函数 文档 -
如何将埋点的参数作为可控的数据操作
第一步:cast(json_parse(properties) AS map(varchar, varchar))
将所有的聚合条件的json中k-v转化为集合格式(这里注意一点,key和value的格式需要一致,否则map无法转化格式)
第二步:unnest(cast(json_parse(properties) AS map(varchar, varchar))) AS t(a, b)
将map集合中的k-v分别展开,所有的key存在a列,所有的value存在b列
第三步:查询语句 | SELECT a, b from log, unnest(cast(json_parse(properties) AS map(varchar, varchar))) AS t(a, b)
模拟查询出来的结果如下,接下来所有的操作就和sql一样了,针对a, b 的筛选聚合都可以操作了:
参考文档:类型转换