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

 

 

 

 

 

。。。后续继续总结,按每一个可视化来分布

 

posted @ 2020-08-25 16:32  进击的小尧好程序员  阅读(470)  评论(0编辑  收藏  举报