全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

优秀分析案例

更新时间:2018-01-09 14:35:07

案例列表

  1. 500错误率极速增加时,触发报警
  2. 当流量暴跌时,触发报警
  3. 按照数据区间分桶,在每个桶内计算平均延时
  4. 在group by的结果中,返回百分比
  5. 统计满足条件的个数

案例内容

1. 尽量避免对字符串列进行GROUP BY计算

统计每分钟的500错误率,当最近5分钟错误率超过40%时触发报警。

  1. status:500 | select __topic__, max_by(error_count,window_time)/1.0/sum(error_count) as error_ratio, sum(error_count) as total_error from (
  2. select __topic__, count(*) as error_count , __time__ - __time__ % 300 as window_time from log group by __topic__, window_time
  3. )
  4. group by __topic__ having max_by(error_count,window_time)/1.0/sum(error_count) > 0.4 and sum(error_count) > 500 order by total_error desc limit 100

2. 当流量暴跌时,触发报警

统计每分钟的流量,挡最近的流量出现暴跌时,触发报警。 由于在最近的一分钟内,统计的数据不是一个完整分钟的,所以,需要除以(max(time) - min(time)) 进行归一化,统计每个分钟内的流量均值。

  1. * | SELECT SUM(inflow) / (max(__time__) - min(__time__)) as inflow_per_minute, date_trunc('minute',__time__) as minute group by minute

3. 按照数据区间分桶,在每个桶内计算平均延时

  1. * | select avg(latency) as latency , case when originSize < 5000 then 's1' when originSize < 20000 then 's2' when originSize < 500000 then 's3' when originSize < 100000000 then 's4' else 's5' end as os group by os

4. 在group by的结果中,返回百分比

不同部门的count结果,及其所占百分比。该query结合了子查询、窗口函数。其中sum(c) over() 表示计算所有行的和。

  1. * | select department, c*1.0/ sum(c) over () from(select count(1) as c, department from log group by department)

5. 统计满足条件的个数

在URL路径中,我们需要根据URL不同的特征,来计数,这种情况,可以使用CASE WHEN语法,但还有个更简单的语法是count_if。

  1. * | select count_if(uri like '%login') as login_num, count_if(uri like '%register') as register_num, date_format(date_trunc('minute', __time__), '%m-%d %H:%i') as time group by time order by time limit 100
本文导读目录