SLS案例中心
今日PV
nginx日志查看今日的PV和昨日的对比,先通过count函数计算总的pv,再用compare函数得出今日的pv和昨日的同比。
通过单值图进行展示,显示值为20.381Mil,对比值为-2%
1 * | 2 select 3 diff [1] as today, 4 round((diff [3] -1.0) * 100, 2) as growth 5 FROM 6 ( 7 SELECT 8 compare(pv, 86400) as diff 9 FROM 10 ( 11 SELECT 12 COUNT( 1 ) AS pv 13 FROM 14 log 15 ) 16 )
pv、uv展示
展示tomcat访问的pv、uv随时间变化的曲线
使用time_series 函数根据日志时间做两分钟对齐,然后对时间聚合计算COUNT即访问数量,使用approx_distinct(remote_addr) 计算 remote_addr去重之后的数量,然后跟据时间排序展示。
图中x轴为时间,y轴表示数量,两条线分别是uv、pv的情况。
1 * | 2 select 3 time_series(__time__,'2m','%H:%i','0') as time, 4 COUNT(1) as pv, 5 approx_distinct (remote_addr) as uv 6 GROUP BY 7 time 8 ORDER BY 9 time 10 LIMIT 11 1000
tomcat错误请求占比
先在sql内部获取到请求status超过400的错误请求数量,以及总的请求数量,然后再外部计算比值,
展示时使用单值图中的刻度盘,单位改为 %
1 * | 2 select 3 round((errorCount * 100.0 / totalCount), 2) as errorRatio 4 from 5 ( 6 select 7 sum( 8 case 9 when status >= 400 then 1 10 else 0 11 end 12 ) as errorCount, 13 count(1) as totalCount 14 from 15 log 16 )
付费类型
展示付费类型各自产生的费用,
按时间月和计费方式聚合计算总费用,并按照时间排序,再使用case when为付费方式起中文别名进行展示。
图中使用流图的柱状图展示,聚合列是付费类型,x轴时间,y轴费用。
[ date_format(timestamp , format ) 含义:把timestamp 转化成以 format 形式表示 ]
1 source :bill | 2 select 3 date_format(day, '%Y-%m-%d') as day, 4 total, case 5 when Item = 'PayAsYouGoBill' then '后付费' 6 when Item = 'SubscriptionOrder' then '预付费' 7 when Item = 'Refund' then '退款' 8 when Item = 'Adjustment' then '调账' 9 else Item 10 end as "付费类型" 11 from( 12 select 13 date_trunc('month' , __time__) as day, 14 sum(PretaxAmount) as total, 15 Item 16 from 17 log 18 group by 19 day, 20 Item 21 order by 22 day 23 ) 24 limit 25 10000
在线人数
在线人数,内层通过approx_distinct函数获取client_ip唯一数,然后通过compare获取昨天的uv以及昨天的比值。
结果使用单值图中的同比环比图展示,可以同时看到当时的uv及与昨天的比值。
1 * | 2 select 3 diff [1], 4 diff [2], 5 round (diff [3] - 1,4) * 100 6 from 7 ( 8 select 9 compare(uv, 86400) as diff 10 from 11 ( 12 select 13 approx_distinct() as uv 14 from 15 log 16 ) 17 )
统计具体时间 request_method
用date_trunc 把时间戳转化为时间格式,用map_agg 把时间做为key, 把request_method 作为value, 返回的是json格式
1 | 2 select 3 map_agg(date_trunc('minute', __time__), request_method) as request_method
请求错误按客户端分布
先通过return_code 进行过滤,return_code大于400表示请求错误。然后通过user_agent 聚合计算请求数,按照请求数量倒叙排列,取前10个。
1 return_code > 400 | 2 select 3 user_agent as "客户端版本", 4 count(*) as "错误次数" 5 group by 6 user_agent 7 order by 8 "错误次数" desc 9 limit 10 10
。。。后续继续总结,按每一个可视化来分布