• 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

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

  • 相关阅读:
    作为一名程序员应该具备哪些素质
    从100万个整数里找出100个最大的数
    数据库 SQL语句优化
    服务器上文件打包下载
    ThreadPoolExcutor
    几种序列化与get、set方法的关系
    idea没有错误出现红色波浪线怎么去掉?
    两个对象的属性赋值
    RandomStringUtils的使用
    IDEA中类似eclipse的workSpace的实现
  • 原文地址:https://www.cnblogs.com/loliconinvincible/p/13560436.html
Copyright © 2020-2023  润新知